aboutsummaryrefslogtreecommitdiffstats
path: root/gcc-4.7/libiberty
diff options
context:
space:
mode:
authorDan Albert <danalbert@google.com>2015-06-17 11:09:54 -0700
committerDan Albert <danalbert@google.com>2015-06-17 14:15:22 -0700
commitf378ebf14df0952eae870c9865bab8326aa8f137 (patch)
tree31794503eb2a8c64ea5f313b93100f1163afcffb /gcc-4.7/libiberty
parent2c58169824949d3a597d9fa81931e001ef9b1bd0 (diff)
downloadtoolchain_gcc-f378ebf14df0952eae870c9865bab8326aa8f137.tar.gz
toolchain_gcc-f378ebf14df0952eae870c9865bab8326aa8f137.tar.bz2
toolchain_gcc-f378ebf14df0952eae870c9865bab8326aa8f137.zip
Delete old versions of GCC.
Change-Id: I710f125d905290e1024cbd67f48299861790c66c
Diffstat (limited to 'gcc-4.7/libiberty')
-rw-r--r--gcc-4.7/libiberty/.gitignore2
-rw-r--r--gcc-4.7/libiberty/COPYING.LIB504
-rw-r--r--gcc-4.7/libiberty/ChangeLog8648
-rw-r--r--gcc-4.7/libiberty/Makefile.in1257
-rw-r--r--gcc-4.7/libiberty/README72
-rw-r--r--gcc-4.7/libiberty/_doprnt.c296
-rw-r--r--gcc-4.7/libiberty/aclocal.m4175
-rw-r--r--gcc-4.7/libiberty/alloca.c483
-rw-r--r--gcc-4.7/libiberty/argv.c567
-rw-r--r--gcc-4.7/libiberty/asprintf.c56
-rw-r--r--gcc-4.7/libiberty/at-file.texi15
-rw-r--r--gcc-4.7/libiberty/atexit.c27
-rw-r--r--gcc-4.7/libiberty/basename.c62
-rw-r--r--gcc-4.7/libiberty/bcmp.c27
-rw-r--r--gcc-4.7/libiberty/bcopy.c31
-rw-r--r--gcc-4.7/libiberty/bsearch.c91
-rw-r--r--gcc-4.7/libiberty/bzero.c23
-rw-r--r--gcc-4.7/libiberty/calloc.c34
-rw-r--r--gcc-4.7/libiberty/choose-temp.c75
-rw-r--r--gcc-4.7/libiberty/clock.c103
-rw-r--r--gcc-4.7/libiberty/concat.c234
-rw-r--r--gcc-4.7/libiberty/config.h-vms14
-rw-r--r--gcc-4.7/libiberty/config.in496
-rw-r--r--gcc-4.7/libiberty/config/mh-aix9
-rw-r--r--gcc-4.7/libiberty/config/mh-cxux71
-rw-r--r--gcc-4.7/libiberty/config/mh-fbsd211
-rw-r--r--gcc-4.7/libiberty/config/mh-openedition3
-rw-r--r--gcc-4.7/libiberty/config/mh-windows1
-rwxr-xr-xgcc-4.7/libiberty/configure8272
-rw-r--r--gcc-4.7/libiberty/configure.ac717
-rw-r--r--gcc-4.7/libiberty/configure.com38
-rw-r--r--gcc-4.7/libiberty/copying-lib.texi565
-rw-r--r--gcc-4.7/libiberty/copysign.c154
-rw-r--r--gcc-4.7/libiberty/cp-demangle.c5731
-rw-r--r--gcc-4.7/libiberty/cp-demangle.h169
-rw-r--r--gcc-4.7/libiberty/cp-demint.c232
-rw-r--r--gcc-4.7/libiberty/cplus-dem.c4862
-rw-r--r--gcc-4.7/libiberty/crc32.c181
-rw-r--r--gcc-4.7/libiberty/dyn-string.c397
-rw-r--r--gcc-4.7/libiberty/fdmatch.c68
-rw-r--r--gcc-4.7/libiberty/ffs.c26
-rw-r--r--gcc-4.7/libiberty/fibheap.c486
-rw-r--r--gcc-4.7/libiberty/filename_cmp.c143
-rw-r--r--gcc-4.7/libiberty/floatformat.c775
-rw-r--r--gcc-4.7/libiberty/fnmatch.c220
-rw-r--r--gcc-4.7/libiberty/fnmatch.txh49
-rw-r--r--gcc-4.7/libiberty/fopen_unlocked.c129
-rw-r--r--gcc-4.7/libiberty/functions.texi1940
-rw-r--r--gcc-4.7/libiberty/gather-docs128
-rw-r--r--gcc-4.7/libiberty/getcwd.c62
-rw-r--r--gcc-4.7/libiberty/getopt.c1052
-rw-r--r--gcc-4.7/libiberty/getopt1.c180
-rw-r--r--gcc-4.7/libiberty/getpagesize.c90
-rw-r--r--gcc-4.7/libiberty/getpwd.c128
-rw-r--r--gcc-4.7/libiberty/getruntime.c116
-rw-r--r--gcc-4.7/libiberty/gettimeofday.c30
-rw-r--r--gcc-4.7/libiberty/hashtab.c990
-rw-r--r--gcc-4.7/libiberty/hex.c192
-rw-r--r--gcc-4.7/libiberty/index.c21
-rw-r--r--gcc-4.7/libiberty/insque.c51
-rw-r--r--gcc-4.7/libiberty/lbasename.c84
-rw-r--r--gcc-4.7/libiberty/libiberty.texi318
-rw-r--r--gcc-4.7/libiberty/lrealpath.c157
-rw-r--r--gcc-4.7/libiberty/maint-tool296
-rw-r--r--gcc-4.7/libiberty/make-relative-prefix.c427
-rw-r--r--gcc-4.7/libiberty/make-temp-file.c217
-rw-r--r--gcc-4.7/libiberty/makefile.vms35
-rw-r--r--gcc-4.7/libiberty/md5.c437
-rw-r--r--gcc-4.7/libiberty/memchr.c33
-rw-r--r--gcc-4.7/libiberty/memcmp.c35
-rw-r--r--gcc-4.7/libiberty/memcpy.c26
-rw-r--r--gcc-4.7/libiberty/memmem.c71
-rw-r--r--gcc-4.7/libiberty/memmove.c26
-rw-r--r--gcc-4.7/libiberty/mempcpy.c42
-rw-r--r--gcc-4.7/libiberty/memset.c26
-rw-r--r--gcc-4.7/libiberty/mkstemps.c147
-rw-r--r--gcc-4.7/libiberty/msdos.c15
-rw-r--r--gcc-4.7/libiberty/objalloc.c291
-rw-r--r--gcc-4.7/libiberty/obstack.c510
-rw-r--r--gcc-4.7/libiberty/obstacks.texi758
-rw-r--r--gcc-4.7/libiberty/partition.c183
-rw-r--r--gcc-4.7/libiberty/pex-common.c646
-rw-r--r--gcc-4.7/libiberty/pex-common.h153
-rw-r--r--gcc-4.7/libiberty/pex-djgpp.c294
-rw-r--r--gcc-4.7/libiberty/pex-msdos.c317
-rw-r--r--gcc-4.7/libiberty/pex-one.c43
-rw-r--r--gcc-4.7/libiberty/pex-unix.c788
-rw-r--r--gcc-4.7/libiberty/pex-win32.c971
-rw-r--r--gcc-4.7/libiberty/pexecute.c124
-rw-r--r--gcc-4.7/libiberty/pexecute.txh316
-rw-r--r--gcc-4.7/libiberty/physmem.c305
-rw-r--r--gcc-4.7/libiberty/putenv.c84
-rw-r--r--gcc-4.7/libiberty/random.c404
-rw-r--r--gcc-4.7/libiberty/regex.c8202
-rw-r--r--gcc-4.7/libiberty/rename.c36
-rw-r--r--gcc-4.7/libiberty/rindex.c21
-rw-r--r--gcc-4.7/libiberty/safe-ctype.c255
-rw-r--r--gcc-4.7/libiberty/setenv.c185
-rw-r--r--gcc-4.7/libiberty/setproctitle.c48
-rw-r--r--gcc-4.7/libiberty/sha1.c416
-rw-r--r--gcc-4.7/libiberty/sigsetmask.c40
-rw-r--r--gcc-4.7/libiberty/simple-object-coff.c804
-rw-r--r--gcc-4.7/libiberty/simple-object-common.h355
-rw-r--r--gcc-4.7/libiberty/simple-object-elf.c953
-rw-r--r--gcc-4.7/libiberty/simple-object-mach-o.c1377
-rw-r--r--gcc-4.7/libiberty/simple-object.c422
-rw-r--r--gcc-4.7/libiberty/simple-object.txh189
-rw-r--r--gcc-4.7/libiberty/snprintf.c63
-rw-r--r--gcc-4.7/libiberty/sort.c186
-rw-r--r--gcc-4.7/libiberty/spaces.c69
-rw-r--r--gcc-4.7/libiberty/splay-tree.c593
-rw-r--r--gcc-4.7/libiberty/stack-limit.c62
-rw-r--r--gcc-4.7/libiberty/stpcpy.c43
-rw-r--r--gcc-4.7/libiberty/stpncpy.c48
-rw-r--r--gcc-4.7/libiberty/strcasecmp.c87
-rw-r--r--gcc-4.7/libiberty/strchr.c28
-rw-r--r--gcc-4.7/libiberty/strdup.c27
-rw-r--r--gcc-4.7/libiberty/strerror.c809
-rw-r--r--gcc-4.7/libiberty/strncasecmp.c86
-rw-r--r--gcc-4.7/libiberty/strncmp.c34
-rw-r--r--gcc-4.7/libiberty/strndup.c55
-rw-r--r--gcc-4.7/libiberty/strrchr.c28
-rw-r--r--gcc-4.7/libiberty/strsignal.c610
-rw-r--r--gcc-4.7/libiberty/strstr.c41
-rw-r--r--gcc-4.7/libiberty/strtod.c137
-rw-r--r--gcc-4.7/libiberty/strtol.c165
-rw-r--r--gcc-4.7/libiberty/strtoul.c115
-rw-r--r--gcc-4.7/libiberty/strverscmp.c157
-rw-r--r--gcc-4.7/libiberty/testsuite/Makefile.in92
-rw-r--r--gcc-4.7/libiberty/testsuite/demangle-expected4268
-rw-r--r--gcc-4.7/libiberty/testsuite/test-demangle.c349
-rw-r--r--gcc-4.7/libiberty/testsuite/test-expandargv.c331
-rw-r--r--gcc-4.7/libiberty/testsuite/test-pexecute.c522
-rw-r--r--gcc-4.7/libiberty/timeval-utils.c87
-rw-r--r--gcc-4.7/libiberty/tmpnam.c52
-rw-r--r--gcc-4.7/libiberty/unlink-if-ordinary.c72
-rw-r--r--gcc-4.7/libiberty/vasprintf.c197
-rw-r--r--gcc-4.7/libiberty/vfork.c22
-rw-r--r--gcc-4.7/libiberty/vfprintf.c15
-rw-r--r--gcc-4.7/libiberty/vprintf.c28
-rw-r--r--gcc-4.7/libiberty/vsnprintf.c148
-rw-r--r--gcc-4.7/libiberty/vsprintf.c56
-rw-r--r--gcc-4.7/libiberty/waitpid.c35
-rw-r--r--gcc-4.7/libiberty/xatexit.c99
-rw-r--r--gcc-4.7/libiberty/xexit.c52
-rw-r--r--gcc-4.7/libiberty/xmalloc.c184
-rw-r--r--gcc-4.7/libiberty/xmemdup.c39
-rw-r--r--gcc-4.7/libiberty/xstrdup.c36
-rw-r--r--gcc-4.7/libiberty/xstrerror.c79
-rw-r--r--gcc-4.7/libiberty/xstrndup.c60
150 files changed, 0 insertions, 73649 deletions
diff --git a/gcc-4.7/libiberty/.gitignore b/gcc-4.7/libiberty/.gitignore
deleted file mode 100644
index ca2fba5cc..000000000
--- a/gcc-4.7/libiberty/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/required-list
-/xhost-mkfrag
diff --git a/gcc-4.7/libiberty/COPYING.LIB b/gcc-4.7/libiberty/COPYING.LIB
deleted file mode 100644
index ae23fcfda..000000000
--- a/gcc-4.7/libiberty/COPYING.LIB
+++ /dev/null
@@ -1,504 +0,0 @@
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 2.1, February 1999
-
- Copyright (C) 1991, 1999 Free Software Foundation, Inc.
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
- as the successor of the GNU Library Public License, version 2, hence
- the version number 2.1.]
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software--to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software packages--typically libraries--of the
-Free Software Foundation and other authors who decide to use it. You
-can use it too, but we suggest you first think carefully about whether
-this license or the ordinary General Public License is the better
-strategy to use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of
-it in new free programs; and that you are informed that you can do
-these things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the "Lesser" General Public License because it
-does Less to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-"work based on the library" and a "work that uses the library". The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
- GNU LESSER GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License Agreement applies to any software library or other
-program which contains a notice placed by the copyright holder or
-other authorized party saying it may be distributed under the terms of
-this Lesser General Public License (also called "this License").
-Each licensee is addressed as "you".
-
- A "library" means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The "Library", below, refers to any such software library or work
-which has been distributed under these terms. A "work based on the
-Library" means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term "modification".)
-
- "Source code" for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
- 1. You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
- 2. You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) The modified work must itself be a software library.
-
- b) You must cause the files modified to carry prominent notices
- stating that you changed the files and the date of any change.
-
- c) You must cause the whole of the work to be licensed at no
- charge to all third parties under the terms of this License.
-
- d) If a facility in the modified Library refers to a function or a
- table of data to be supplied by an application program that uses
- the facility, other than as an argument passed when the facility
- is invoked, then you must make a good faith effort to ensure that,
- in the event an application does not supply such function or
- table, the facility still operates, and performs whatever part of
- its purpose remains meaningful.
-
- (For example, a function in a library to compute square roots has
- a purpose that is entirely well-defined independent of the
- application. Therefore, Subsection 2d requires that any
- application-supplied function or table used by this function must
- be optional: if the application does not supply it, the square
- root function must still compute square roots.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
- 4. You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 5. A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a "work that uses the Library". Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a "work that uses the Library" with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a "work that uses the
-library". The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a "work that uses the Library" uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
- 6. As an exception to the Sections above, you may also combine or
-link a "work that uses the Library" with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
- a) Accompany the work with the complete corresponding
- machine-readable source code for the Library including whatever
- changes were used in the work (which must be distributed under
- Sections 1 and 2 above); and, if the work is an executable linked
- with the Library, with the complete machine-readable "work that
- uses the Library", as object code and/or source code, so that the
- user can modify the Library and then relink to produce a modified
- executable containing the modified Library. (It is understood
- that the user who changes the contents of definitions files in the
- Library will not necessarily be able to recompile the application
- to use the modified definitions.)
-
- b) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (1) uses at run time a
- copy of the library already present on the user's computer system,
- rather than copying library functions into the executable, and (2)
- will operate properly with a modified version of the library, if
- the user installs one, as long as the modified version is
- interface-compatible with the version that the work was made with.
-
- c) Accompany the work with a written offer, valid for at
- least three years, to give the same user the materials
- specified in Subsection 6a, above, for a charge no more
- than the cost of performing this distribution.
-
- d) If distribution of the work is made by offering access to copy
- from a designated place, offer equivalent access to copy the above
- specified materials from the same place.
-
- e) Verify that the user has already received a copy of these
- materials or that you have already sent this user a copy.
-
- For an executable, the required form of the "work that uses the
-Library" must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies
-the executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
- 7. You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
- a) Accompany the combined library with a copy of the same work
- based on the Library, uncombined with any other library
- facilities. This must be distributed under the terms of the
- Sections above.
-
- b) Give prominent notice with the combined library of the fact
- that part of it is a work based on the Library, and explaining
- where to find the accompanying uncombined form of the same work.
-
- 8. You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
- 9. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
- 10. Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
- 11. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 12. If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
- 13. The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-"any later version", you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
- 14. If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
- NO WARRANTY
-
- 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
- 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-"copyright" line and a pointer to where the full notice is found.
-
- <one line to give the library's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with this library; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the library, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the
- library `Frob' (a library for tweaking knobs) written by James Random Hacker.
-
- <signature of Ty Coon>, 1 April 1990
- Ty Coon, President of Vice
-
-That's all there is to it!
-
-
diff --git a/gcc-4.7/libiberty/ChangeLog b/gcc-4.7/libiberty/ChangeLog
deleted file mode 100644
index 859760d55..000000000
--- a/gcc-4.7/libiberty/ChangeLog
+++ /dev/null
@@ -1,8648 +0,0 @@
-2012-09-20 Release Manager
-
- * GCC 4.7.2 released.
-
-2012-06-14 Release Manager
-
- * GCC 4.7.1 released.
-
-2012-03-24 H.J. Lu <hongjiu.lu@intel.com>
-
- * testsuite/demangle-expected: Fix a typo.
-
-2012-03-22 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (cplus_demangle_operators): Add li.
- (d_unqualified_name): Handle it specially.
-
-2012-03-22 Release Manager
-
- * GCC 4.7.0 released.
-
-2012-03-20 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (cplus_demangle_type): Handle 'auto'.
-
-2012-01-26 Jakub Jelinek <jakub@redhat.com>
-
- * make-relative-prefix.c (make_relative_prefix_1): Avoid warning
- about using preprocessor directives inside of macro arguments.
-
-2012-01-22 Douglas B Rupp <rupp@gnat.com>
-
- * configure: Regenerate.
-
-2012-01-10 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (d_print_comp) [DEMANGLE_COMPONENT_OPERATOR]:
- Omit a trailing space in the operator name.
-
-2012-01-06 Jason Merrill <jason@redhat.com>
-
- PR c++/6057
- PR c++/48051
- PR c++/50855
- PR c++/51322
- * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_NULLARY and
- DEMANGLE_COMPONENT_INITIALIZER_LIST.
- (d_make_comp): Likewise. Allow null right arg for
- DEMANGLE_COMPONENT_TRINARY_ARG2.
- (cplus_demangle_operators): Adjust new/delete; add .*, :: and throw.
- (d_template_args, d_template_arg): Handle 'J' for argument packs.
- (d_exprlist): Add terminator parm.
- (d_expression, d_print_comp): Handle initializer lists, nullary
- expressions, prefix/suffix operators, and new.
- (d_print_subexpr): Avoid parens around DEMANGLE_COMPONENT_QUAL_NAME
- and DEMANGLE_COMPONENT_INITIALIZER_LIST.
- * testsuite/demangle-expected: Add tests.
-
- * cp-demangle.c (cplus_demangle_type): decltype, pack expansion
- and vector are substitutable.
- (cplus_demangle_operators): Sort.
-
-2012-01-04 Andreas Krebbel <Andreas.Krebbel@de.ibm.com>
-
- * configure: Regenerate.
-
-2012-01-02 Jakub Jelinek <jakub@redhat.com>
-
- * make-relative-prefix.c (make_relative_prefix_1): Avoid
- stack overflow if PATH contains just a single entry and
- HOST_EXECUTABLE_SUFFIX needs to be used.
-
- PR driver/48306
- * make-relative-prefix.c: Include sys/stat.h.
- (make_relative_prefix_1): If access succeeds, check also stat
- if nstore is a regular file.
-
-2011-12-20 Andreas Schwab <schwab@linux-m68k.org>
-
- * configure: Regenerate.
-
-2011-12-20 Tristan Gingold <gingold@adacore.com>
-
- * aclocal.m4: Assume strncmp works in cross case.
- * configure: Regenerate
-
-2011-12-19 Andreas Schwab <schwab@linux-m68k.org>
-
- * configure: Regenerate.
-
-2011-11-07 Richard Henderson <rth@redhat.com>
-
- Merged from transactional-memory.
-
- * cp-demangle.c (cplus_demangle_fill_ctor): Accept
- gnu_v3_object_ctor_group.
- (cplus_demangle_fill_dtor): Accept gnu_v3_object_dtor_group.
- (d_ctor_dtor_name): Recognize gnu_v3_object_ctor_group
- and gnu_v3_object_dtor_group.
- (d_dump): Handle DEMANGLE_COMPONENT_TRANSACTION_CLONE
- and DEMANGLE_COMPONENT_NONTRANSACTION_CLONE.
- (d_make_comp, d_print_comp): Likewise.
- (d_special_name): Generate them.
-
-2011-11-04 Jason Merrill <jason@redhat.com>
-
- PR c++/48370
- * cp-demangle.c (d_special_name, d_print_comp): Handle a
- discriminator number on DEMANGLE_COMPONENT_REFTEMP.
-
-2011-11-02 Doug Evans <dje@google.com>
-
- * Makefile.in (CFILES): Add timeval-utils.c.
- (REQUIRED_OFILES): Add timeval-utils.$(objext).
- (INSTALLED_HEADERS): Add timeval-utils.h.
- (timeval-utils.$(objext)): Add rule.
-
-2011-10-28 Ian Lance Taylor <iant@google.com>
-
- * setproctitle.c (setproctitle): Use "GNU/Linux" in comment.
-
-2011-10-26 Iain Sandoe <iains@gcc.gnu.org>
-
- PR target/48108
- * simple-object-mach-o.c (GNU_WRAPPER_SECTS, GNU_WRAPPER_INDEX,
- GNU_WRAPPER_NAMES): New macros.
- (simple_object_mach_o_segment): Handle wrapper scheme.
- (simple_object_mach_o_write_section_header): Allow the segment name
- to be supplied.
- (simple_object_mach_o_write_segment): Handle wrapper scheme. Ensure
- that the top-level segment name in the load command is empty.
- (simple_object_mach_o_write_to_file): Determine the number of
- sections during segment output, use that in writing the header.
-
-2011-10-10 Ian Lance Taylor <iant@google.com>
-
- PR c++/48665
- * cp-demangle.c (d_cv_qualifiers): If qualifiers are applied to a
- function type, change them to apply to the "this" parameter.
- * testsuite/demangle-expected: Add test case.
-
-2011-09-28 Doug Evans <dje@google.com>
-
- * timeval-utils.c: New file.
-
- * argv.c (countargv): New function.
-
-2011-09-23 Cary Coutant <ccoutant@google.com>
-
- PR 40831
- * cp-demangle.c (d_make_comp): Add new component type.
- (cplus_demangle_mangled_name): Check for clone suffixes.
- (d_parmlist): Don't error out if we see '.'.
- (d_clone_suffix): New function.
- (d_print_comp): Print info for clone suffixes.
- * testsuite/demangle-expected: Add new testcases.
-
-2011-09-23 Ian Lance Taylor <iant@google.com>
- Pierre Vittet <piervit@pvittet.com>
-
- * md5.c (md5_process_bytes): Correct handling of unaligned
- buffer.
-
-2011-08-22 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-
- * aclocal.m4: Include ../config/picflag.m4.
- * configure.ac (GCC_PICFLAG): Call it.
- (enable_shared): Clear PICFLAG unless shared.
- * configure: Regenerate.
-
-2011-08-12 Steve Ellcey <sje@cup.hp.com>
-
- * md5.c (md5_read_ctx): Handle mis-aligned resbuf pointer.
-
-2011-08-06 Uros Bizjak <ubizjak@gmail.com>
-
- * testsuite/test-expandargv.c (writeout_test): Check result of fwrite.
-
-2011-08-01 Jason Merrill <jason@redhat.com>
-
- PR c++/49932
- * cp-demangle.c (d_prefix): Handle decltype.
- * testsuite/demangle-expected: Test it.
-
-2011-07-26 H.J. Lu <hongjiu.lu@intel.com>
-
- * testsuite/demangle-expected: Remove an extra line.
-
-2011-07-26 Ian Lance Taylor <iant@google.com>
-
- * cp-demangle.c (d_print_init): Initialize pack_index field.
- (d_print_comp): Check for NULL template argument.
- * testsuite/demangle-expected: Add test case.
-
-2011-07-22 Gerald Pfeifer <gerald@pfeifer.com>
-
- PR target/49817
- * stack-limit.c: Include <stdint.h>.
-
-2011-07-22 Jakub Jelinek <jakub@redhat.com>
-
- PR c++/49756
- * stack-limit.c: New file.
- * Makefile.in: Regenerate deps.
- (CFILES): Add stack-limit.c.
- (REQUIRED_OFILES): Add ./stack-limit.$(objext).
- * configure.ac (checkfuncs): Add getrlimit and setrlimit.
- (AC_CHECK_FUNCS): Likewise.
- * configure: Regenerated.
- * config.in: Regenerated.
-
-2011-07-04 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (d_expression): Handle 'this'.
- (d_print_comp) [DEMANGLE_COMPONENT_FUNCTION_PARAM]: Likewise.
-
-2011-07-01 Joel Brobecker <brobecker@adacore.com>
-
- * filename_cmp.c (filename_cmp, filename_ncmp): Add handling of
- HAVE_CASE_INSENSITIVE_FILE_SYSTEM.
-
-2011-07-01 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- PR debug/49408
- * cp-demangle.c (d_print_comp): Suppress argument list for function
- references by the '&' unary operator. Keep also already processed
- variant without the argument list. Suppress argument list types for
- function call used in an expression.
- * testsuite/demangle-expected: Fix excessive argument list types in
- `test for typed function in decltype'. New testcase for no argument
- list types printed. 3 new testcases for function references by the
- '&' unary operator..
-
-2011-06-20 Jason Merrill <jason@redhat.com>
-
- PR c++/37089
- * cp-demangle.c (d_print_comp): Handle reference smashing.
- * testsuite/demangle-expected: Test it.
-
-2011-06-13 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * cp-demangle.c (d_print_comp) <DEMANGLE_COMPONENT_FUNCTION_TYPE>:
- Suppress d_print_mod for DMGL_RET_POSTFIX.
- * testsuite/demangle-expected: New testcases for --ret-postfix.
-
-2011-06-13 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * cp-demangle.c (d_print_comp) <DEMANGLE_COMPONENT_FUNCTION_TYPE>: Do
- not pass DMGL_RET_POSTFIX or DMGL_RET_DROP. Support DMGL_RET_DROP.
- * testsuite/demangle-expected: New testcases for --ret-drop.
- * testsuite/test-demangle.c: Document --ret-drop in a comment.
- (main): New variable ret_drop, fill it, call cplus_demangle with it.
-
-2011-06-13 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * cp-demangle.c (struct d_print_info): Remove field options.
- (d_print_init): Remove parameter options.
- (cplus_demangle_print_callback): Update all the callers.
- (d_print_comp, d_print_mod_list, d_print_mod, d_print_function_type)
- (d_print_array_type, d_print_expr_op, d_print_cast, d_print_subexpr):
- Add parameter options, update all the callers.
-
-2011-04-20 Jim Meyering <meyering@redhat.com>
-
- * cp-demint.c (cplus_demangle_v3_components): Remove useless
- if-before-free.
- * cplus-dem.c (squangle_mop_up): Likewise.
- (delete_non_B_K_work_stuff): Likewise.
- * pex-common.c (pex_free): Likewise.
- * pex-msdos.c (pex_msdos_cleanup): Likewise.
- * pex-win32.c (mingw_rootify, msys_rootify): Likewise.
- (win32_spawn): Likewise.
- * regex.c (FREE_VAR, weak_alias): Likewise.
- * spaces.c (spaces): Likewise.
-
-2011-04-10 Jim Meyering <meyering@redhat.com>
-
- Avoid memory overrun in a test leading to potential double-free.
- * testsuite/test-expandargv.c (writeout_test): Fix off-by-one error:
- i.e., do copy the trailing NUL byte.
-
-2011-03-31 Tristan Gingold <gingold@adacore.com>
-
- * makefile.vms (OBJS): Add filename_cmp.obj
-
-2011-02-28 Kai Tietz <kai.tietz@onevision.com>
-
- * filename_cmp.c (filename_ncmp): New function.
- * functions.texi: Regenerated.
-
-2011-02-03 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * splay-tree.c: Escape wrapping newlines in texinfo markup
- with '@', to fix function declaration output rendering.
- * gather-docs: Relax and improve macro name matching to actually
- match all current names and to allow input line wrapping.
- * bsearch.c, concat.c, crc32.c, fnmatch.txh, fopen_unlocked.c,
- hashtab.c, insque.c, make-relative-prefix.c, memchr.c, memcmp.c,
- memcpy.c, memmem.c, memmove.c, mempcpy.c, memset.c,
- pexecute.txh, random.c, setenv.c, setproctitle.c,
- simple-object.txh, snprintf.c, stpncpy.c, strncmp.c, strtod.c,
- strtol.c, vasprintf.c, vprintf.c, vsnprintf.c, xmemdup.c:
- Wrap long texinfo input lines.
- * functions.texi: Regenerate.
-
-2011-01-18 Mike Frysinger <vapier@gentoo.org>
-
- * .gitignore: New file.
-
-2010-12-08 Doug Evans <dje@google.com>
-
- * splay-tree.c (splay_tree_foreach_helper): Remove arg `sp',
- all callers updated. Rewrite to be non-recursive.
-
-2010-11-29 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-
- * setproctitle.c [HAVE_SYS_PRCTL_H]: Include <sys/types.h>.
-
-2010-11-20 Anthony Green <green@moxielogic.com>
-
- * configure.ac: Turn PR_SET_NAME link test into a test for
- sys/prctl.h.
- * configure, config.in: Rebuilt.
- * setproctitle.c: Test for HAVE_SYS_PRCTL_H.
- (setproctitle) Test for PR_SET_NAME definition.
-
-2010-11-20 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- PR other/46202
- * Makefile.in (install-strip): New phony target.
- (install): Also mark as phony.
-
-2010-11-16 Ian Lance Taylor <iant@google.com>
-
- * simple-object.c (simple_object_attributes_merge): Rename from
- simple_object_attributes_compare. Call merge field.
- * simple-object-common.h (struct simple_object_functions): Rename
- attributes_compare field to attribute_merge.
- * simple-object-elf.c (EM_SPARC): Define.
- (EM_SPARC32PLUS): Define.
- (simple_object_elf_attributes_merge): Renamed from
- simple_object_elf_attributes_compare. Permit EM_SPARC and
- EM_SPARC32PLUS objects to be merged.
- (simple_object_elf_functions): Update function name.
- * simple-object-coff.c (simple_object_coff_attributes_merge):
- Rename from simple_object_coff_attributes_compare.
- (simple_object_coff_functions): Update function name.
- * simple-object-mach-o.c (simple_object_mach_o_attributes_merge):
- Renamed from simple_object_mach_o_attributes_compare.
- (simple_object_mach_o_functions): Update function name.
-
-2010-11-16 H.J. Lu <hongjiu.lu@intel.com>
-
- PR other/42670
- PR binutils/11137
- * cp-demangle.c (d_make_demangle_mangled_name): New.
- (d_demangle_callback): Use it on DCT_GLOBAL_XTORS.
-
- * testsuite/demangle-expected: Updated.
-
-2010-11-14 Kai Tietz <kai.tietz@onevision.com>
-
- * simple-object-coff.c (simple_object_coff_read_strtab): Fix reading
- offset.
-
-2010-11-12 Ian Lance Taylor <iant@google.com>
-
- PR other/46332
- * cp-demangle.c (d_print_function_type): Don't print parentheses
- if there are no modifiers to print.
- * testsuite/demangle-expected: Tweak one test case, add another.
-
-2010-11-04 Richard Henderson <rth@redhat.com>
-
- * configure.ac (AC_CHECK_HEADERS): Add process.h.
- (checkfuncs): Add dup3, spawnve, spawnvpe; sort the list.
- (AC_CHECK_FUNCS): Add dup3, spawnve, spawnvpe.
- * configure, config.in: Rebuild.
- * pex-unix.c [HAVE_SPAWNVE] (pex_unix_exec_child): New function.
- [HAVE_SPAWNVE] (save_and_install_fd, restore_fd): New functions.
-
-2010-11-02 Ian Lance Taylor <iant@google.com>
- Dave Korn <dave.korn.cygwin@gmail.com>
- Iain Sandoe <iains@gcc.gnu.org>
-
- * simple-object.c: New file.
- * simple-object-common.h: New file.
- * simple-object-elf.c: New file.
- * simple-object-mach-o.c: New file.
- * simple-object-coff.c: New file.
- * simple-object.txh: New file.
- * configure.ac: Add AC_TYPE_SSIZE_T.
- * Makefile.in: Rebuild dependencies.
- (CFILES): Add simple-object.c, simple-object-coff,
- simple-object-elf.c, and simple-object-mach-o.c.
- (REQUIRED_OFILES): Add corresponding object files.
- * configure: Rebuild.
- * config.in: Rebuild.
- * functions.texi: Rebuild.
-
-2010-10-29 Ian Lance Taylor <iant@google.com>
-
- * setproctitle.c: Add space after function name in @deftypefn
- comment.
- * functions.texi: Rebuild.
-
-2010-10-26 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * aclocal.m4 (AC_LANG_FUNC_LINK_TRY(C)): Delete.
- * configure: Regenerate.
-
-2010-10-07 Andi Kleen <ak@linux.intel.com>
-
- * configure: Regenerate.
- * configure.ac: Turn PR_SET_NAME check into link check.
-
-2010-10-06 Andi Kleen <ak@linux.intel.com>
-
- * Makefile.in (CFILES): Add setproctitle.
- (CONFIGURED_OFILES): Add setproctitle.
- (setproctitle): Add rule.
- * config.in: Regenerate.
- * configure: Regenerate.
- * configure.ac: Add checks for prctl PR_SET_NAME and setproctitle.
- * setproctitle.c: Add file.
- * functions.texi: Regenerate.
-
-2010-09-22 Tristan Gingold <gingold@adacore.com>
-
- * cplus-dem.c (ada_demangle): Add comments.
- Handle stream and controlled type operations.
- Decoding of some uppercase letters moved before separators.
- * testsuite/demangle-expected: Add tests.
-
-2010-09-10 James Lyon <jameslyon0@googlemail.com>
-
- http://sourceware.org/bugzilla/show_bug.cgi?id=11572
- * cp-demangle.c (d_find_pack): Add case for
- DEMANGLE_COMPONENT_LAMBDA.
- * testsuite/demangle-expected: Add regression test.
-
-2010-09-08 Tristan Gingold <gingold@adacore.com>
-
- PR 44001
- * maint-tool (missing): Fix pattern for object file.
- (deps): Use $(objext) for object extension.
- * Makefile.in (objext): New variable.
- Replace all occurences of .o with .$(objext)
- Regenerate with maint-deps
- * configure.ac (pexecute): Set to the basename.
- * configure: Regenerate.
-
-2010-08-20 Maciej W. Rozycki <macro@codesourcery.com>
-
- * pex-common.c (pex_read_err): Set stderr_pipe to -1 if a
- corresponding stream has been opened.
- (pex_free): Close pipe file descriptors corresponding to child's
- stdout and stderr before waiting.
-
-2010-08-13 Nick Clifton <nickc@redhat.com>
-
- * argv.c (expandargv): Limit the number of times that response
- files are opened in order to prevent infinite recursion.
-
-2010-07-21 Pascal Obry <obry@adacore.com>
-
- * make-temp-file.c (choose_tmpdir): Append a dot to P_tmpdir if needed.
-
-2010-07-06 Ken Werner <ken.werner@de.ibm.com>
-
- * floatformat.c (floatformat_ieee_half_big): New variable.
- (floatformat_ieee_half_little): Likewise.
-
-2010-06-14 Gerald Pfeifer <gerald@pfeifer.com>
-
- * libiberty.texi: Remove reference to GCC 3 and 2001 (thrice).
- Update copyright years.
- Move to GFDL 1.3.
-
-2010-06-10 Jakub Jelinek <jakub@redhat.com>
-
- PR other/43838
- * cp-demangle.c (struct d_print_info): Add flush_count field.
- (d_print_init): Initialize it to 0.
- (d_print_flush): Increment it.
- (d_print_comp): If needed flush before appending ", ". Only
- decrement dpi->len if no flushes happened during the recursive
- call.
- * testsuite/demangle-expected: Add a test for this.
-
-2010-06-08 Laurynas Biveinis <laurynas.biveinis@gmail.com>
-
- * splay-tree.c: Update copyright years.
- (splay_tree_new_typed_alloc): New.
- (splay_tree_new_with_allocator): Use it.
-
- * hashtab.c: Update copyright years.
- (htab_create_typed_alloc): New.
- (htab_create_alloc): Use it.
-
- * functions.texi: Regenerate.
-
-2010-06-03 Joern Rennecke <joern.rennecke@embecosm.com>
- Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- PR bootstrap/42798
- * configure.ac: Check for declaration of 'basename(char *)'.
- * configure: Regenerate.
-
-2010-05-26 Kai Tietz <kai.tietz@onevision.com>
-
- * testsuite/demangle-expected: Add tests for __int128
- and unsigned __int128 types.
-
-2010-05-06 Magnus Fromreide <magfr@lysator.liu.se>
- Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (cplus_demangle_builtin_types): Add nullptr.
- (cplus_demangle_type): Handle nullptr.
- * testsuite/demangle-expected: Test it.
-
-2010-04-23 Pedro Alves <pedro@codesourcery.com>
-
- * lbasename.c (lbasename): Split into ...
- (unix_lbasename, dos_basename): ... these.
- (lbasename): ... and reimplement on top of them.
- * Makefile.in (lbasename.o): Add dependency on
- $(INCDIR)/filenames.h.
-
-2010-04-07 Jakub Jelinek <jakub@redhat.com>
-
- * regex.c (byte_re_match_2_internal): Avoid set but not used
- warning.
-
-2010-03-22 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (d_print_mod): Use () rather than [] for vectors.
-
-2010-03-01 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * Makefile.in (all): Do not use exec.
-
-2010-02-04 Tom Tromey <tromey@redhat.com>
-
- * testsuite/demangle-expected: Add missing --format=gnu-v3.
-
-2010-02-03 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (d_expression): Handle dependent operator name.
-
- PR c++/12909
- * cp-demangle.c (d_number_component, d_vector_type): New.
- (cplus_demangle_type, d_print_comp, d_print_mod): Handle vectors.
-
-2010-01-25 Ian Lance Taylor <iant@google.com>
-
- * cp-demangle.c (cplus_demangle_type): Check for invalid type
- after "DF".
- * testsuite/demangle-expected: Add test.
-
-2010-01-20 Jason Merrill <jason@redhat.com>
-
- PR c++/42338
- * cp-demangle.c (d_print_comp): Fix array index printing.
-
-2010-01-11 Tristan Gingold <gingold@adacore.com>
-
- * cplus-dem.c (ada_demangle): Remove prototype.
- (grow_vect): Removed.
- (ada_demangle): Rewritten.
- (cplus_demangle): Fix indentation.
- * testsuite/demangle-expected: Add tests for Ada.
-
-2010-01-09 Ian Lance Taylor <iant@google.com>
-
- PR other/42230
- * cp-demangle.c (d_demangle): Return dgs.alc on success.
-
-2010-01-04 Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
-
- PR target/42316
- * configure.ac (PICFLAG): Use -fPIC on SH hosts.
- * configure: Regenerate.
-
-2009-12-07 Doug Evans <dje@google.com>
-
- * pex-unix.c (pex_unix_exec_child): Save/restore environ.
-
-2009-11-26 Ben Elliston <bje@au.ibm.com>
-
- * configure.ac (AC_CHECK_FUNCS): Sort into alphabetic order.
- * configure: Regenerate.
-
-2009-11-25 Ben Elliston <bje@au.ibm.com>
-
- * functions.texi: Rebuild.
-
-2009-11-25 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
- Ben Elliston <bje@au.ibm.com>
-
- * README: Mention changes to Makefile.in and functions.texi.
- * gather-docs: Mention 'make stamp-functions' in the header.
-
-2009-11-23 Ben Elliston <bje@au.ibm.com>
- Ian Lance Taylor <iant@google.com>
-
- * pex-unix.c (pex_child_error): Improve warning avoidance by
- checking the results of write(3) and exiting with -2 if any write
- returns a negative value.
-
-2009-11-22 Steve Ward <planet36@gmail.com>
-
- * dyn-string.c (dyn_string_append_char): Fix typo in comment.
-
-2009-11-20 Ben Elliston <bje@au.ibm.com>
-
- * pex-unix.c (pex_child_error): Define writeerr macro to avoid
- unused result warnings from write(3) calls. Undefine writeerr
- after all uses.
-
-2009-10-08 Daniel Gutson <dgutson@codesourcery.com>
- Daniel Jacobowitz <dan@codesourcery.com>
- Pedro Alves <pedro@codesourcery.com>
-
- libiberty/
- * argv.c (consume_whitespace): New function.
- (only_whitespace): New function.
- (buildargv): Always use ISSPACE by calling consume_whitespace.
- (expandargv): Skip empty files. Do not stop at the first empty
- argument (calling only_whitespace)..
- * testsuite/test-expandargv.c: (test_data): Test empty lines
- and empty arguments.
- (run_tests): Fix false positives due to shorter arguments.
-
-2009-09-30 Martin Thuresson <martint@google.com>
-
- * regex.c (byte_re_match_2_internal): Split declaration and
- assignment to avoid -Wc++-compat warning due to goto.
-
-2009-09-29 Jason Merrill <jason@redhat.com>
-
- * Makefile.in: Enable demangle target.
- * cp-demangle.c (d_lambda, d_unnamed_type, d_make_default_arg): New.
- (d_name, d_prefix, d_unqualified_name, d_local_name): Handle lambdas.
- (d_parmlist): Factor out from d_bare_function_type.
- (d_compact_number): Factor out from d_template_param and d_expression.
- (d_append_num): Factor out from d_print_comp.
- (d_print_comp, d_print_mod_list): Handle lambdas.
- * testsuite/demangle-expected: Add lambda tests.
-
-2009-09-23 Matthew Gingell <gingell@adacore.com>
-
- * cplus-dem.c (ada_demangle): Ensure demangled is freed.
-
-2009-09-22 Ozkan Sezer <sezeroz@gmail.com>
-
- * choose-temp.c: Include unistd.h for mingw targets.
-
-2009-09-16 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
-
- * hashtab.c [HAVE_INTTYPES_H]: Include <inttypes.h>.
-
-2009-09-15 Tristan Gingold <gingold@adacore.com>
-
- * config.h-vms (intptr_t): Define to compile hashtab.c
-
-2009-09-04 Ozkan Sezer <sezeroz@gmail.com>
-
- PR target/39065
- * configure.ac: Replace AC_CHECK_TYPE() for intptr_t and uintptr_t
- with AC_TYPE_INTPTR_T and AC_TYPE_UINTPTR_T.
- * config.in: Regenerated.
- * configure: Regenerated.
-
-2009-09-03 Ozkan Sezer <sezeroz@gmail.com>
-
- PR target/39065
- * configure.ac: Also check for intptr_t.
- * config.h.in: Regenerated.
- * configure: Regenerated.
- * hashtab.c (hash_pointer): Cast the pointer argument to intptr_t
- instead of of long.
-
-2009-09-02 Tristan Gingold <gingold@adacore.com>
-
- * vmsbuild.com: Removed as unused and superceeded by makefile.vms.
- * makefile.vms: Ported to Itanium VMS. Remove useless targets and
- dependencies. Remove unused FORMAT variable.
- * configure.com: New file to create build.com DCL script for
- Itanium VMS or Alpha VMS.
-
-2009-08-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * configure.ac (AC_PREREQ): Bump to 2.64.
-
-2009-08-23 H.J. Lu <hongjiu.lu@intel.com>
-
- PR ld/10536
- * Makefile.in (install-html-recursive): Removed.
-
-2009-08-22 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * config.in: Regenerate.
- * configure: Regenerate.
-
-2009-07-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * Makefile.in (AUTOCONF, configure_deps): New variables.
- ($(srcdir)/configure): New rule, active only in maintainer mode.
-
-2009-07-29 Douglas B Rupp <rupp@gnat.com>
-
- * make-temp-file.c (choose_tmpdir): Try standard temp logical on VMS.
-
-2009-07-27 Douglas B Rupp <rupp@gnat.com>
-
- * pex-unix.c (vfork): Remove VMS specific definition (get from header
- file instead).
- (to_ptr32): New function.
- (pex_unix_exec_child): Use it.
-
-2009-07-24 Ian Lance Taylor <iant@google.com>
-
- PR bootstrap/40854
- * crc32.c (xcrc32): Rename from crc32.
-
-2009-07-24 Ian Lance Taylor <iant@google.com>
-
- * crc32.c: New file.
- * Makefile.in: Rebuild dependencies.
- (CFILES): Add crc32.c.
- (REQUIRED_OFILES): Add ./crc32.o.
- * functions.texi: Rebuild.
-
-2009-07-17 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * cp-demangle.c (d_print_comp <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>)
- (d_print_comp <DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS): New.
- (d_make_comp <DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS>)
- (d_make_comp <DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS): New.
- (d_demangle_callback): The variable type is now declared as enum.
- Replace parser of _GLOBAL_ symbols by a d_make_comp call.
-
-2009-06-21 Jakub Jelinek <jakub@redhat.com>
-
- * hashtab.c (htab_traverse): Don't call htab_expand for
- nearly empty hashtabs with sizes 7, 13 or 31.
-
-2009-06-16 Nick Clifton <nickc@redhat.com>
-
- PR 10197
- * testsuite/test-demangle.c: Rename getline to get_line to avoid
- conflicts with system function of the same name.
-
-2009-05-30 Eli Zaretskii <eliz@gnu.org>
-
- * snprintf.c: Doc fix.
-
- * vsnprintf.c: Doc fix.
-
-2009-05-29 Kai Tietz <kai.tietz@onevision.com>
-
- * pex-win32.c (pex_win32_fdopenr): Set INHERIT to false.
-
-2009-05-29 Michael Matz <matz@suse.de>
-
- * fibheap.c (fibheap_replace_key_data): Make sure we don't early
- out when forcing the minimum.
- (fibheap_delete_node): Assert that we managed to force the minimum.
-
-2009-05-25 Tristan Gingold <gingold@adacore.com>
-
- * config.h-vms: Rewritten. Define configure macros.
- Use DEC-C builtin alloca.
-
- * makefile.vms (OBJS): Update list.
- (OPT): New variable.
- (CFLAGS): Update compilation flags.
- (libiberty.olb): Do not depend on alloca-conf.h anymore.
-
-2009-05-19 Ian Lance Taylor <iant@google.com>
- Ben Elliston <bje@au.ibm.com>
-
- * cp-demangle.c (cplus_demangle_fill_ctor): Fix logic bug.
- (cplus_demangle_fill_dtor): Likewise.
-
-2009-05-17 Julian Brown <julian@codesourcery.com>
-
- * pex-win32.c (pex_win32_exec_child): Fix logic to avoid closing
- standard handles (stdin, stdout, stderr) in parent.
-
-2009-04-29 Julian Brown <julian@codesourcery.com>
-
- * pex-win32.c (pex_win32_pipe): Add _O_NOINHERIT.
- (pex_win32_exec_child): Ensure each process has only one handle open
- on pipe endpoints. Close standard input after creating child for
- symmetry with standard output/standard error.
-
-2009-04-25 Eli Zaretskii <eliz@gnu.org>
-
- * Makefile.in (needed-list): Target removed (not used in GCC
- 3.0 and later). All references deleted.
- (mostlyclean): Remove references to needed.awk and needed2.awk.
-
-2009-04-14 Eli Zaretskii <eliz@gnu.org>
-
- * configure.ac (setobjs, msdosdjgpp): Move a-priori setting of
- existing and required library functions to with_target_subdir
- section, so that the native build does detect them at configure
- time.
- * configure: Regenerated.
-
-2009-04-13 Ozkan Sezer <sezeroz@gmail.com>
-
- PR target/39397
- * pex-common.h (struct pex_obj): Store pid values as pid_t,
- not as long (members *children and (*wait))
- * pex-common.c (pex_run_in_environment): Likewise.
- * pex-win32.c (pex_win32_wait): Return pid_t and properly check
- returned pid value.
- * pex-djgpp.c (pex_djgpp_wait): Return pid_t.
- * pex-msdos.c (pex_msdos_wait): Likewise.
-
-2009-04-07 Arnaud Patard <apatard@mandriva.com>
-
- * libiberty/configure.ac: Fix Linux/MIPS matching rule.
- * libiberty/configure: Regenerate.
-
-2009-03-27 Ian Lance Taylor <iant@google.com>
-
- * memmem.c: New file, from gnulib.
- * configure.ac: Add memmem to list of functions provided if they
- are not available on the host.
- * Makefile.in: Rebuild dependencies.
- (CFILES): Add memmem.c.
- (CONFIGURED_OFILES): Add memmem.o.
- * configure, config.in, functions.texi: Rebuild.
-
-2009-03-23 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (d_expression): Handle pack expansion.
- (d_find_pack): Handle DEMANGLE_COMPONENT_FUNCTION_PARAM.
- (d_print_subexpr): Don't wrap function parms in ().
- (d_print_comp) [DEMANGLE_COMPONENT_PACK_EXPANSION]: Handle
- not finding a pack.
-
-2009-03-17 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (d_make_function_param): new fn.
- (cplus_demangle_mangled_name): Work around abi v2 bug.
- (d_expr_primary): Likewise.
- (cplus_demangle_operators): Add alignof ops.
- (d_expression): Handle function parameters and conversions
- with other than 1 operand.
- (d_print_comp): Handle function parameters. Fix bug with
- function used in type of function.
- * testsuite/demangle-expected: Update tests.
-
-2009-02-21 Mark Mitchell <mark@codesourcery.com>
-
- * make-temp-file.c (<windows.h>): Include on Windows.
- (choose_tmpdir): On Windows, use GetTempPath.
-
-2009-01-18 Dave Korn <dave.korn.cygwin@gmail.com>
-
- * configure.ac (funcs, vars, checkfuncs): Don't munge on Cygwin,
- as it no longer shares libiberty object files.
- * configure: Regenerated.
-
-2009-01-07 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (d_expression): Remove mangling for zero-op casts.
-
-2009-01-06 Ben Elliston <bje@au.ibm.com>
-
- * cp-demangle.c (cplus_demangle_type): Return NULL if the
- character following a 'D' cannot be recognised.
-
-2008-12-18 Jason Merrill <jason@redhat.com>
-
- PR c++/38561
- * cp-demangle.c (d_expression, d_print_comp): Revert
- cast changes.
-
-2008-12-17 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (d_expression): Handle rvalue stubs too.
- [DEMANGLE_COMPONENT_CAST]: Update mangling.
- (d_print_comp): Avoid extra ", " with empty template argument packs.
- Remove handling for obsolete T() mangling.
-
-2008-12-10 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (cplus_demangle_type): Support fixed-point types.
- (d_print_comp, d_dump): Likewise.
-
-2008-10-22 Daniel Jacobowitz <dan@codesourcery.com>
-
- * Makefile.in (CPPFLAGS): Define.
- (FLAGS_TO_PASS, COMPILE.c): Add CPPFLAGS.
-
-2008-10-15 Paolo Bonzini <bonzini@gnu.org>
-
- PR bootstrap/37137
- * Makefile.in (LIBCFLAGS): Remove.
- (FLAGS_TO_PASS): Don't mention it.
- (COMPILE.c, MULTIOSDIR): Replace it with CFLAGS.
-
-2008-10-08 David Edelsohn <edelsohn@gnu.org>
-
- * xstrdup.c: Include <sys/types.h> after "config.h"
-
-2008-10-07 Jan Kratochvil <jan.kratochvil@redhat.com>
-
- * configure.ac: Call AC_SYS_LARGEFILE.
- * config.in: Regenerated.
- * configure: Likewise.
-
-2008-10-06 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (struct d_print_info): Add pack_index.
- (d_dump): Add DEMANGLE_COMPONENT_PACK_EXPANSION.
- (d_make_comp): Likewise. DEMANGLE_COMPONENT_ARGLIST and
- DEMANGLE_COMPONENT_TEMPLATE_ARGLIST can have two null args.
- (cplus_demangle_builtin_types): Add char16/32_t.
- (cplus_demangle_type): Recognize them.
- (d_template_args): Handle empty argument packs.
- (d_template_arg): Handle argument packs.
- (d_expression): Handle dependent name.
- (d_index_template_argument): New fn.
- (d_lookup_template_argument): New fn.
- (d_find_pack, d_pack_length): New fn.
- (d_print_subexpr): Split out...
- (d_print_comp): ...from here. Use d_*_template_argument.
- Handle empty arg lists. Support pack expansions.
- * cp-demangle.h (D_BUILTIN_TYPE_COUNT): Increase to 32.
-
-2008-09-09 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_DECLTYPE.
- (d_make_comp): Likewise.
- (cplus_demangle_type): Handle decltype and DFP types.
- (cplus_demangle_operators): Call operator takes 2 args.
- (cplus_demangle_builtin_types): Add DFP types.
- (d_exprlist): New fn.
- (d_expression): Handle parm placeholders, T() and calls.
- (d_print_comp): Handle decltype, T() and calls.
- * testsuite/demangle-expected: Test the above.
-
-2008-08-07 Aaron W. LaFramboise <aaronavay62@aaronwl.com>
-
- * pex-win32.c (argv_to_argc): New function.
- (spawn_script): Duplicate argv before calling win32_spawn.
-
-2008-07-31 Jakub Jelinek <jakub@redhat.com>
-
- * mkstemps.c (mkstemps): Keep looping even for EISDIR.
-
-2008-07-31 Denys Vlasenko <dvlasenk@redhat.com>
-
- * mkstemps.c (mkstemps): If open failed with errno other than
- EEXIST, return immediately.
- * make-temp-file.c: Include errno.h.
- (make_temp_file): If mkstemps failed, print an error message
- before aborting.
-
-2008-07-24 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * maint-tool (deps): Output config.h instead of stamp-h.
- * Makefile.in: Rebuild deps.
- (maintainer-clean-subdir): Depend on stamp-h rather than config.h.
- Reverts 2007-07-11 change.
-
-2008-06-19 Eric Blake <ebb9@byu.net>
-
- Adjust strsignal to POSIX 200x prototype.
- * strsignal.c (strsignal): Remove const.
-
-2008-06-17 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * configure: Regenerate.
-
-2008-06-15 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * libiberty.texi: Expand TABs, drop indentation outside examples.
- * obstacks.texi: Likewise.
-
-2008-04-21 Aurelien Jarno <aurelien@aurel32.net>
-
- * libiberty/configure.ac: use -fPIC on Linux/MIPS hosts.
- * libiberty/configure: Regenerate.
-
-2008-04-18 Kris Van Hees <kris.van.hees@oracle.com>
-
- * testsuite/demangle-expected: Added tests for char16_t and char32_t.
-
-2008-04-18 Paolo Bonzini <bonzini@gnu.org>
-
- PR bootstrap/35457
- * aclocal.m4: Add override.m4.
- * configure: Regenerate.
-
-2008-03-31 Ian Lance Taylor <iant@google.com>
-
- * cp-demangle.c (d_substitution): Correct overflow check to avoid
- -fstrict-overflow optimizations.
-
-2008-03-27 Paolo Bonzini <bonzini@gnu.org>
-
- * configure.ac (frags): Don't set, use frag instead.
- (PICFLAG): Set here and substitute.
- * Makefile.in (PICFLAG): Substitute from autoconf.
- * configure: Regenerate.
-
-2008-03-24 Ian Lance Taylor <iant@google.com>
-
- * sha1.c: New file, from gnulib.
- * Makefile.in: Rebuild dependencies.
- (CFILES): Add sha1.c.
- (REQUIRED_OFILES): Add sha1.o.
-
-2008-03-24 Doug Evans <dje@google.com>
-
- * make-relative-prefix.c (make_relative_prefix_1): Handle NULL
- return from strdup.
-
-2008-03-12 Seongbae Park <seongbae.park@gmail.com>
-
- * cplus-dem.c (malloc, realloc): Use void * instead of char *
- as return type.
-
-2008-03-11 Nick Clifton <nickc@redhat.com>
-
- * md5.c (md5_process_bytes): Do not assume that memcpy will
- provide a return value.
-
-2008-02-19 Ben Elliston <bje@au.ibm.com>
-
- PR other/12618
- * testsuite/Makefile.in (mostlyclean): Remove any core file.
-
-2008-01-26 David Daney <ddaney@avtrex.com>
-
- * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_JAVA_RESOURCE,
- DEMANGLE_COMPONENT_COMPOUND_NAME, and
- DEMANGLE_COMPONENT_CHARACTER cases.
- (d_make_comp): Handle DEMANGLE_COMPONENT_COMPOUND_NAME and
- DEMANGLE_COMPONENT_JAVA_RESOURCE cases.
- (d_make_character): New function.
- (d_java_resource): Same.
- (d_special_name): Handle "Gr" case.
- (d_print_comp): Handle DEMANGLE_COMPONENT_JAVA_RESOURCE,
- DEMANGLE_COMPONENT_COMPOUND_NAME, and
- DEMANGLE_COMPONENT_CHARACTER cases.
- * testsuite/demangle-expected: Add test for java resource name
- mangling.
-
-2008-01-23 Thiago Jung Bauermann <bauerman@br.ibm.com>
-
- * cplus-dem.c (demangle_function_name): Changed to return value
- indicating if a name was correctly demangled.
- (iterate_demangle_function): Use demangle_function_name return
- value.
-
-2008-01-19 Manuel Lopez-Ibanez <manu@gcc.gnu.org>
-
- PR other/33768
- * splay-tree.c (rotate_left): Fix minor typo in comment.
- (rotate_right): Likewise.
-
-2007-11-12 Joseph Myers <joseph@codesourcery.com>
-
- * floatformat.c (floatformat_ibm_long_double_is_valid): Fix
- compiler warnings.
- (floatformat_ibm_long_double): Use
- floatformat_ibm_long_double_is_valid.
-
-2007-11-07 Joseph Myers <joseph@codesourcery.com>
- Daniel Jacobowitz <dan@codesourcery.com>
-
- * floatformat.c (mant_bits_set): New.
- (floatformat_to_double): Use it. Note no special handling of
- split formats.
- (floatformat_from_double): Note no special handing of split
- formats.
- (floatformat_ibm_long_double_is_valid,
- floatformat_ibm_long_double): New.
- (floatformat_ieee_single_big, floatformat_ieee_single_little,
- floatformat_ieee_double_big, floatformat_ieee_double_little,
- floatformat_ieee_double_littlebyte_bigword, floatformat_vax_f,
- floatformat_vax_d, floatformat_vax_g, floatformat_i387_ext,
- floatformat_m68881_ext, floatformat_i960_ext,
- floatformat_m88110_ext, floatformat_m88110_harris_ext,
- floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword,
- floatformat_ia64_spill_big, floatformat_ia64_spill_little,
- floatformat_ia64_quad_big, floatformat_ia64_quad_little): Update
- for addition of split_half field.
-
-2007-09-06 Tom Tromey <tromey@redhat.com>
-
- * pexecute.txh (pex_free): Document process killing.
-
-2007-08-31 Douglas Gregor <doug.gregor@gmail.com>
-
- * cp-demangle.c (d_dump): Handle
- DEMANGLE_COMPONENT_RVALUE_REFERENCE.
- (d_make_comp): Ditto.
- (cplus_demangle_type): Ditto.
- (d_print_comp): Ditto.
- (d_print_mod): Ditto.
- (d_print_function_type): Ditto.
-
-2007-08-24 Kai Tietz <kai.tietz@onevision.com>
-
- * pex-common.h: (pex_funcs): Retyped wait and exec_child to pid_t.
- * pex-djgpp.c: Likewise.
- * pex-msdos.c: Likewise.
- * pex-unix.c: Likewise.
- * pex-win32.c: Likewise.
-
-2007-08-17 Michael Snyder <msnyder@access-company.com>
-
- * make-relative-prefix.c (make_relative_prefix_1): Resource leaks.
-
-2007-08-03 Michael Snyder <msnyder@access-company.com>
-
- * make-relative-prefix.c (make_relative_prefix_1): Fix resource
- leak.
-
-2007-07-31 Michael Snyder <msnyder@access-company.com>
-
- * cp-demangle.c (d_print_comp): Guard against null.
-
-2007-07-25 Ben Elliston <bje@au.ibm.com>
-
- * Makefile.in (CFILES): Remove ternary.c.
- (REQUIRED_OFILES): Remove ./ternary.o.
- (INSTALLED_HEADERS): Remove ternary.h.
- (ternary.o): Remove.
- * ternary.c: Remove.
-
-2007-07-23 DJ Delorie <dj@redhat.com>
-
- * argv.c (writeargv): Fix typo in inline documentation.
- * functions.texi: Regenerate.
-
-2007-07-17 DJ Delorie <dj@redhat.com>
-
- * configure.ac (target_header_dir, msdosdjgpp): Remove duplicate
- gettimeofday entry.
- * configure: Likewise.
-
-2007-07-11 Alexandre Oliva <aoliva@redhat.com>
-
- * maint-tool (deps): Output stamp-h instead of config.h.
- * Makefile.in: Rebuild deps.
- (maintainer-clean-subdir): Depend on stamp-h rather than config.h.
-
-2007-07-02 Simon Baldwin <simonb@google.com>
-
- * argv.c (writeargv): Removed declaration of unused variable.
-
-2007-06-14 Paolo Bonzini <bonzini@gnu.org>
-
- * configure.ac: Use ACX_PROG_CC_ALMOST_PEDANTIC too.
- * configure: Regenerate.
-
-2007-06-14 Paolo Bonzini <bonzini@gnu.org>
-
- * aclocal.m4: Include config/warnings.m4.
- * configure.ac: Use ACX_PROG_CC_WARNING_OPTS.
- * configure: Regenerate.
-
-2007-06-07 Geoffrey Keating <geoffk@apple.com>
-
- * configure.ac: Non-default multilibs can be cross compilations.
- * configure: Regenerate
-
-2007-05-07 Nathan Froyd <froydnj@codesourcery.com>
-
- * argv.c (writeargv): New function.
-
-2007-05-05 Geoffrey Keating <geoffk@apple.com>
-
- * cp-demangle.c (d_name): Detect local-source-name.
- (d_prefix): Likewise.
- (d_unqualified_name): Implement local-source-name.
-
-2007-05-03 Joel Brobecker <brobecker@adacore.com>
-
- * filename_cmp.c: Replace include of ctype.h by include of
- safe-ctype.h.
- (filename_cmp): Use TOLOWER instead of tolower for conversions
- that are locale-independent.
- * Makefile.in (filename_cmp.o): Add dependency on safe-ctype.h.
-
-2007-04-11 Thomas Neumann tneumann@users.sourceforge.net
-
- * argv.c: Use ANSI C declarations.
- * make-relative-prefix.c: Likewise.
-
-2007-04-06 Joel Brobecker <brobecker@adacore.com>
-
- * filename_cmp.c (filename_cmp): Improve documentation.
-
-2007-04-02 Andreas Schwab <schwab@suse.de>
-
- * filename_cmp.c: Include "config.h".
-
-2007-03-29 Joel Brobecker <brobecker@adacore.com>
-
- * filename_cmp.c: New file.
- * Makefile.in (CFILES): Add filename_cmp.c.
- (REQUIRED_OFILES): Add filename_cmp.o
- (filename_cmp.o): New rule.
- * functions.texi: Regenerate.
-
-2007-03-15 Geoffrey Keating <geoffk@apple.com>
-
- * cp-demangle.c (d_encoding): Exit early on error.
- (d_pointer_to_member_type): Exit early if cplus_demangle_type
- returns NULL.
- (cplus_demangle_type): Likewise.
- * testsuite/demangle-expected: New testcase.
-
-2007-03-01 Brooks Moses <brooks.moses@codesourcery.com>
-
- * Makefile.in: Add install-pdf target as copied from
- automake v1.10 rules.
- * testsuite/Makefile.in: Add dummy install-pdf target.
-
-2007-03-01 Peter Breitenlohner <peb@mppmu.mpg.de>
- Eric Botcazou <ebotcazou@libertysurf.fr>
-
- PR other/16513
- * Makefile.in: Install library under $(MULTIOSDIR), not $(MULTISUBDIR).
- Install headers in multilib independent location.
-
-2007-02-26 DJ Delorie <dj@redhat.com>
-
- * configure.ac: add djgpp-specific results, so we don't have to
- link during a cross compilation.
- * configure: Regenerated.
-
-2007-01-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de>
-
- * hex.c: Fix typo.
- * choose-temp.c: Likewise.
- * functions.texi: Regenerate.
-
-2007-01-31 Vladimir Prus <vladimir@codesourcery.com>
-
- * pex-common.h (struct pex_obj): New fields
- stderr_pipe and read_err.
- * pex-common.c (pex_init_common): Initialize
- stderr_pipe.
- (pex_run_in_environment): Add error checking
- for PEX_STDERR_TO_PIPE. Create a pipe
- for stderr if necessary.
- (pex_read_err): New.
- (pex_free): Close read_err.
- * pexecute.txh: Document changes.
- * functions.texi: Regenerated.
-
-2007-01-31 Ben Elliston <bje@au.ibm.com>
-
- * strsignal.c (psignal): Change type of signo to int.
- * functions.texi: Regenerate.
-
-2007-01-29 Simon Baldwin <simonb@google.com>
-
- * cp-demangle.h (cplus_demangle_operators): External definition
- suppressed if not building for libstdc++.
- * cp-demangle.c (__gcclibcxx_demangle_callback): Augmented interface
- to demangling, provides a malloc-less version of __cxa_demangle.
- (cplus_demangle_print_callback): Public callback version of
- cplus_demangle_print.
- (struct d_growable_string): New growable string structure.
- (d_growable_string_init): New function, provides support for
- growable strings separate from print info.
- (d_growable_string_resize): Likewise.
- (d_growable_string_append_buffer): Likewise.
- (d_growable_string_callback_adapter):): Likewise.
- (d_print_init): New print info initialization function.
- (d_print_error): Macro replace by inline function.
- (d_print_saw_error): Likewise.
- (d_append_char): Likewise.
- (d_append_buffer): Likewise.
- (d_append_string): New inline function, replaces the
- d_append_string_constant macro.
- (d_flush_buffer): New function, flushes buffer to callback.
- (d_demangle_callback, is_ctor_or_dtor): Malloc-based fallback
- for unsupported dynamic arrays replaced by alloca().
- (d_demangle): Return string length estimating removed.
- (d_dump): Moved error case handling from call site into function.
- (d_print_resize): Function removed.
- (d_print_append_char): Likewise.
- (d_print_append_buffer): Likewise.
- (d_print_error): Likewise.
- (d_print_comp): Added special case handling for Java arrays.
- (java_demangle_v3): Removed string post-processing for Java arrays,
- now replaced by special case handling in d_print_comp.
- (cplus_demangle_v3_callback): Augmented interface to demangling,
- provides a malloc-less version of cplus_demangle_v3.
- (java_demangle_v3_callback): Augmented interface to demangling,
- provides a malloc-less version of java_demangle_v3.
-
-2007-01-12 Ben Elliston <bje@au.ibm.com>
-
- * pex-unix.c (writeerr): Cast write result to void.
-
- * choose-temp.c (choose_temp_base): Check the result of the call
- to mktemp rather than testing the length of the modified string.
-
-2006-12-20 Geoffrey Keating <geoffk@apple.com>
-
- * cp-demangle.h: Add comment explaining what to do to avoid
- overrunning string.
- (d_check_char): New.
- (d_next_char): Don't advance past trailing '\0'.
- * cp-demangle.c (cplus_demangle_mangled_name): Use d_check_char.
- (d_nested_name): Likewise.
- (d_special_name): Likewise.
- (d_call_offset): Likewise.
- (d_function_type): Likewise.
- (d_array_type): Likewise.
- (d_pointer_to_member_type): Likewise.
- (d_template_param): Likewise.
- (d_template_args): Likewise.
- (d_template_arg): Likewise.
- (d_expr_primary): Likewise.
- (d_local_name): Likewise.
- (d_substitution): Likewise.
- (d_ctor_dtor_name): Use d_advance rather than d_next_char.
- * testsuite/test-demangle.c: Include sys/mman.h.
- (MAP_ANONYMOUS): Define.
- (protect_end): New.
- (main): Use protect_end.
- * testsuite/demangle-expected: Add testcases for overrunning
- the end of the string.
-
-2006-11-30 Andrew Stubbs <andrew.stubbs@st.com>
- J"orn Rennecke <joern.rennecke@st.com>
-
- PR driver/29931
- * make-relative-prefix.c (make_relative_prefix_1): New function,
- broken out of make_relative_prefix. Make link resolution dependent
- on new parameter.
- (make_relative_prefix): Use make_relative_prefix_1.
- (make_relative_prefix_ignore_links): New function.
-
-2006-11-08 Vladimir Prus <vladimir@codesourcery.com>
-
- * pex-win32.c (no_suffixes): Remove.
- (std_suffixes): Add "" as first element.
- (find_executable): Remove detection of already-present
- extension. Try all suffixes in std_suffixes.
-
-2006-11-07 Julian Brown <julian@codesourcery.com>
-
- * floatformat.c (get_field): Fix segfault with little-endian word
- order on 64-bit hosts.
- (put_field): Likewise.
- (min): Move definition.
-
-2006-10-26 Danny Smith <dannysmith@users.sourceforge.net>
-
- pex-win32.c (argv_to_cmdline): Replace xmalloc with XNEWVEC.
- (find_executable): Likewise.
- (win32_spawn): Cast alloca return to (char**).
- Replace malloc with XNEWVEC.
- bcopy.c (bcopy): Add explict casts in assignments.
-
-2006-10-25 Ben Elliston <bje@au.ibm.com>
-
- * pexecute.txh: Wrap pexecute's "flag" argument with @var {..}.
-
-2006-10-10 Brooks Moses <bmoses@stanford.edu>
-
- * Makefile.in: Added "pdf", "libiberty.pdf" target support.
- * testsuite/Makefile.in: Added empty "pdf" target.
-
-2006-09-22 Ian Lance Taylor <ian@airs.com>
-
- PR other/29176
- * cp-demangle.c (d_substitution): Check for overflow when
- computing substitution index.
-
-2006-08-30 Corinna Vinschen <corinna@vinschen.de>
-
- * configure.ac: Add case for Mingw as host.
- * configure: Regenerate.
-
-2006-08-27 Ian Lance Taylor <ian@airs.com>
-
- PR driver/27622
- * pex-common.h (struct pex_funcs): Add toclose parameter to
- exec_child field.
- * pex-common.c (pex_run_in_environment): Pass toclose to
- exec_child.
- * pex-djgpp.c (pex_djgpp_exec_child): Add toclose parameter.
- * pex-unix.c (pex_unix_exec_child): Likewise.
- * pex-msdos.c (pex_msdos_exec_child): Likewise.
- * pex-win32.c (pex_win32_exec_child): Likewise.
-
- PR other/28797
- * cp-demangle.c (d_pointer_to_member_type): Do add a substitution
- for a qualified member which is not a function.
- * testsuite/demangle-expected: Add test case.
-
-2006-07-27 Jan Hubicka <jh@suse.cz>
-
- PR rtl-optimization/28071
- * hashtab.c (htab_empty): Clear out n_deleted/n_elements;
- downsize the hashtable.
-
-2006-07-04 Peter O'Gorman <peter@pogma.com>
-
- * Makefile.in: chmod 644 before ranlib during install.
-
-2006-06-02 Mark Shinwell <shinwell@codesourcery.com>
-
- * pex-unix.c (pex_unix_exec_child): Insert cast when assigning
- to environ.
-
-2006-06-01 Mark Shinwell <shinwell@codesourcery.com>
-
- * pex-common.c: New function pex_run_in_environment.
- * pex-common.h: Add environment parameter to exec_child.
- * pex-msdos.c: Add environment parameter to pex_msdos_exec_child.
- * pex-djgpp.c: Add environment parameter to pex_djgpp_exec_child.
- (pex_djgpp_exec_child): Pass environment to child process.
- * pex-unix.c: Add environment parameter to pex_unix_exec_child.
- (pex_unix_exec_child): Pass environment to child process.
- * pex-win32.c: Add environment parameter to pex_win32_exec_child.
- New function env_compare for comparing VAR=VALUE pairs.
- (win32_spawn): Assemble environment block and pass to CreateProcess.
- (spawn_script): Pass environment through to win32_spawn.
- (pex_win32_exec_child): Pass environment through to spawn_script and
- win32_spawn.
- * functions.texi: Regenerate.
- * pexecute.txh: Document pex_run_in_environment.
-
-2006-05-28 Mark Shinwell <shinwell@codesourcery.com>
-
- * mkstemps.c: Open temporary files in binary mode.
-
-2006-05-12 Anton Blanchard <anton@samba.org>
-
- * cplus-dem.c (demangle_fund_type): Ensure buf is large enough to
- hold "int%u_t".
-
-2006-04-24 Julian Brown <julian@codesourcery.com>
-
- * floatformat.c (floatformat_to_double): Fix (biased) exponent=0 case.
-
-2006-03-29 Jim Blandy <jimb@codesourcery.com>
-
- * pex-common.c (pex_input_file, pex_input_pipe): New functions.
- (pex_init_common): Initialize obj->input_file.
- (pex_run): Close any file opened by pex_input_file.
- * pexecute.txh (pex_input_file, pex_input_pipe): New docs.
- * pex-common.h (struct pex_obj): New field input_file.
- (struct pex_funcs): New function ptr fdopenw.
- * pex-unix.c (pex_unix_fdopenw): New function.
- (funcs): List it as our fdopenw function.
- * pex-win32.c (pex_win32_fdopenw): New function.
- (funcs): List it as our fdopenw function.
- * pex-djgpp.c (funcs): Leave fdopenw null.
- * pex-msdos (funcs): Same.
- * functions.texi: Regenerated.
-
-2006-04-10 Jim Blandy <jimb@codesourcery.com>
-
- * pex-common.c (temp_file): New function, containing guts of
- pex-style temporary file name generation.
- (pex_run): Use it.
-
-2006-04-06 Carlos O'Donell <carlos@codesourcery.com>
-
- * Makefile.in: Add install-html, install-html-am, and
- install-html-recursive targets. Define mkdir_p and
- NORMAL_INSTALL.
- * configure.ac: AC_SUBST datarootdir, docdir, htmldir.
- * configure: Regenerate.
- * testsuite/Makefile.in: Add install-html and html targets.
-
-2006-03-31 Mark Mitchell <mark@codesourcery.com>
-
- * pex-win32.c (<errno.h>): Include.
- (fix_argv): Remove.
- (argv_to_cmdline): New function.
- (std_suffixes): New variable.
- (no_suffixes): Likewise.
- (find_executable): New function.
- (win32_spawn): Likewise.
- (spawn_script): Use win32_spawn instead of _spawnv[p].
- (pex_win32_exec_child): Replace MSVCRT calls with Win32 API calls.
- (pex_win32_wait): Likewise.
-
-2006-03-24 Jim Blandy <jimb@codesourcery.com>
-
- * pex-common.c (pex_run): Simplify output name handling.
-
-2006-03-12 Jim Blandy <jimb@red-bean.com>
-
- * pex-common.h (struct pex_obj): Doc fixes.
-
-2006-03-11 Jim Blandy <jimb@red-bean.com>
-
- * functions.texi: Regenerate.
-
-2006-02-21 Ben Elliston <bje@au.ibm.com>
-
- * pexecute.c (pwait): Syntax fix for previous change.
-
-2006-02-17 Uttam Pawar <uttamp@us.ibm.com>
-
- * pexecute.c (pwait): Free vector pointer.
- * partition.c (partition_print): Free class_elements pointer.
-
-2006-02-11 Roger Sayle <roger@eyesopen.com>
- R. Scott Bailey <scott.bailey@eds.com>
- Bill Northcott <w.northcott@unsw.edu.au>
-
- PR bootstrap/16787
- * floatformat.c: Include <float.h> where available.
- (NAN): Use value of DBL_QNAN if defined, and NAN isn't.
-
-2006-01-29 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * configure.ac: Add -Wc++-compat to ac_libibety_warn_cflags where
- supported.
- * configure: Regenerated.
-
-2006-01-20 Carlos O'Donell <carlos@codesourcery.com>
-
- * testsuite/Makefile.in: Add test-expandargv test.
- * testsuite/test-expandargv.c: New test.
- * argv.c (expandargv): Check for errors with ferror,
- rather than just by looking at return value from fread.
-
-2005-12-17 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * floatformat.c (floatformat_i387_ext_is_valid): Use explicit cast
- to convert from "from".
- (floatformat_to_double): Likewise.
- (floatformat_from_double): Use explicit cast to convert from "to".
-
-2005-12-10 Terry Laurenzo <tlaurenzo@gmail.com>
-
- PR java/9861
- * cp-demangle.c (d_bare_function_type): Recognize new 'J' qualifer
- and include return type when found.
- (d_print_comp)[DEMANGLE_COMPONENT_FUNCTION_TYPE]: Add
- conditional logic to change printing order of return type.when
- the DMGL_RET_POSTFIX option is present.
- (java_demangle_v3): Add DMGL_RET_POSTFIX option to d_demangle
- call.
- * testsuite/test-demangle.c (main): Recognize option --ret-postfix
- * testsuite/demangle-expected: Test cases to verify extended encoding.
- Updated comment to document --ret-postfix option.
-
-2005-11-06 Richard Guenther <rguenther@suse.de>
-
- * splay-tree.c (rotate_left): New function.
- (rotate_right): Likewise.
- (splay_tree_splay_helper): Remove.
- (splay_tree_splay): Re-implement.
-
-2005-10-31 Mark Kettenis <kettenis@gnu.org>
-
- * floatformat.c (floatformat_vax_aingle, floatformat_vax_double):
- New variables.
-
-2005-10-07 Mark Mitchell <mark@codesourcery.com>
-
- * at-file.texi: Fix typo.
-
-2005-10-03 Mark Mitchell <mark@codesourcery.com>
-
- * at-file.texi: New file.
-
-2005-09-27 Mark Mitchell <mark@codesourcery.com>
-
- * argv.c (expandargv): Do not use xmalloc_failed.
-
-2005-09-26 Mark Mitchell <mark@codesourcery.com>
-
- * argv.c (safe-ctype.h): Include it.
- (ISBLANK): Remove.
- (stdio.h): Include.
- (buildargv): Use ISSPACE instead of ISBLANK.
- (expandargv): New function.
- * Makefile.in: Regenerated.
-
-2005-09-14 Christopher Faylor <cgf@timesys.com>
-
- * pex-win32.c: Include "windows.h".
- (backslashify): New function.
- (fix_argv): Use backslashify to convert path to windows format.
- Allocate one more place in new argv for potential executable from '#!'
- parsing.
- (tack_on_executable): New function. Conditional on USE_MINGW_MSYS
- (openkey): Ditto.
- (mingw_rootify): Ditto.
- (msys_rootify): Ditto.
- (spawn_script): New function.
- (pex_win32_exec_child): Save translated argv in newargv. Pass to
- spawn_script if spawnv* fails.
- (main): New function. Conditional on MAIN. Useful for testing.
-
-2005-08-17 Mark Kettenis <kettenis@gnu.org>
-
- * floatformat.c (floatformat_always_valid): Change type of last
- argument to `void *'.
- (floatformat_i387_ext_is_valid): Likewise.
- (floatformat_to_double): Change type of second argument to `const
- void *'.
- (floatformat_from_double): Change type of last argument to `void
- *'.
- (floatformat_is_valid): Change type of last argument to `const
- void *'.
- (ieee_test): Remove redundant casts.
-
-2005-08-17 Kelley Cook <kcook@gcc.gnu.org>
-
- * strverscmp.c: Update FSF address.
- * testsuite/Makefile.in: Likewise.
- * testsuite/test-demangle.c: Likewise.
- * testsuite/test-pexecute.c: Likewise.
-
-2005-07-23 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * getopt.c: Include ansidecl.h before system headers.
-
-2005-07-22 Ben Elliston <bje@gnu.org>
-
- * getopt.c: Include "ansidecl.h".
- (_getopt_initialize): Mark argc and argv parameters as unused.
-
-2005-07-22 Ben Elliston <bje@gnu.org>
-
- * regex.c (regcomp): Change type of `i' from unsigned to int.
-
-2005-07-22 Ben Elliston <bje@gnu.org>
-
- Recover patch lost in the sourceware repository:
- 2005-07-09 Ben Elliston <bje@au.ibm.com>
- * memcpy.c: Remove ANSI_PROTOTYPES conditional code.
- * memmove.c: Likewise.
- * objalloc.c: Likewise.
-
-2005-07-22 Ben Elliston <bje@gnu.org>
-
- * configure.ac: Check for a getopt(3) declaration.
- * configure, config.in: Regenerate.
-
-2005-07-15 Ben Elliston <bje@au.ibm.com>
-
- * regex.c (TRANSLATE): Cast rhs of ternary expression to char.
-
-2005-07-12 Ben Elliston <bje@au.ibm.com>
-
- * floatformat.c (floatformat_to_double): Add a comment about a
- potential source of warnings when compiling this file.
-
-2005-07-12 Ben Elliston <bje@au.ibm.com>
-
- * pexecute.c (pexecute): Cast string litrals to char *.
- * regex.c (re_comp): Cast a call to gettext() to char *.
-
-2005-07-07 Kelley Cook <kcook@gcc.gnu.org>
-
- * config.table: Delete file. Move former contents into ...
- * configure.ac: ... here and escape any brackets for m4.
- * Makefile.in (config.status): Remove dependency on config.table.
- * configure: Regenerate.
-
-2005-07-07 Kelley Cook <kcook@gcc.gnu.org>
-
- * config.in: Regenerate for 6/20 change.
-
-2005-07-03 Steve Ellcey <sje@cup.hp.com>
-
- PR other/13906
- * md5.c (md5_process_bytes): Check alignment.
-
-2005-07-01 Ian Lance Taylor <ian@airs.com>
-
- PR other/22268
- * cp-demangle.c (d_expr_primary): Don't run off the end of the
- string while looking for the end of a literal value.
- * testsuite/demangle-expected: Add test case.
-
-2005-06-30 Daniel Berlin <dberlin@dberlin.org>
-
- * hashtab.c (EMPTY_ENTRY): Moved and renamed.
- (DELETED_ENTRY): Ditto.
-
-2005-06-20 Geoffrey Keating <geoffk@apple.com>
-
- * strverscmp.c: New.
- * Makefile.in (CFILES): Add strverscmp.c.
- (CONFIGURED_OFILES): Add strverscmp.o.
- (strverscmp.o): New rule.
- (stamp-functions): Add $(srcdir) to files in source directory.
- * configure.ac (funcs): Add strverscmp.
- (AC_CHECK_FUNCS): Add strverscmp.
- * configure: Regenerate.
- * functions.texi: Regenerate.
-
-2005-05-28 Eli Zaretskii <eliz@gnu.org>
-
- * configure.ac: Add snprintf and vsnprintf to AC_CHEK_DECLS.
- * config.in, configure: Regenerate.
-
-2005-05-25 Richard Henderson <rth@redhat.com>
-
- * cp-demangle.c (d_dump): Handle DEMANGLE_COMPONENT_HIDDEN_ALIAS.
- (d_make_comp, d_print_comp): Likewise.
- (d_special_name): Generate one.
- * testsuite/demangle-expected: Add a hidden alias test.
-
-2005-05-24 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * configure.ac: Check declarations for calloc(), getenv(),
- malloc(), realloc() and sbrk().
- * config.in: Regenerate.
- * configure: Likewise.
-
- * alloca.c (C_alloca): Change "new" to "new_storage". Use XNEWVEC
- instead of xmalloc.
- * choose-temp.c (choose_temp_base): Use XNEWVEC instea od xmalloc.
- * concat.c (liiberty_concat_ptr): Surround definition with an
- extern "C" block, if __cplusplus.
- (concat): Use XNEWVEC instead of xmalloc.
- (reconcat): Likewise.
- * cp-demangle.c (struct d_print_template): Rename member
- "template" to "template_decl". Adjust use throughout the file.
- (d_print_resize): Properly cast return value of realloc().
- (cplus_demangle_print): Same for malloc().
- (d_demangle): Likewise.
- * cp-demint.c (cplus_demangle_fill_builtin_type): Rename parameter
- "typename" to "type_name".
- * cplus-dem.c (grow_vect): Use XRESIZEVEC instead of xrealloc().
- (work_stuff_copy_to_from): Use XNEWVEC insteand of xmalloc().
- (demangle_template_value_parm): Likewise.
- (demangle_template): Likewise.
- (recursively_demangle): Likewise.
- (do_hpacc_template_literal): Likewise.
- (do_arg): Likewise.
- (remember_type): Likewise.
- (remember_Ktype): Likewise.
- (register_Btype): Likewise.
- (string_need): Use XRESIZEVEC instead of xrealloc().
- * dyn-string.c (dyn_string_init): Use XNEWVEC.
- (dyn_string_new): Use XNEW.
- (dyn_string_resize): Use XRESIZEVEC.
- * fnmatch.c (fnmatch): Rename local variable "not" to "negate".
- * getopt.c (getenv): Declare only if !__cplusplus and !getenv.
- Otherwise include <stdlib.h>.
- (exchange): Cast return value of malloc().
- * hashtab.c (htab_size): Define as both macro and non-inline
- function.
- (htab_elements): Likewise.
- * getpwd.c (getpwd): Use XNEWVEC.
- (htab_create_alloc_ex): Use C90 prototype-style.
- * lrealpath.c (lrealpath): Appropriately cast return value of
- malloc().
- * make-relative-prefix.c (save_string): Likewise.
- * make-temp-file.c (try_dir): Rename from "try". Adjust use in
- the file.
- (choose_tmpdir): Use XNEWVEC.
- * mkstemps.c (mkstemps): Rename parameter "template" to "pattern".
- * pex-common.c (pex_init_common): Use XNEW.
- (pex_add_remove): Use XRESIZEVEC.
- (pex_run): Likewise.
- (pex_get_status_and_time): Likewise.
- * pex-djgpp.c (pex_djgpp_exec_child): Likewise.
- * pex-msdos.c (pex_init): Use XNEW.
- (pex_msdos_exec_child): Likewise.
- (pex_msdos_exec_child): Use XRESIZEVEC.
- * pex-unix.c (pex_wait): Use XNEW.
- * pex-win32.c (fix_argv): Use XNEWVEC.
- * pexecute.c (pwait): Likewise.
- * setenv.c (setenv): Properly cast return value of malloc().
- * sigsetmask.c (sigsetmask): Rename local variables "old" and
- "new" to "old_sig" and "new_sig".
- * sort.c (main): Use XNEWVEC.
- * spaces.c (spaces): Cast return value of malloc().
- * strndup.c (strndup): Likewise.
- * ternary.c (ternary_insert): Use XNEW.
- * xmalloc.c (malloc, realloc, calloc, sbrk): Surround declaration
- with an extern "C" block if __cplusplus.
- * xstrdup.c (xstrdup): Cast return value of memcpy().
- * xstrerror.c (strerror): Enclose declaration in an extern "C"
- block if __cplusplus.
- * xstrndup.c (xstrndup): Use XNEW. Cast return value of memcpy().
-
-2005-05-16 Andreas Jaeger <aj@suse.de>
-
- * getpwd.c: Remove unneeded prototype getcwd and move getwd so
- that it's only declared if needed.
-
- * getopt1.c: Change order of includes so that __GNU_LIBRARY__ is
- defined.
-
-2005-05-15 Andreas Jaeger <aj@suse.de>
-
- * functions.texi: Regenerated.
-
-2005-05-15 Eli Zaretskii <eliz@gnu.org>
-
- * pexecute.txh: Enclose multi-word data types in @deftypefn in
- braces. Minor wording fixes. Use --- for em-dash. Use
- @enumerate in enumerated lists.
-
- * fopen_unlocked.c: Enclose multi-word data types in @deftypefn in
- braces.
-
-2005-05-11 Eli Zaretskii <eliz@gnu.org>
-
- * pex-djgpp.c: Include string.h, fcntl.h, unistd.h, and
- sys/stat.h.
- (pex_init): Fix last argument to pex_init_common.
- (pex_djgpp_exec_child): Remove leading underscore from _open,
- _dup, _dup2, _close, and _spawnv/_spawnvp. Replace `program',
- which is undeclared, with `executable', which was unused. Remove
- unused variable `e'. Fix casting of last arg to spawnv/spawnvp.
- (pex_djgpp_wait): Declare arguments with ATTRIBUTE_UNUSED.
-
-2005-05-11 Paul Brook <paul@codesourcery.com>
-
- * Makefile.in: Regenerate dependencies.
-
-2005-05-10 Nick Clifton <nickc@redhat.com>
-
- * Update the address and phone number of the FSF organization in
- the GPL notices in the following files:
- COPYING.LIB, Makefile.in, _doprnt.c, argv.c, asprintf.c,
- choose-temp.c, clock.c, concat.c, copying-lib.texi, cp-demangle.c,
- cp-demangle.h, cp-demint.c, cplus-dem.c, dyn-string.c, fdmatch.c,
- fibheap.c, floatformat.c, fnmatch.c, fopen_unlocked.c,
- gather-docs, getopt.c, getopt1.c, getruntime.c, hashtab.c, hex.c,
- lbasename.c, lrealpath.c, maint-tool, make-relative-prefix.c,
- make-temp-file.c, md5.c, mempcpy.c, mkstemps.c, objalloc.c,
- obstack.c, partition.c, pex-common.c, pex-common.h, pex-djgpp.c,
- pex-msdos.c, pex-one.c, pex-unix.c, pex-win32.c, pexecute.c,
- physmem.c, putenv.c, regex.c, safe-ctype.c, setenv.c, snprintf.c,
- sort.c, spaces.c, splay-tree.c, stpcpy.c, stpncpy.c, strndup.c,
- strtod.c, ternary.c, unlink-if-ordinary.c, vasprintf.c,
- vsnprintf.c, vsprintf.c, xexit.c, xmalloc.c, xstrndup.c
-
-2005-05-06 Kelley Cook <kcook@gcc.gnu.org>
-
- * aclocal.m4 (AC_DEFINE_NOAUTOHEADER): Remove.
- * configure.ac: Replace any AC_DEFINE_NOAUTOHEADER with AC_DEFINE.
- * configure: Regenerate.
-
-2005-05-06 Kelley Cook <kcook@gcc.gnu.org>
-
- * configure.ac: Use AC_C_BIGENDIAN instead of AC_C_BIGENDIAN_CROSS.
- Use AC_CHECK_SIZEOF instead of AC_COMPILE_CHECK_SIZEOF.
- * aclocal.m4: Don't include accross.m4.
- * configure, config.in: Regenerate.
-
-2005-04-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * fopen_unlocked.c (unlock_std_streams): New.
-
- * functions.texi: Regenerate.
-
-2005-04-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * fopen_unlocked.c (unlock_stream): New.
- Consolidate unlocking code into a helper function.
-
- * functions.texi: Regenerate.
-
-2005-04-13 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * asprintf.c: Include config.h.
- * basename.c: Likewise.
- * fdmatch.c: Likewise.
- * hex.c: Likewise.
- * lbasename.c: Likewise.
- * spaces.c: Likewise.
- * xatexit.c:Likewise.
- * configure.ac: Do check declarations for basename, ffs, asprintf
- and vasprintf for real.
- * configure: Regenerate.
-
-2005-04-13 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * argv.c (dupargv): Allocate space of argv[argc], not
- sizeof(char *) of that amount. Cast result to char *.
-
-2005-04-12 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * regex.c (wcs_re_match_2_internal, byte_re_match_2_internal):
- Replace not with negate.
-
-2005-04-12 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * configure.ac: Check declarations for basename, ffs, asprintf,
- vasprintf.
- * configure: Regenerate.
- * config.in: Likewise.
-
-2005-04-11 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Makefile.in (CFILES): Add fopen_unlocked.c.
- (REQUIRED_OFILES): Add ./fopen_unlocked.o.
- Regenerate dependencies.
-
- * configure.ac: Check for stdio_ext.h and __fsetlocking.
-
- * fopen_unlocked.c: New file.
-
- * functions.texi, configure, config.in: Regenerate.
-
-2005-04-04 Ian Lance Taylor <ian@airs.com>
-
- * testsuite/test-pexecute.c (TEST_PEX_RUN): Move variable
- declaration before statement.
-
-2005-04-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * bcmp.c: Fix warnings and implement using memcmp.
- * bcopy.c: Fix warnings.
- * bzero.c: Fix warnings and implement using memset.
-
- * configure.ac (ac_libiberty_warn_cflags): Add -Wwrite-strings
- -Wstrict-prototypes.
- * configure, config.in: Regenerate.
-
- * bsearch.c, index.c, rindex.c, strstr.c, strtol.c, waitpid.c: Fix
- warnings and reconcile interfaces with relevant standards.
-
-2005-04-02 Ian Lance Taylor <ian@airs.com>
-
- * cp-demangle.c: Update copyright.
-
-2005-03-31 Joseph S. Myers <joseph@codesourcery.com>
-
- * gettimeofday.c: Add "Supplemental" to @deftypefn.
- * functions.texi: Regenerate.
-
-2005-03-28 Ian Lance Taylor <ian@airs.com>
-
- * pex-common.c: New file.
- * pex-one.c: New file.
- * pexecute.c: New file.
- * pex-common.h: Include <stdio.h>.
- (struct pex_obj): Define.
- (struct pex_funcs): Define.
- (pex_init_common): Declare.
- * pex-unix.c: Rewrite.
- * pex-win32.c: Rewrite.
- * pex-djgpp.c: Rewrite.
- * pex-msdos.c: Rewrite.
- * testsuite/text-pexecute.c: New file.
- * pexecute.txh: Rewrite.
- * configure.ac: Check for wait3 and wait4. Set CHECK to
- really-check rather than check-cplus-dem.
- * functions.texi: Rebuild.
- * Makefile.in: Rebuild dependencies.
- (CFILES): Add pexecute.c, pex-common.c, pex-one.c.
- (REQUIRED_OFILES): Add pexecute.o, pex-common.o, pex-one.o.
- * testsuite/Makefile.in (really-check): New target.
- (check-pexecute, test-pexecute): New targets.
- * configure: Rebuild.
-
-2005-03-28 Mark Kettenis <kettenis@gnu.org>
-
- * unlink-if-ordinary.c: Include <sys/types.h>.
-
-2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- Convert libiberty to use ISO C prototype style 7/n.
- * regex.c (PARAMS): Remove definition.
- (PREFIX): Unconditionaly define using ISO C ## operator.
- (init_syntax_once, extract_number, extract_number_and_incr,
- print_fastmap, print_partial_compiled_pattern,
- print_compiled_pattern, print_double_string, printchar,
- convert_mbs_to_wcs, re_set_syntax, regex_grow_registers,
- regex_compile, store_op1, store_op2, insert_op1, insert_op2,
- at_begline_loc_p, at_endline_p, group_in_compile_stack,
- insert_space, wcs_compile_range, byte_compile_range,
- truncate_wchar, re_compile_fastmap, re_compile_fastmap,
- re_set_registers, re_search, re_search_2, re_search_3, re_match,
- re_match_2, count_mbs_length, wcs_re_match_2_internal,
- byte_re_match_2_internal, group_match_null_string_p,
- alt_match_null_string_p, common_op_match_null_string_p,
- bcmp_translate, re_compile_pattern, re_comp, re_exec, regcomp,
- regexec, regerror, regfree): Use ISO C prototype style.
- * partition.c: (elem_compare): Likewise.
- * cp-demangle.c (print_usage): Likewise.
-
-2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- Convert libiberty to use ISO C prototype style 5/n.
- * random.c (srandom, initstate, setstate, random): Use ISO C
- prototypes.
- * putenv.c (putenv): Likewise.
- * physmem.c (physmem_available, physmem_total, main): Likewise.
- * pex-win32.c (fix_argv, pexecute, pwait): Likewise.
- * pex-unix.c (pexecute, pwait): Likewise.
- * pex-msdos.c (pexecute, pwait): Likewise.
- * pex-djgpp.c (pexecute, pwait): Likewise.
- * partition.c (partition_new, partition_delete, partition_union)
- (elem_compare, partition_print): Likewise.
- * obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk,
- _obstack_allocated_p, _obstack_free, obstack_free,
- _obstack_memory_used, print_and_abort, obstack_next_free,
- obstack_object_size, obstack_base): Likewise. Remove codes
- predicated on !defined(__STDC__).
- * objalloc.c (objalloc_create, _objalloc_alloc, objalloc_free,
- objalloc_free_block): Use ISO C prototypes.
- * mkstemps.c (mkstemps): Likewise.
- * memset.c (memset): Likewise.
- * mempcpy.c (mempcpy): Likewise.
- * rename.c (rename): Likewise.
- * rindex.c (rindex): Likewise.
- * setenv.c (setenv, unsetenv): Likewise.
- * sigsetmask.c (sigsetmask): Likewise.
- * snprintf.c (snprintf): Likewise.
- * sort.c (sort_pointers, xmalloc): Likewise.
- * spaces.c (spaces): Likewise.
- * splay-tree.c (splay_tree_delete_helper,
- splay_tree_splay_helper, splay_tree_splay,
- splay_tree_foreach_helper, splay_tree_xmalloc_allocate,
- splay_tree_new, splay_tree_xmalloc_allocate,
- splay_tree_new_with_allocator, splay_tree_delete,
- splay_tree_insert, splay_tree_remove, splay_tree_lookup,
- splay_tree_max, splay_tree_min, splay_tree_predecessor,
- splay_tree_successor, splay_tree_foreach,
- splay_tree_compare_ints, splay_tree_compare_pointers): Likewise.
- * stpcpy.c (stpcpy): Likewise.
- * stpncpy.c (stpncpy): Likewise.
- * strcasecmp.c (strcasecmp): Likewise.
- * strchr.c (strchr): Likewise.
- * strdup.c (strdup): Likewise.
-
-2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- Convert libiberty to use ISO C prototype style 6/n.
- * strerror.c (init_error_tables, errno_max, strerror, strerrno,
- strtoerrno, main): Use ISO C prototype style.
- * strncasecmp.c (strncasecmp): Likewise.
- * strncmp.c (strncmp): Likewise.
- * strndup.c (strndup): Likewise.
- * strrchr.c (strrchr): Likewise.
- * strsignal.c (init_signal_tables, signo_max, strsignal,
- strsigno, strtosigno, psignal, main): Likewise.
- * strstr.c (strstr): Likewise.
- * strtod.c (strtod, atof): Likewise.
- * strtol.c (strtol): Likewise.
- * strtoul.c (strtoul): Likewise.
- * ternary.c (ternary_insert, ternary_cleanup, ternary_search,
- ternary_recursivesearch): Likewise.
- * tmpnam.c (tmpnam): Likewise.
- * unlink-if-ordinary.c (unlink_if_ordinary): Likewise.
- * vasprintf.c (int_vasprintf, vasprintf, checkit, main): Likewise.
- * vfork.c (vfork): Likewise.
- * vfprintf.c (vfprintf): Likewise.
- * vprintf.c (vprintf): Likewise.
- * vsnprintf.c (vsnprintf, checkit, main): Likewise.
- * vsprintf.c (vsprintf): Likewise.
- * waitpid.c (waitpid): Likewise.
- * xatexit.c (xatexit, xatexit_cleanup): Likewise.
- * xexit.c (xexit): Likewise.
- * xmalloc.c (xmalloc_set_program_name, xmalloc_failed, xmalloc,
- xcalloc, xrealloc): Likewise.
- * xmemdup.c (xmemdup): Likewise.
- * xstrdup.c (xstrdup): Likewise.
- * xstrerror.c (xstrerror): Likewise.
- * xstrndup.c (xstrndup): Likewise.
-
-2005-03-27 Andreas Jaeger <aj@suse.de>
-
- * configure.ac (ac_c_preproc_warn_flag): Remove -Wtraditional
- flags.
- * configure: Regenerated.
-
-2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- * getopt1.c (getopt_long_only): Fix thinko.
-
-2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- Convert libiberty to use ISO C prototype style 4/n.
- * hashtab.c (higher_prime_index, hash_pointer, eq_pointer,
- htab_size, htab_elements, htab_mod_1, htab_mod, htab_mod_m2,
- htab_create_alloc, htab_set_functions_ex, htab_create,
- htab_try_create, htab_delete, htab_empty,
- find_empty_slot_for_expand, htab_expand, htab_find_with_hash,
- htab_find, htab_find_slot_with_hash, htab_find_slot,
- htab_remove_elt, htab_remove_elt_with_hash, htab_clear_slot,
- htab_traverse_noresize, htab_traverse, htab_collisions,
- htab_hash_string, iterative_hash): Use ISO C prototype.
- * hex.c (hex_init): Likewise.
- * index.c (index): Likewise.
- * insque.c (insque, remque): Likewise.
- * lbasename.c (lbasename): Likewise.
- * lrealpath.c (lrealpath): Likewise.
- * make-relative-prefix.c (save_string, split_directories,
- free_split_directories, make_relative_prefix): Likewise.
- * make-temp-file.c (try, choose_tmpdir, make_temp_file): Likewise.
- * md5.c (md5_init_ctx, md5_read_ctx, md5_finish_ctx, md5_stream,
- md5_buffer, md5_process_bytes, md5_process_block): Likewise.
- * memchr.c (memchr): Likewise.
- * memcpy.c (memcpy): Likewise.
- * memmove.c (memmove): Likewise.
- * gettimeofday.c (gettimeofday): Likewise.
- * getruntime.c (get_run_time): Likewise.
- * getpwd.c (getpwd, getpwd): Likewise.
- * getpagesize.c (getpagesize): Likewise.
- * getopt1.c (getopt_long, getopt_long_only, main): Likewise.
- * getopt.c (my_index, exchange, _getopt_initialize,
- _getopt_internal, getopt, main): Likewise.
- * getcwd.c (getcwd): Likewise.
- * fnmatch.c (fnmatch): Likewise.
- * floatformat.c (floatformat_always_valid,
- floatformat_i387_ext_is_valid, get_field, floatformat_to_double,
- put_field, floatformat_from_double, floatformat_is_valid,
- ieee_test, main): Likewise.
- * fibheap.c (fibheap_new, fibnode_new, fibheap_compare,
- fibheap_comp_data, fibheap_insert, fibheap_min, fibheap_min_key,
- fibheap_union, fibheap_extract_min, fibheap_replace_key_data,
- fibheap_replace_key, fibheap_replace_data, fibheap_delete_node,
- fibheap_delete, fibheap_empty, fibheap_extr_min_node,
- fibheap_ins_root, fibheap_rem_root, fibheap_consolidate,
- fibheap_link, fibheap_cut, fibheap_cascading_cut,
- fibnode_insert_after, fibnode_remove): Likewise.
- * ffs.c (ffs): Likewise.
- * fdmatch.c (fdmatch): Likewise.
- * dyn-string.c (dyn_string_init, dyn_string_new,
- dyn_string_delete, dyn_string_release, dyn_string_resize,
- dyn_string_clear, dyn_string_copy, dyn_string_copy_cstr,
- dyn_string_prepend, dyn_string_prepend_cstr, dyn_string_insert,
- dyn_string_insert_cstr, dyn_string_insert_char,
- dyn_string_append, dyn_string_append_cstr,
- dyn_string_append_char, dyn_string_substring, dyn_string_eq):
- Likewise.
-
-2005-03-27 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- Convert libiberty to use ISO C prototype style 3/n.
- * cplus-dem.c (set_cplus_marker_for_demangling, consume_count,
- consume_count_with_underscores, code_for_qualifier,
- qualifier_string, demangle_qualifier, cplus_demangle_opname,
- cplus_mangle_opname, cplus_demangle_set_style,
- cplus_demangle_name_to_style, cplus_demangle, grow_vect,
- ada_demangle, internal_cplus_demangle, squangle_mop_up,
- work_stuff_copy_to_from, delete_non_B_K_work_stuff,
- delete_work_stuff, mop_up, demangle_signature,
- demangle_method_args, demangle_template_template_parm,
- demangle_expression, demangle_integral_value,
- demangle_real_value, demangle_template_value_parm,
- demangle_template, arm_pt, demangle_arm_hp_template,
- demangle_class_name, demangle_class, iterate_demangle_function,
- demangle_prefix, gnu_special, recursively_demangle, arm_special,
- demangle_qualified, get_count, do_type, demangle_fund_type,
- do_hpacc_template_const_value, do_hpacc_template_literal,
- snarf_numeric_literal, do_arg, remember_type, remember_Ktype,
- register_Btype, remember_Btype, forget_B_and_K_types,
- forget_types, demangle_args, demangle_nested_args,
- demangle_function_name, string_need, string_delete, string_init,
- string_clear, string_empty, string_append, string_appends,
- string_appendn, string_prepend, string_prepends, string_prependn,
- string_append_template_idx): Use ISO C prootype style.
- * cp-demint.c (cplus_demangle_fill_component,
- cplus_demangle_fill_builtin_type, cplus_demangle_fill_operator,
- cplus_demangle_v3_components): Likewise.
-
-2005-03-26 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- Convert libiberty to use ISO C prototype style 2/n.
- * cp-demangle.h: Remove uses of PARAMS.
- * cp-demangle.c: Likewise.
- (d_dump, cplus_demangle_fill_name,
- cplus_demangle_fill_extended_operator, cplus_demangle_fill_ctor,
- cplus_demangle_fill_dtor, d_make_empty, d_make_comp, d_make_name,
- d_make_builtin_type, d_make_operator, d_make_extended_operator,
- d_make_ctor, d_make_dtor, d_make_template_param, d_make_sub,
- cplus_demangle_mangled_name, has_return_type,
- is_ctor_dtor_or_conversion, d_encoding, d_name, d_nested_name,
- d_prefix, d_unqualified_name, d_source_name, d_number,
- d_identifier, d_operator_name, d_special_name, d_call_offset,
- d_ctor_dtor_name, cplus_demangle_type, d_cv_qualifiers,
- d_function_type, d_bare_function_type, d_class_enum_type,
- d_array_type, d_pointer_to_member_type, d_template_param,
- d_template_args, d_template_arg, d_expression, d_expr_primary,
- d_local_name, d_discriminator, d_add_substitution,
- d_substitution, d_print_resize, d_print_append_char,
- d_print_append_buffer, d_print_error, cplus_demangle_print,
- d_print_comp, d_print_java_identifier, d_print_mod_list,
- d_print_mod, d_print_function_type, d_print_array_type,
- d_print_expr_op, d_print_cast, cplus_demangle_init_info,
- d_demangle, __cxa_demangle, cplus_demangle_v3, java_demangle_v3,
- is_ctor_or_dtor, is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor,
- print_usage, main):
-
-2005-03-26 Gabriel Dos Reis <gdr@integrable-solutions.net>
-
- Convert libiberty to ISO C prototype style 1/n.
- * _doprnt.c: Remove conditional #include <varargs.h> on
- ANSI_PROTOTYPES as the latter is always assumed.
- (_doprnt, checkit, main): Use ISO C prototype.
- * alloca.c (find_stack_direction, C_alloca): Use ISO C prototype.
- * argv.c: Remove conditional #includes on ANSI_PROTOTYPES.
- (dupargv, freeargv, buildargv, main): Use ISO C prototype.
- * atexit.c (atexit): Likewise
- * asprintf.c: Remove conditional include on ANSI_PROTOTYPES.
- (asprintf): Use ISO C prototype.
- * basename.c (basename): Likewise
- * bcmp.c (bcmp): Likewise.
- * bcopy.c (bcopy): Likewise.
- * bzero.c (bzero): Likewise.
- * bsearch.c (bsearch): Likewise. Improve const-correctness.
- * choose-temp.c (choose_temp_base): Likewise.
- * calloc.c: Remove conditional #include on ANSI_PROTOTYPES.
- (calloc): Use ISO C prototype.
- * clock.c (clock): Likewise.
- * concat.c: Remove conditional #include on ANSI_PROTOTYPES.
- (vconcat_length, vconcat_copy, concat_length, concat_copy,
- concat_copy2, concat, reconcat, main): Use ISO C prototype.
- * copysign.c (copysign): Likewise.
-
-2005-03-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Makefile.in (CFILES): Add strndup.c and xstrndup.c.
- (REQUIRED_OFILES): Add xstrndup.o.
- (CONFIGURED_OFILES): Add strndup.o.
- Regenerate dependencies.
-
- * configure.ac (funcs, AC_CHECK_FUNCS): Add strndup.
-
- * strndup.c, xstrndup.c: New.
-
- * config.in, configure, functions.texi: Regenerate.
-
-2005-03-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * xmemdup.c, xstrdup.c: Expose the tail call.
-
-2005-03-09 Mark Mitchell <mark@codesourcery.com>
-
- * configure.ac (funcs): Add gettimeofday.
- * configure: Regenerated.
- * gettimeofday.c: New file.
- * Makefile.in (CFILES): Add gettimeofday.
- (CONFIGURED_OFILES): Add gettimeofday.o.
- (./gettimeofday.o): New rule.
-
-2005-03-09 Ian Lance Taylor <ian@airs.com>
-
- * pex-os2.c: Remove.
- * configure.ac: Remove *-*-os2-emx* case when setting pexecute.
- * Makefile.in (CFILES): Remove pex-os2.c.
- (CONFIGURED_OFILES): Remove pex-os2.o.
- (pex-os2.o): Remove target.
- * configure: Rebuild.
-
-2005-03-07 Ian Lance Taylor <ian@airs.com>
-
- * mpw-config.in: Remove.
- * mpw-make.sed: Remove.
- * mpw.c: Remove.
- * Makefile.in (CFILES): Remove pex-mpw.c.
- (CONFIGURED_OFILES): Remove pex-mpw.o.
- (mpw.o, pex-mpw.o): Remove targets.
- * maint-tool (undoc): Remove reference to mpw.c.
-
-2005-03-06 DJ Delorie <dj@redhat.com>
-
- * configure.ac (target_header_dir): vfork is a stub under djgpp.
- * configure: Regenerated.
-
-2005-03-01 Jan Beulich <jbeulich@novell.com>
-
- * Makefile.in (CFILES): Add unlink-if-ordinary.c
- (REQUIRED_OFILES): Add unlink-if-ordinary.o.
- Add dependencies and rule for unlink-if-ordinary.o.
- * unlink-if-ordinary.c: New.
-
-2005-03-01 Ben Elliston <bje@au.ibm.com>
-
- * hashtab.c (htab_find_slot_with_hash): Make function
- documentation clearer.
-
-2005-02-13 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (__cxa_demangle): Change resolution of ambiguous
- arguments.
-
-2005-01-11 Tobias Schl"uter <tobias.schlueter@physik.uni-muenchen.de>
-
- * hex.c (hex_value): Group 'unsigned int' together to get correct
- markup.
- * functions.texi: Regenerated.
-
-2004-12-27 H.J. Lu <hongjiu.lu@intel.com>
-
- * Makefile.in: Undo to 2004-12-17.
- * aclocal.m4: Likewise.
- * config.table: Likewise.
- * configure.ac: Likewise.
- * maint-tool: Likewise.
- * configure: Likewise.
-
-2004-12-19 H.J. Lu <hongjiu.lu@intel.com>
-
- PR bootstrap/19072
- * Makefile.in (enable_shared): New substitute.
- (LTTARGETLIB): New.
- (PREFIXTARGETLIB): New.
- (LTTESTLIB): New.
- (PREFIXTESTLIB): New.
- (CCLD): New.
- (LINK): New.
- ($(TARGETLIB)): Use $(LINK) to create libraries and create
- targets by hand.
- ($(TESTLIB)): Likewise.
- (mostlyclean): Don't remove .libs. Remove the libtool object
- directory.
-
- * config.table (enable_shared): Removed.
-
- * configure.ac (enable_static): Set to yes.
- (AC_PROG_LIBTOOL): Removed.
- (AM_DISABLE_SHARED): Uncommented.
- (AM_PROG_LIBTOOL): Likewise.
- (LIBOBJS): Add `./' to avoid VPATH.
- (LTLIBOBJS): Likewise.
- (enable_shared): Substitute.
- * configure: Regenerated.
-
-2004-12-18 H.J. Lu <hongjiu.lu@intel.com>
-
- * Makefile.in (top_builddir): Set to `.'.
- (OUTPUT_OPTION): Removed.
- (LIBTOOL): New.
- (LTLIBOBJS): New.
- (EXTRA_LTOFILES): New.
- (FLAGS_TO_PASS): Add EXTRA_LTOFILES.
- (all): Remove stamp-picdir.
- (LTCOMPILE): New.
- (.c.lo): New rule.
- (REQUIRED_LTOFILES): New.
- (CONFIGURED_LTOFILES): New.
- ($(TARGETLIB)): Check .libs for PIC object files. Depend on
- $(REQUIRED_LTOFILES) $(EXTRA_LTOFILES) $(LTLIBOBJS).
- (stamp-picdir): Completely removed.
- (maint-missing): Pass $(REQUIRED_LTOFILES)
- $(CONFIGURED_LTOFILES) instead of (REQUIRED_OFILES)
- $(CONFIGURED_OFILES)
- (maint-buildall): Depend on $(REQUIRED_LTOFILES)
- $(CONFIGURED_LTOFILES).
- (mostlyclean): Also remove *.lo .libs.
- Run "make maint-deps".
-
- * aclocal.m4: Include ../libtool.m4.
-
- * config.table: Don't check --enable-shared.
-
- * configure.ac (AC_PROG_LIBTOOL): Add.
- (AC_PROG_CC_C_O): Removed.
- (OUTPUT_OPTION): Removed.
- (NO_MINUS_C_MINUS_O): Removed.
- (ltpexecute): New substitute.
- (LIBOBJS): Cleanup.
- * configure: Regenerated.
-
- * maint-tool: Updated for .lo/libtool.
-
-2004-12-11 Ben Elliston <bje@au.ibm.com>
-
- * configure.ac: Invoke AC_CHECK_SIZEOF for sizeof (int).
- * configure: Regenerate.
- * config.in: Likewise.
-
-2004-12-07 DJ Delorie <dj@redhat.com>
-
- * splay-tree.c (splay_tree_delete_helper): Redesign the logic so
- that recursion (and thus large stack space) is not needed.
-
-2004-11-29 Matt Kraai <kraai@alumni.cmu.edu>
-
- * pex-unix.c: Fix the spelling of longjmp.
-
-2004-11-23 Ian Lance Taylor <ian@wasabisystems.com>
-
- PR other/18623
- * cp-demangle.c (d_call_offset): Remove useless local variables
- offset and virtual_offset.
- * cplus-dem.c (ada_demangle): Remove useless local variable
- at_start_name.
- (demangle_template): Remove useless local variable start.
-
-2004-11-19 Roger Sayle <roger@eyesopen.com>
-
- * objalloc.c, strsignal.c, xstrerror.c: Include "config.h" before
- "ansidecl.h" to avoid redeclaration errors with native compilers.
- * regex.c: Protect config.h from multiple inclusion.
-
-2004-11-12 Mike Stump <mrs@apple.com>
-
- * Makefile.in (libiberty.html): Fix html generation.
-
-2004-09-08 Adam Nemet <anemet@lnxw.com>
-
- * vasprintf.c: Accept __va_copy in addition to va_copy.
-
-2004-09-03 Paolo Bonzini <bonzini@gnu.org>
-
- * configure: Regenerate.
-
-2004-09-02 Paolo Bonzini <bonzini@gnu.org>
-
- * configure.ac: Do not enable multilibs for build-side libiberty.
-
-2004-06-29 Danny Smith <dannysmith@users.sourceforge.net>
-
- * lrealpath.c (lrealpath): Add _WIN32 support.
-
-2004-06-28 Zack Weinberg <zack@codesourcery.com>
-
- * cp-demangle.h: Declare cplus_demangle_operators,
- cplus_demangle_builtin_types, cplus_demangle_mangled_name, and
- cplus_demangle_type as static if IN_GLIBCPP_V3.
-
-2004-06-28 Ian Lance Taylor <ian@wasabisystems.com>
-
- PR other/16240
- * cp-demangle.c (d_expr_primary): Check for a failure return from
- cplus_demangle_type.
- * testsuite/demangle-expected: Add test case.
-
-2004-05-31 Danny Smith <dannysmith@users.sourceforge.net>
-
- * pex-win32.c (fix_argv): Expand comment.
-
-2004-05-25 Daniel Jacobowitz <drow@false.org>
-
- * Makefile.in: Add .NOEXPORT.
-
-2004-04-29 Douglas B Rupp <rupp@gnat.com>
-
- * mkstemps.c (mkstemps) [VMS]: Remove special open option. Update
- copyright.
-
-2004-04-26 Maciej W. Rozycki <macro@ds2.pg.gda.pl>
-
- * configure.ac (UNSIGNED_64BIT_TYPE): Unquote the definition.
- * configure: Regenerate.
-
-2004-04-22 Richard Henderson <rth@redhat.com>
-
- * hashtab.c: Include limits.h, stdint.h, ansidecl.h.
- (CHAR_BIT): Provide default.
- (struct prime_ent, prime_tab): New.
- (higher_prime_index): Rename from higher_prime_number, return index.
- (htab_mod_1): New.
- (htab_mod, htab_mod_m2): Use it.
- (htab_create_alloc, htab_create_alloc_ex): Store prime index.
- (htab_expand): Likewise.
- * configure.ac: Check for stdint.h.
- (UNSIGNED_64BIT_TYPE): New define and checks to fill it in.
- * config.in, configure: Rebuild.
-
-2004-04-13 Ian Lance Taylor <ian@wasabisystems.com>
-
- * strerror.c: Include config.h, and redefine sys_nerr and
- sys_errlist, before including ansidecl.h and libiberty.h.
-
-2004-04-13 Jeff Law <law@redhat.com>
-
- * hashtab.c (htab_remove_elt_with_hash): New function.
- (htab_remove_elt): Implement in terms of htab_remove_elt_with_hash.
-
-2004-03-31 Richard Henderson <rth@redhat.com>
-
- * hashtab.c (htab_size): Move to top of file; mark inline.
- (htab_elements): Likewise.
- (htab_mod, htab_mod_m2): New.
- (htab_delete): Refactor htab->size and htab->entries.
- (htab_empty): Likewise.
- (find_empty_slot_for_expand): Use htab_size, htab_mod, htab_mod_m2.
- (htab_find_with_hash, htab_find_slot_with_hash): Likewise.
- (htab_clear_slot): Use htab_size, htab_elements.
- (htab_traverse_noresize, htab_traverse): Likewise.
-
-2004-03-17 Ian Lance Taylor <ian@wasabisystems.com>
-
- * pex-unix.c (pexecute): Use vfork instead of fork, with
- appropriate changes to make this safe.
- * pex-common.h (STDERR_FILE_NO): Define.
-
- * Makefile.in: Clean up REQUIRED_OFILES and CONFIGURED_OFILES for
- an 80 column screen. Run maint-deps.
-
-2004-03-09 Kelley Cook <kcook@gcc.gnu.org>
-
- * configure.ac: Bump version to 2.59. Apply suggested autoupdates.
- * acconfig.h: Delete redundant file.
- * config.in: Regenerate.
- * configure: Regenerate.
-
-2004-03-09 Hans-Peter Nilsson <hp@axis.com>
-
- * configure: Regenerate for config/accross.m4 correction.
-
-2004-03-07 Andreas Jaeger <aj@suse.de>
-
- * testsuite/test-demangle.c: Include <string.h> and <stdlib.h> for
- prototypes.
- (main): Initialize style.
-
-2004-02-24 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.h (enum d_builtin_type_print): Add D_PRINT_UNSIGNED,
- D_PRINT_UNSIGNED_LONG, D_PRINT_LONG_LONG,
- D_PRINT_UNSIGNED_LONG_LONG, D_PRINT_FLOAT.
- * cp-demangle.c (cplus_demangle_builtin_types): Change char and
- short types to D_PRINT_DEFAULT. Change other integer types to use
- new D_PRINT_* values where appropriate. Change float types to
- D_PRINT_FLOAT.
- (d_print_comp) [LITERAL, LITERAL_NEG]: Handle new D_PRINT_*
- values.
- * testsuite/demangle-expected: Adjust two test cases.
-
- * cp-demangle.c (d_print_function_type): Print a space before the
- parenthesis around the function type in more cases.
- * testsuite/demangle-expected: Adjust one test case.
-
- * cp-demangle.c (d_print_comp) [UNARY]: Don't emit extra
- parentheses around a cast.
- * testsuite/demangle-expected: Adjust two test cases to match new
- output.
-
- * cp-demangle.c (__cxa_demangle): Pass DMGL_PARAMS to d_demangle.
-
- * cp-demangle.c (d_print_comp) [RESTRICT, VOLATILE, CONST]: Don't
- push more than one of the same CV-qualifier on the top of the
- stack.
- (d_print_comp) [ARRAY_TYPE]: If the array itself is CV-qualified,
- move the CV-qualifiers to apply to the element type instead.
- (d_print_array_type): When checking the modifiers, keep looking
- past ones which have been printed already.
- * testsuite/demangle-expected: Add three test cases.
-
-2004-02-23 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (__cxa_demangle): Adjust last patch to handle
- empty string correctly.
-
- * cp-demangle.c (__cxa_demangle): It is not an error if status is
- not NULL. It is an error if the mangled name is the same as a
- built-in type name.
- (main): If IN_GLIBCPP_V3 is defined, test __cxa_demangle rather
- than cplus_demangle_v3.
-
- * dyn-string.c: Remove test of IN_LIBGCC2 and IN_GLIBCPP_V3 and
- the associated #define of RETURN_ON_ALLOCATION_FAILURE.
-
-2004-02-16 Matt Kraai <kraai@alumni.cmu.edu>
-
- * regex.c: Include <ansidecl.h>.
- (regcomp): Cast i to int.
- (regerror): Add ATTRIBUTE_UNUSED to parameter preg.
-
-2004-01-25 Ian Lance Taylor <ian@wasabisystems.com>
-
- * configure.ac: Add m4_pattern_allow(LIBOBJS).
- * configure: Regenerate.
-
-2004-01-22 DJ Delorie <dj@redhat.com>
-
- * Makefile.in: Convert to ./ throughout. Rebuild dependencies
- with explicit build rules.
- (VPATH): Remove.
- (.c.o): Poison.
- * configure.ac (pexecute, LIBOBJS): Add ./ .
- * maint-tool: Build dependencies with explicit rules.
-
-2004-01-15 Kazu Hirata <kazu@cs.umass.edu>
-
- * strdup.c (strdup): Constify the argument.
-
-2004-01-14 Loren J. Rittle <ljrittle@acm.org>
-
- * Makefile.in (distclean): Remove config.cache.
-
-2004-01-13 Daniel Jacobowitz <drow@mvista.com>
-
- * cp-demangle.c (d_make_comp): DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE
- takes two parameters.
- * cp-demint.c (cplus_demangle_fill_component): Likewise.
-
-2004-01-12 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c: Include "cp-demangle.h". If IN_GLIBCPP_V3 is
- defined, rename some functions which are to become static via
- #define.
- (CP_STATIC_IF_GLIBCPP_V3): Define.
- (struct d_operator_info): Move definition to cp-demangle.h, and
- rename to demangle_operator_info. Change all uses.
- (enum d_builtin_type_print): Move definition to cp-demangle.h.
- (struct d_builtin_type_info): Move definition to cp-demangle.h,
- and rename to demangle_builtin_type_info. Change all uses.
- (enum d_comp_type): Move definition to include/demangle.h, and
- rename to demangle_component_type, and change all enums to start
- with DEMANGLE_COMPONENT_ instead of D_. Change all uses.
- (struct d_comp): Move definition to include/demangle.h, and rename
- to demangle_component. Change all uses.
- (struct d_info): Move definition to cp-demangle.h.
- (cplus_demangle_fill_name): New function.
- (cplus_demangle_fill_extended_operator): New function.
- (cplus_demangle_fill_ctor): New function.
- (cplus_demangle_fill_dtor): New function.
- (d_make_empty): Remove type parameter. Change all callers.
- (d_make_name): Use cplus_demangle_fill_name.
- (d_make_extended_operator): Use
- cplus_demangle_fill_extended_operator.
- (d_make_ctor): Use cplus_demangle_fill_ctor.
- (d_make_dtor): Use cplus_demangle_fill_dtor.
- (cplus_demangle_mangled_name): Rename from d_mangled_name. Make
- non-static by default. Change all callers.
- (cplus_demangle_operators): Rename from d_operators. Change all
- uses. Make non-static by default. Add sentinel at end of array.
- (d_operator_name): Adjust initialization of high for new sentinel
- in cplus_demangle_operators.
- (cplus_demangle_builtin_types): Rename from d_builtin_types.
- Change all uses. Make non-static by default. Change initializer
- to use D_BUILTIN_TYPE_COUNT instead of magic number 26.
- (cplus_demangle_type): Rename from d_type. Make non-static by
- default. Change all callers.
- (cplus_demangle_init_info): Rename from d_init_info. Make
- non-static by default. Change all callers.
- * cp-demangle.h: New file.
- * cp-demint.c: New file.
- * Makefile.in: Rebuild dependencies.
- (CFILES): Add cp-demint.c.
- (REQUIRED_OFILES): Add cp-demint.o.
-
-2004-01-09 Kelley Cook <kcook@gcc.gnu.org>
-
- * configure.in: Rename file to ...
- * configure.ac: ... this.
- * Makefile.in: Update a comment for above change.
- * README: Likewise.
- * config.in: Regenerate.
-
-2004-01-02 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (d_encoding): When DMGL_PARAMS is not set, strip
- CV-qualifiers from D_COMP_LOCAL_NAME right subtree.
- * cplus-dem.c (demangle_arm_hp_template): Set DMGL_PARAMS when
- demangling template parameters.
- * testsuite/test-demangle.c (fail): New static function.
- (main): Support new options in input file: --no-params,
- --is-v3-ctor, and --is-v3-dtor.
- * testsuite/demangle-expected: Add --no-params to most tests, and
- add the correct result when parameters are not demangled. Add
- some simple tests for V3 constructor/destructor recognition.
-
-2003-12-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cp-demangle.c (is_ctor_or_dtor): Fix error in last change.
-
-2003-12-22 Daniel Jacobowitz <drow@mvista.com>
-
- PR debug/13272
- * Makefile.in (lbasename.o): Depend on filenames.h.
- * lbasename.c: Include "filenames.h" instead of defining
- its macros locally.
-
-2003-12-22 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (CP_DYNAMIC_ARRAYS): Define if compiler supports
- dynamic arrays.
- (struct d_operator_info): Add len field.
- (struct d_builtin_type_info): Add len and java_len fields.
- (struct d_standard_sub_info): Add simple_len, full_len, and
- set_last_name_len fields.
- (struct d_comp): Add len field to s_string.
- (struct d_info): Add send, did_subs, and expansion fields.
- (d_append_string_constant): Define.
- (d_append_string): Remove. Change all users to use
- d_append_string_constant or d_append_buffer instead.
- (d_make_sub): Add len parameter. Change all callers.
- (d_name): Increase expansion when substituting std::.
- (d_unqualified_name): Increase expansion for an operator.
- (d_number): Don't use multiplication for negative numbers.
- (d_identifier): Make sure there are enough characters in the
- string for the specified length. Adjust expansion for an
- anonymous namespace.
- (d_operators): Initialize len field.
- (d_special_name, d_ctor_dtor_name): Increase expansion.
- (d_builtin_types): Initialize len and java_len fields.
- (d_type): Increase expansion for a builtin type.
- (d_cv_qualifiers): Increase expansion for each qualifier.
- (d_bare_function_type): Decrease expansion when removing single
- void parameter.
- (d_template_param): Increment did_subs.
- (d_expression): Increase expansion for an operator.
- (d_expr_primary): Decrease expansion for a type we will print
- specially.
- (standard_subs): Initialize new fields.
- (d_substitution): Increment did_subs when doing a normal
- substitution. Increase expansion for a special substitution.
- (d_print): Add estimate parameter. Change all callers.
- (d_print_comp) [D_COMP_NAME]: Handle C++ case inline.
- (d_print_comp) [D_COMP_BINARY]: Use length to avoid strcmp call.
- (d_print_java_identifier): Rename from d_print_identifier. Handle
- only Java case. Change caller.
- (d_init_info): Change return type to void. Change all callers.
- Initialize send, did_subs, and expansion fields. Do not
- initialize comps and subs fields.
- (d_demangle): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and subs
- arrays on stack. Make an estimate of the length of the demangled
- name. Ifdef CP_DEMANGLE_DEBUG, print estimation failures.
- (is_ctor_or_dtor): Ifdef CP_DYNAMIC_ARRAYS, allocate comps and
- subs arrays on stack.
-
-2003-12-20 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (d_identifier): In Java mode, skip an optional '$'
- after the identifier.
- * testsuite/demangle-expected: Add test case.
-
-2003-12-19 Ian Lance Taylor <ian@wasabisystems.com>
-
- Fix for PR c++/13447:
- * cp-demangle.c (enum d_comp_type): Add D_COMP_LOCAL_NAME.
- (d_dump, d_make_comp): Handle D_COMP_LOCAL_NAME.
- (is_ctor_dtor_or_conversion): Handle D_COMP_LOCAL_NAME like
- D_COMP_QUAL_NAME.
- (is_ctor_or_dtor): Likewise.
- (d_local_name): Use D_COMP_LOCAL_NAME rather than
- D_COMP_QUAL_NAME.
- (d_print_comp) [D_COMP_LOCAL_NAME]: New.
- (d_prinT_comp) [D_COMP_TYPED_NAME]: If the left tree is
- D_COMP_LOCAL_NAME, pull any qualifiers off its right subtree.
- (d_print_mod_list): Handle D_COMP_LOCAL_NAME.
- * testsuite/demangle-expected: Add two test cases.
-
- * cp-demangle.c (d_print_function_type): Clear the global modifier
- list when printing the modifiers, not just when printing the
- function parameters.
- * testsuite/demangle-expected: Add two test cases.
-
-2003-12-15 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (d_print_function_type): Print the function
- parameters with no modifiers.
- * testsuite/demangle-expected: Add test case.
-
- * cp-demangle.c (d_demangle): If DMGL_PARAMS is not set, don't
- expect that we've read the entire string.
- (is_ctor_or_dtor): Don't expect that we've read the entire
- string--reverse patch of 2003-11-29.
-
-2003-12-15 Brendan Kehoe <brendan@zen.org>
-
- * libiberty/Makefile.in (floatformat.o): Add dependency on
- config.h to accompany change of 2003-12-03.
-
-2003-12-15 Ian Lance Taylor <ian@wasabisystems.com>
-
- Fix handling of constructor/destructor of standard substitution:
- * cp-demangle.c (struct d_standard_sub_info): Define.
- (d_substitution): Add prefix argument. Change all callers.
- Rework handling of standard substitutions to print full name when
- qualifying a constructor/destructor, or when DMGL_VERBOSE is set.
- * testsuite/demangle-expected: Add test case.
-
- Fix handling of negative literal constants:
- * cp-demangle.c (enum d_comp_type): Add D_COMP_LITERAL_NEG.
- (d_dump, d_make_comp): Handle D_COMP_LITERAL_NEG.
- (d_expr_primary): Use D_COMP_LITERAL_NEG for a negative number.
- (d_print_comp): Handle D_COMP_LITERAL_NEG.
- * testsuite/demangle-expected: Add test case.
-
-2003-12-04 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (IS_UPPER, IS_LOWER): Define.
- (d_last_char): Define new macro.
- (d_make_name): Reject an empty name.
- (d_prefix, d_unqualified_name, d_type): Use new IS_* macros.
- (d_substitution, d_print_identifier): Likewise.
- (d_print_comp) [D_COMP_OPERATOR]: Likewise.
- (d_print_comp) [D_COMP_TEMPLATE]: Use new d_last_char macro.
- (d_print_mod) Use new d_last_char macro.
- (d_print_cast): Use new d_last_char macro.
- (is_ctor_or_dtor): Don't leak memory.
-
- Fix handling of member function modifiers:
- * cp-demangle.c (enum d_comp_type): Add D_COMP_RESTRICT_THIS,
- D_COMP_VOLATILE_THIS, and D_COMP_CONST_THIS.
- (d_dump): Dump new d_comp_type values.
- (d_make_comp): Accept new d_comp_type values.
- (has_return_type): Only accept _THIS variants of qualifiers.
- (d_encoding): Without DMGL_PARAMS, only remove _THIS variants of
- qualifiers.
- (d_cv_qualifiers): Add member_fn parameter. Change all callers.
- (d_print_comp) [D_COMP_TYPED_NAME]: Rather than removing
- qualifiers and printing them at the end, add _THIS qualifiers to
- the modifier list.
- (d_print_comp) [D_COMP_*_THIS]: New cases.
- (d_print_comp) [D_COMP_PTRMEM_TYPE]: Remove special handling of
- qualifiers.
- (d_print_mod_list): Add suffix parameter. Change all callers.
- Keep walking the list even if the current modifier has been
- printed.
- (d_print_mod): Handle new _THIS qualifiers.
- (d_print_function_type): Handle new _THIS qualifiers when deciding
- whether to print a parenthesis. Put a space before the
- parenthesis in some cases. Call d_print_mod_list again at the
- end, passing suffix as 1.
- (is_ctor_or_dtor): Look for new _THIS qualifiers.
- * testsuite/demangle-expected: Add test case.
-
- Fix for PR gcc/13304:
- * cp-demangle.c (d_print_comp) [D_COMP_TEMPLATE]: If the character
- before the '<' is itself a '<', insert a space.
- (d_print_cast): Likewise.
- * testsuite/demangle-expected: Add test case.
-
- Fix for PR gcc/13244:
- * cp-demangle.c (d_print_comp) [D_COMP_BINARY]: Wrap an expression
- which uses the '>' operator in an extra layer of parens.
- * testsuite/demangle-expected: Add test case.
-
-2003-12-03 Ian Lance Taylor <ian@wasabisystems.com>
-
- * floatformat.c: Include "config.h" and <string.h> if available.
- (INFINITY, NAN): Define if not defined by <math.h>.
- (floatformat_to_double): Handle NaN, infinity, and denormalized
- numbers.
- (floatformat_from_double): Likewise.
- (ieee_test): In debugging code, use little endian rather than big
- endian. Correct tests to handle NaN and to check correct sign of
- zero. Omit m68k extended test.
- (main): Add more debugging cases.
-
-2003-11-29 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (d_demangle): Only return success if we consumed
- the entire demangled string.
- (is_ctor_or_dtor): Likewise.
-
- * testsuite/demangle-expected: Revert one part of 2003-06-26 patch
- to restore expected result of EDG test case to original expected
- result.
-
-2003-11-26 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (struct d_print_mod): Add templates field.
- (d_make_builtin_type): Check for NULL type.
- (d_make_extended_operator): Check for NULL name.
- (d_make_ctor, d_make_dtor): Likewise.
- (d_mangled_name): Add top_level parameter. Change all callers.
- (d_encoding): If DMGL_PARAMS is not set, strip off initial
- CV-qualifiers.
- (d_type): Check some return values we rely on.
- (d_bare_function_type, d_array_type): Likewise.
- (d_pointer_to_member_type, d_template_args): Likewise.
- (d_add_substitution): Fail if argument is NULL.
- (d_print_resize): Check whether buf is NULL.
- (d_print_comp): Save current templates list with each modifier.
- Don't pass the modifier list down when printing a template.
- (d_print_cast): Don't pass the modifier list down when printing a
- template.
- (d_print_mod_list): Temporarily set templates list while printing
- a modifier.
- (d_print_mod): Check that buf is not NULL before using it.
- (d_print_function_type): Print parens if there is no modifier.
- (d_init_info): Permit as many substitutions as there are
- characters in the mangled name.
- * testsuite/demangle-expected: Add two new test cases.
-
-2003-11-25 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (java_demangle_v3): Pass DMGL_PARAMS to
- d_demangle.
-
-2003-11-22 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (d_encoding): Add top_level parameter. Change all
- callers.
- (print_usage): Display new -p option.
- (long_options): Add --no-params.
- (main): Accept and handle -p.
-
-2003-11-21 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (has_return_type): Skip qualifiers when checking
- whether we have a template.
- * testsuite/demangle-expected: Add four new tests.
-
-2003-11-20 Ian Lance Taylor <ian@wasabisystems.com>
-
- * testsuite/demangle-expected: Minor changes to match output of
- new demangler: adjust whitespace in four tests, and change order
- of qualifiers in one test.
-
- * cp-demangle.c: Complete rewrite.
-
-2003-11-19 Mark Mitchell <mark@codesourcery.com>
-
- * cp-demangle.c (demangle_type): Correct thinko in substitution
- processing.
-
-2003-11-18 Ian Lance Taylor <ian@wasabisystems.com>
-
- * cp-demangle.c (demangle_operator_name): Remove space before
- "sizeof".
- (demangle_type_ptr): Put qualifiers in the right place. Handle
- qualifiers in pointer to member specially.
- (demangle_type): Handle qualifiers for pointer or reference
- specially. Handle function type.
- (demangle_local_name): Save and restore caret around demangling of
- initial encoding.
-
- * testsuite/test-demangle.c (main): Don't pass DMGL_VERBOSE to
- cplus_demangle.
-
- * testsuite/Makefile.in (test-demangle): Depend upon libiberty.a.
-
-2003-10-31 Andreas Jaeger <aj@suse.de>
-
- * floatformat.c (floatformat_always_valid): Add unused attribute.
-
-2003-10-30 Josef Zlomek <zlomekj@suse.cz>
-
- Jan Hubicka <jh@suse.cz>
- * vasprintf.c (int_vasprintf): Pass va_list by value.
- Use va_copy for copying va_list.
- (vasprintf): Pass va_list by value.
-
-2003-10-30 Josef Zlomek <zlomekj@suse.cz>
-
- * hashtab.c (htab_find_slot_with_hash): Decrease n_deleted
- instead of increasing n_elements when inserting to deleted slot.
-
-2003-10-20 J. Brobecker <brobecker@gnat.com>
-
- * cplus-dem.c (demangle_template): Register a new Btype only
- when needed.
- * testsuite/demangle-expected: Add a new test.
-
-2003-10-16 H.J. Lu <hongjiu.lu@intel.com>
-
- * testsuite/demangle-expected: Update the expected output of
- _GLOBAL__I__Z2fnv.
-
-2003-10-02 Daniel Jacobowitz <drow@mvista.com>
-
- * strerror.c: Revert last change. Declare static sys_nerr
- and sys_errlist using different names.
-
-2003-10-01 Daniel Jacobowitz <drow@mvista.com>
-
- * strerror.c: Don't provide or reference sys_errlist if
- strerror is available.
-
-2003-10-01 H.J. Lu <hongjiu.lu@intel.com>
-
- * configure.in: Check if $MAKEINFO is missing.
- * configure: Regenerated.
-
-2003-09-24 Daniel Jacobowitz <drow@mvista.com>
-
- * configure.in: Use AC_PROG_CPP_WERROR.
- * configure: Regenerated.
-
-2003-09-22 Andrew Cagney <cagney@redhat.com>
-
- * floatformat.c (floatformat_i387_ext_is_valid): New function.
- (floatformat_always_valid): New function.
- (floatformat_i387_ext): Initialize new "is_valid" field to
- "floatformat_i387_ext_is_valid".
- (floatformat_ieee_single_little): Initialize "is_valid" field to
- floatformat_always_valid.
- (floatformat_ieee_double_big): Ditto.
- (floatformat_ieee_double_little): Ditto.
- (floatformat_ieee_double_little): Ditto.
- (floatformat_ieee_double_littlebyte_bigword): Ditto.
- (floatformat_i960_ext): Ditto.
- (floatformat_m88110_ext): Ditto.
- (floatformat_m88110_harris_ext): Ditto.
- (floatformat_arm_ext_big): Ditto.
- (floatformat_arm_ext_littlebyte_bigword): Ditto.
- (floatformat_ia64_spill_big): Ditto.
- (floatformat_ia64_spill_little): Ditto.
- (floatformat_ia64_quad_big): Ditto.
- (floatformat_ia64_quad_little): Ditto.
- (floatformat_ia64_quad_little): Ditto.
- (floatformat_is_valid): Call "is_valid".
-
-2003-09-15 Andrew Cagney <cagney@redhat.com>
-
- * floatformat.c (get_field): Make "data" constant.
- (floatformat_is_valid, floatformat_to_double): Make "from"
- constant, fix casts.
- (floatformat_from_double): Make "from" constant.
-
-2003-09-15 Daniel Jacobowitz <drow@mvista.com>
-
- * floatformat.c (floatformat_is_valid): New function.
- (get_field, put_field): Correct comments.
-
-2003-09-06 Josef Zlomek <zlomekj@suse.cz>
-
- * fibheap.c (fibheap_replace_key_data): Change type of OKEY to
- FIBHEAPKEY_T.
-
-2003-09-02 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- PR bootstrap/12100
- * aclocal.m4 (AC_LANG_FUNC_LINK_TRY): Define.
- * configure: Rebuilt.
-
-2003-08-27 Daniel Jacobowitz <drow@mvista.com>
-
- * aclocal.m4: Include acx.m4 and no-executables.m4.
- (libiberty_AC_FUNC_STRNCMP): Use AC_LIBOBJ.
- (LIB_AC_PROG_CC): Remove.
- * configure.in: Update AC_PREREQ to 2.57. Use GCC_NO_EXECUTABLES.
- Use AC_PROG_CC and set ac_libiberty_warn_cflags instead of using
- LIB_AC_PROG_CC. Use AC_LIBOBJ. Call AC_ISC_POSIX later, only if
- performing link tests.
- * configure: Regenerated.
-
-2003-08-12 Nathanael Nerode <neroden@gcc.gnu.org>
-
- * cp-demangle.c: Clarify what package(s) this is part of.
-
-2003-07-05 Danny Smith <dannysmith@users.sourceforge.net>
-
- * pex-win32.c (pexecute): Mark parameters this_pname and
- temp_base as unused. Remove unused variables retries,
- sleep_interval. Initialize org_stdin, org_stdout.
- (pwait): Mark parameter flags as unused.
-
-2003-07-02 Danny Smith <dannysmith@users.sourceforge.net>
-
- * pex-win32.c (fix_argv): Ensure that the executable pathname
- uses Win32 backslashes.
- (pexecute): Cast away constness when assigning *errmsg_arg.
-
-2003-06-26 H.J. Lu <hongjiu.lu@intel.com>
-
- * testsuite/demangle-expected: Add more GNU V3 testcases.
-
-2003-06-22 Zack Weinberg <zack@codesourcery.com>
-
- * safe-ctype.c: Use HOST_CHARSET_ASCII and HOST_CHARSET_EBCDIC,
- not HC_ASCII and HC_EBCDIC.
- Add documentation in form expected by gather-docs.
- * hex.c: Use HOST_CHARSET, not hand-coded check of character set.
- * Makefile.in, functions.texi: Regenerate.
-
-2003-06-21 Zack Weinberg <zack@codesourcery.com>
-
- * safe-ctype.c: Separate out EOF==-1 check. Use HOST_CHARSET
- for charset determination.
-
-2003-06-19 Dara Hazeghi <dhazeghi@yahoo.com>
-
- * configure.in: Add check for malloc.h needed by
- m68k for function free().
- * configure: Regenerated.
- * config.in: Add HAVE_MALLOC_H.
- * hashtab.c: include malloc.h were available for
- free().
-
-2003-06-09 Albert Chin-A-Young <china@thewrittenword.com>
-
- PR bootstrap/10974
- * physmem.c: Update comment.
- * configure.in: Modify test for _system_configuration for older
- AIX systems.
-
- * config.in, configure: Regenerated.
-
-2003-06-05 John David Anglin <dave.anglin@nrc-cnrc.gc.ca>
-
- PR other/10810
- * test-demangle.c (getline): Fix fence-post error.
-
-2003-06-03 Nick Clifton <nickc@redhat.com>
-
- * asprintf.c: Change comment to note that -1 is returned upon
- error.
- * vasprintf.c: Likewise.
- (vasprintf): Return -1 upon error.
- * functions.texi: Document changes to asprintf and vasprintf.
-
-2003-05-19 Kelley Cook <kelleycook@wideopenwest.com>
-
- * config.table: Accept i[345867]86 variant.
-
-2003-05-15 Jim Blandy <jimb@redhat.com>
-
- * hex.c (_hex_value): Make this unsigned.
- (hex_value): Update documentation for new return type. hex_value
- now expands to an unsigned int expression, to avoid unexpected
- sign extension when we store it in a bfd_vma, which is larger than
- int on some platforms.
- * functions.texi: Regenerated.
-
-2003-05-07 Josef Zlomek <zlomekj@suse.cz>
-
- * splay-tree.c (splay_tree_predecessor): Fix comment.
- (splay_tree_successor): Fix comment.
-
-2003-05-07 Jason Merrill <jason@redhat.com>
-
- * hashtab.c (iterative_hash): New fn.
- * configure.in: Add AC_C_BIGENDIAN_CROSS.
- * aclocal.m4: Include accross.m4.
- * configure, config.in: Regenerate.
-
-2003-05-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * configure.in (AC_CHECK_FUNCS): Don't make multiple calls.
- * configure: Regenerate.
-
-2003-05-03 Carlo Wood <carlo@alinoe.com>
-
- * cp-demangle.c: Fix typo in "char_traints" string-literal.
-
-2003-04-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * vsnprintf.c (vsnprintf): Don't pad string with extra nulls.
- (main): Test that we don't write too much data.
-
-2003-04-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * configure.in (funcs, AC_CHECK_FUNCS): Add snprintf and
- vsnprintf.
- * snprintf.c, vsnprintf.c: New files.
- * Makefile.in (CFILES): Add snprintf.c and vsnprintf.c.
- (CONFIGURED_OFILES): Add snprintf.o and vsnprintf.o.
- Regenerate dependencies.
-
- * functions.texi, configure, config.in: Regenerated.
-
-2003-04-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * mempcpy.c, stpcpy.c, stpncpy.c: New files.
- * configure.in (funcs, AC_CHECK_FUNCS): Add mempcpy, stpcpy
- and stpncpy.
- * Makefile.in (CFILES): Add mempcpy.c, stpcpy.c and stpncpy.c.
- (CONFIGURED_OFILES): Add mempcpy.o, stpcpy.o and stpncpy.o.
- Regenerate dependencies.
-
- * functions.texi, configure, config.in: Regenerated.
-
-2003-04-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * argv.c: Fix comments.
- * calloc.c: Don't unnecessarily include "libiberty.h".
- (bzero): Add prototype.
- * floatformat.c: Include "ansidecl.h", rely on ANSI_PROTOTYPES.
- * getcwd.c (getcwd): Use standard definition to avoid conflicts
- with system headers.
- * hashtab.c (htab_traverse): Delete unused variables.
- * rename.c: Include "ansidecl.h".
- (rename): Use standard definition to avoid conflicts with system
- headers.
- * strsignal.c: Rely on ANSI_PROTOTYPES.
- * strstr.c: Check GNUC >= 2, not GNUC == 2.
- * vfprintf.c: Include "ansidecl.h", rely on ANSI_PROTOTYPES.
- * vprintf.c: Include "ansidecl.h" earlier, rely on
- ANSI_PROTOTYPES.
- * vsprintf.c: Include "ansidecl.h" earlier, rely on
- ANSI_PROTOTYPES and possibly include <stdarg.h>.
-
- * Makefile.in: Regenerate dependencies.
-
-2003-04-15 DJ Delorie <dj@redhat.com>
-
- * maint-tool (deps): Scan for headers in $srcdir also.
-
-2003-04-15 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- PR target/10338
- PR bootstrap/10198
- PR bootstrap/10140
- * getopt.c (exchange, _getopt_initialize): Use mempcpy not
- __mempcpy.
- * regex.c (regerror): Likewise.
-
-2003-04-14 Roger Sayle <roger@eyesopen.com>
-
- * argv.c: Use ANSI_PROTOTYPES instead of __STDC__.
- * memchr.c: Likewise.
- * strcasecmp.c: Likewise.
- * strncasecmp.c: Likewise.
- * strncmp.c: Likewise.
- * xatexit.c: Likewise.
- * xmalloc.c: Likewise.
-
- * copysign.c: Use traditional function declaration instead of DEFUN.
- * sigsetmask.c: Likewise.
-
- * memcmp.c: Both of the above, ANSI_PROTOTYPES and DEFUN.
- * memset.c: Likewise.
-
- * memcpy.c: ANSI_PROTOTYPES, DEFUN and prototype bcopy.
- * memmove.c: Likewise.
-
-2003-04-14 Roger Sayle <roger@eyesopen.com>
-
- * strdup.c (strdup): Tweak implementation to use memcpy.
-
-2003-04-14 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * configure.in (HAVE_UINTPTR_T): Always define.
- * configure: Regenerated.
-
-2003-03-23 Alexandre Oliva <aoliva@redhat.com>
-
- * Makefile.in (MULTIOSDIR): New macro. Use $(CC) $(LIBCFLAGS)
- instead of $$CC alone.
- (install_to_tooldir): Use it.
-
-2003-17-03 Jan Hubicka <jh@suse.cz>
-
- * hashtab.c (htab_traverse_noresize): Break out from ...
- * hashtab.c (htab_traverse): ... here.
-
-2003-12-03 Jan Hubicka <jh@suse.cz>
-
- * hashtab.c (htab_expand): Fix warning.
-
- * hashtab.c (htab_expand): Compute the size of hashtable based
- on the number of elements actually used.
- (htab_traverse): Call htab_expand when table is too empty.
-
-2003-03-11 Carlo Wood <carlo@gnu.org>
-
- * cplus-dem.c (demangle_integral_value): Correction to reflect
- patch of 2002-01-10 in order to also make negative multi-digits
- without leading underscore work.
-
-2003-03-03 Mark Mitchell <mark@codesourcery.com>
-
- * cplus-dem.c: Add license exception to copyright notice.
-
-2003-02-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * physmem.c: Formatting changes from upstream.
-
-2003-02-24 Danny Smith <dannysmith@users.source.forge.net>
-
- * physmem.c (physmem_total): Add _WIN32 support.
- (physmem_available): Likewise.
-
-2003-02-24 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * physmem.c (physmem_total) [HAVE_GETSYSINFO]: Test for
- GSI_PHYSMEM.
- (physmem_available) [HAVE_TABLE]: Test for TBL_VMSTATS.
-
-2003-02-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * configure.in: Check for sys/systemcfg.h and
- _system_configuration.
- * physmem.c: Add support for AIX. Tweek formatting as per
- upstream coreutils beta.
-
-2003-02-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
- Richard Earnshaw <rearnsha@arm.com>
- Geoffrey Keating <geoffk@apple.com>
-
- * configure.in: Check for sys/sysctl.h and sysctl.
- * physmem.c: Add support for *bsd and darwin.
- * Makefile.in: Generate depedency for physmem.o.
-
-2003-02-21 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
-
- * physmem.c (physmem_total) [HAVE_GETSYSINFO]: Use getsysinfo on
- Tru64 UNIX.
- (physmem_available) [HAVE_TABLE && HAVE_SYS_TABLE_H]: Use table on
- Tru64 UNIX.
-
- * configure.in (AC_CHECK_HEADERS): Check for sys/sysinfo.h,
- machine/hal_sysinfo.h, sys/table.h.
- (checkfuncs, AC_CHECKFUNCS): Check for getsysinfo, table.
- * configure, config.in: Regenerate.
-
-2003-02-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * configure.in: Check for sys/sysmp.h and sysmp.
- * physmem.c: Pull upstream copy, add support for irix6.
-
- * config.in, configure: Regenerated.
-
-2003-02-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * physmem.c (physmem_total, physmem_available): De-ANSI-fy.
- * configure.in (AC_CHECK_FUNCS): Add pstat_getstatic and
- pstat_getdynamic.
-
-2003-02-20 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Makefile.in (CFILES): Add physmem.c.
- (REQUIRED_OFILES): Add physmem.o.
- * configure.in: Check for sys/pstat.h.
- (checkfuncs): Add pstat_getstatic and pstat_getdynamic.
- * physmem.c: New file, copied from textutils.
-
- * config.in, configure: Regenerated.
-
-2003-02-20 Daniel Jacobowitz <drow@mvista.com>
-
- * Makefile.in (CFILES): Add lrealpath.c.
- (REQUIRED_OFILES): Add lrealpath.o.
- (lrealpath.o): Add rule.
- * aclocal.m4 (libiberty_NEED_DECLARATION): Add.
- * configure.in: Add realpath and canonicalize_file_name to
- checkfuncs and AC_CHECK_FUNCS. Use libiberty_NEED_DECLARATION
- for canonicalize_file_name.
- * lrealpath.c: New file.
- * make-relative-prefix.c: Update documentation.
- (make_relative_prefix): Simplify. Use lbasename and lrealpath.
- * config.in: Regenerated.
- * configure: Regenerated.
- * functions.texi: Regenerated.
-
-2003-02-20 jmc <jmc@prioris.mini.pw.edu.pl>
-
- * cplus_dem.c: Fix typo: intializes -> initializes.
-
-2003-02-20 Alexandre Oliva <aoliva@redhat.com>
-
- * configure.in: Propagate ORIGINAL_LD_FOR_MULTILIBS to
- config.status.
- * configure: Rebuilt.
-
-2003-02-13 Daniel Jacobowitz <drow@mvista.com>
-
- Fix PR c++/7612.
- * cplus-dem.c (demangle_signature): Call string_delete.
- Remove extra string_init.
- (demangle_arm_hp_template): Call string_delete instead of
- string_clear. Add missing string_delete call.
- (demangle_qualified): Add missing string_delete call.
- (do_type): Remove unused variable btype. Add missing string_delete
- call. Call string_delete instead of string_clear.
- (demangle_fund_type): Move variable btype inside of the switch
- statement. Add missing string_delete call.
- (do_arg): Call string_delete instead of string_clear. Remove extra
- string_init.
- (demangle_nested_args): Free work->previous_argument.
-
-2003-02-12 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * acconfig.h: New file. Add uintptr_t.
- * config.in: Regenerated.
-
-2003-02-04 Joseph S. Myers <jsm@polyomino.org.uk>
-
- * libiberty.texi: Update to GFDL 1.2.
-
-2003-01-30 Christian Cornelssen <ccorn@cs.tu-berlin.de>
-
- * Makefile.in (libiberty_topdir): New subst.
- (mkinstalldirs): Redefine in terms of the above.
- * configure.in: AC_SUBST it.
- * configure: Regenerate.
-
-2003-01-28 Christian Cornelssen <ccorn@cs.tu-berlin.de>
-
- * Makefile.in (all-subdir, check-subdir, installcheck-subdir)
- (info-subdir, install-info-subdir, clean-info-subdir)
- (dvi-subdir, install-subdir, etags-subdir, mostlyclean-subdir)
- (clean-subdir, distclean-subdir, maintainer-clean-subdir):
- Pass $(FLAGS_TO_PASS).
-
-2003-01-27 Alexandre Oliva <aoliva@redhat.com>
-
- * Makefile.in (install_to_tooldir): Instead of $(MULTISUBDIR), use
- /`$$CC -print-multi-os-directory`.
-
-2003-01-26 Daniel Jacobowitz <drow@mvista.com>
-
- * hashtab.c (htab_create_alloc_ex): New function.
- (hatab_set_functions_ex): New function.
- (htab_delete, htab_expand): Support alternate allocation functions.
-
-2003-01-24 Christopher Faylor <cgf@redhat.com>
-
- * configure.in: Remove special pex-cygwin consideration.
- * configure: Regenerate.
- * pex-cygwin.c: Remove.
- * Makefile.in: Remove pex-cygwin.[co] lines.
-
-2003-01-24 Zack Weinberg <zack@codesourcery.com>
-
- * Makefile.in (CFILES): Add pex-*.c.
- (REQUIRED_OFILES): Change pexecute.o to @pexecute@
- (CONFIGURED_OFILES): Add pex-*.o.
- (TEXIFILES): Add pexecute.txh.
- (pexecute.o): Delete rule.
- (pex-cygwin.o, pex-djgpp.o, pex-mpw.o, pex-msdos.o, pex-os2.o,
- pex-unix.o, pex-win32.o): New rules.
- * configure.in: Change AC_INIT argument to xmalloc.c.
- Compute appropriate pexecute implementation and substitute it
- as @pexecute@.
-
- * pexecute.c: Split up into...
- * pex-cygwin.c, pex-djgpp.c, pex-mpw.c, pex-msdos.c, pex-os2.c,
- pex-unix.c, pex-win32.c, pex-common.h, pexecute.txh: ... these
- new files.
-
- * functions.texi: Regenerate.
- * configure: Regenerate.
-
-2003-01-20 Josef Zlomek <zlomekj@suse.cz>
-
- * hashtab.c (htab_expand): Fix allocation of new entries.
-
-2003-01-09 Christian Cornelssen <ccorn@cs.tu-berlin.de>
-
- * Makefile.in (FLAGS_TO_PASS): Also pass DESTDIR.
-
- * Makefile.in (install_to_libdir, install_to_tooldir): Add a
- mkinstalldirs command.
-
-2002-12-04 Danny Smith <dannysmith@users.sourceforge.net>
-
- * make-relative-prefix.c (HAVE_HOST_EXECUTABLE_SUFFIX):
- Define for hosts with HOST_EXECUTABLE_SUFFIX.
-
-2002-11-24 Nick Clifton <nickc@redhat.com>
-
- * make-relative-prefix.c (make_relative_prefix): Ensure return
- string is empty before using strcat to construct it.
-
-2002-11-22 Daniel Jacobowitz <drow@mvista.com>
-
- * Makefile.in: Add make-relative-prefix.c.
- * make-relative-prefix.c: New file.
- * functions.texi: Rebuilt.
-
-2002-11-16 Jakub Jelinek <jakub@redhat.com>
-
- * md5.c (md5_process_block): Avoid `function-like macro "F{G,H,I}" must be
- used with arguments in traditional C' warnings.
-
-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.
-
-2002-09-19 John David Anglin <dave@hiuly1.hia.nrc.ca>
-
- * cp-demangle.c (demangling_new): Cast 0 to enum.
- (demangle_char): Cast return of strdup to char *.
- (is_gnu_v3_mangled_ctor): Cast 0 to enum.
- (is_gnu_v3_mangled_dtor): Likewise.
- * cplus-dem.c (grow_vect): Cast return of xrealloc to void *.
- (work_stuff_copy_to_from): Cast return of xmalloc to char **.
- * fibheap.c (fibnode_new): Cast return of xcalloc to fibnode_t.
- * md5.c (md5_process_bytes): Cast results back to const void *.
- (md5_process_block): Add cast to const md5_uint32 *.
- * regex.c (re_compile_fastmap): Cast enum to UCHAR_T.
- * safe-ctype.c (L, XL, U, XU, D, P, _, C, Z, M, V, T, S): Add cast to
- unsigned short.
- * splay-tree.c (splay_tree_xmalloc_allocate): Cast return of xmalloc
- to void *.
- * vasprintf.c (int_vasprintf): Cast return of malloc to char *.
-
-2002-09-19 Nick Clifton <nickc@redhat.com>
-
- * README: Update email addresses for bugs and patches.
-
-2002-09-10 Mike Stump <mrs@apple.com>
-
- * splay-tree.c (splay_tree_successor): Fix comments.
-
-2002-09-11 Zack Weinberg <zack@codesourcery.com>
-
- * cplus-dem.c: Code under #ifdef MAIN moved to gcc/cp/cxxfilt.c.
- * testsuite/Makefile.in: Adjust for test-demangle.
- * testsuite/regress-demangle: Deleted.
- * testsuite/test-demangle.c: New file.
- * testsuite/demangle-expected: Change \$ to $ throughout, now that
- this file is not being read by a shell script.
-
-2002-09-05 Roger Sayle <roger@eyesopen.com>
-
- * regex.c: Only use "#pragma alloca" on AIX when not using gcc.
-
-2002-08-07 DJ Delorie <dj@redhat.com>
-
- * regex.c (re_error_msgid): Just use a simple array of strings.
- (re_compile_pattern): Compensate.
- (re_comp): Likewise.
- (re_comp): Likewise.
- (regerror): Likewise.
-
-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
- characters.
-
-2002-07-08 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cp-demangle.c (demangle_v3_with_details): Wrap in
- !defined IN_GLIBCPP_V3.
-
-2002-07-01 Mark Mitchell <mark@codesourcery.com>
-
- * cp-demangle.c (demangle_operator_name): Add type_arg parameter.
- Set it for the "st" operator.
- (demangle_expression): Handle expressions with types as arguments.
-
-2002-06-30 Douglas Rupp <rupp@gnat.com>
-
- * configure.in (OUTPUT_OPTION,NO_MINUS_C_MINUS_O): Configure.
- * Makefile.in (OUTPUT_OPTION): Use.
-
-2002-06-22 Peter Breitenlohner <peb@mppmu.mpg.de>
-
- * Makefile.in (install_to_libdir): Add $(DESTDIR).
- (install_to_tooldir): Likewise.
-
-2002-06-17 Douglas Rupp <rupp@gnat.com>
-
- * lbasename.c: Add 2002 to copyright.
- (IS_DIR_SEPARATOR): Remove VMS junk.
-
-2002-06-05 Geoffrey Keating <geoffk@redhat.com>
-
- * hashtab.c (htab_create): New stub function for backward
- compatibility.
- (htab_try_create): Likewise.
-
-2002-06-03 Geoffrey Keating <geoffk@redhat.com>
-
- * hashtab.c (htab_create): Delete.
- (htab_try_create): Delete.
- (htab_create_alloc): New.
- (htab_delete): Support user-specified memory allocation.
- (htab_expand): Likewise.
-
-2002-05-22 Roman Lechtchinsky <rl@cs.tu-berlin.de>
-
- * configure.in: Fix typo in the code checking for sys_errlist.
- * configure: Regenerated.
-
-2002-05-13 Andreas Schwab <schwab@suse.de>
-
- * config.table: Use mh-x86pic also for x86-64.
-
-2002-05-08 Alexandre Oliva <aoliva@redhat.com>
-
- * configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at
- script entry, and set LD to it when configuring multilibs.
- * configure: Rebuilt.
-
-2002-05-07 Mark Mitchell <mark@codesourcery.com>
-
- * configure.in (AC_TYPE_PID_T): Use it.
- * configure: Regenerated.
- * getruntime.c: Include <sys/types.h>.
- * waitpid.c: Likewise. Use pid_t, not int, as the type of "pid".
-
-2002-04-09 Richard Henderson <rth@redhat.com>
-
- * hashtab.c (higher_prime_number): Use 7 as minimum.
- (find_empty_slot_for_expand): Don't compute hash2 unless needed.
- (htab_find_slot_with_hash): Likewise.
-
-2002-04-01 Phil Edwards <pme@gcc.gnu.org>
-
- * cp-demangle.c (__cxa_demangle): Also protect with IN_GLIBCPP_V3.
- (is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_ctor): Conditionally
- not compile if IN_GLIBCPP_V3 defined.
- * dyn-string.c: Also allow IN_GLIBCPP_V3 to change allocation scheme.
-
-2002-03-30 Bryce McKinlay <bryce@waitaki.otago.ac.nz>
-
- * cp-demangle.c (java_demangle_v3): Don't try to release "demangled"
- if it is NULL.
-
-2002-03-27 DJ Delorie <dj@redhat.com>
-
- * hex.c: Add documentation.
- (_hex_value): Provide non-ASCII empty table.
- (hex_init): Initialize the non-ASCII table.
- * functions.texi: Regenerate.
-
-2002-03-27 Mark Mitchell <mark@codesourcery.com>
-
- * dyn-string.c: Add libgcc exception to copyright notice.
-
-2002-03-26 H.J. Lu (hjl@gnu.org)
-
- * config.table: Support --with-build-subdir.
- * configure.in: Likewise.
- * configure: Rebuild.
-
-2002-03-18 Stuart Griffith <Stuart_Griffith@credence.com>
-
- * strtod.c (strtod): Increment 8 chars, not 7, when `infinity'
- seen.
-
-2002-03-12 Mark Mitchell <mark@codesourcery.com>
-
- * cp-demangle.c: Add libgcc exception to cp-demangle.c copyright
- notice.
-
-2002-03-11 Douglas B Rupp <rupp@gnat.com>
-
- * xatexit.c [VMS]: Include stdlib.h and unixlib.h.
-
-2002-03-06 Jim Blandy <jimb@redhat.com>
-
- * splay-tree.c (splay_tree_xmalloc_allocate,
- splay_tree_xmalloc_deallocate): Use K&R-style definitions, not
- prototyped definitions. Mark `data' arguments as unused.
-
-2002-03-06 Andrew Cagney <ac131313@redhat.com>
-
- * floatformat.c (floatformat_arm_ext_big): Delete definition.
-
-2002-03-04 Phil Edwards <pme@gcc.gnu.org>
-
- * configure.in: Add --enable-install-libiberty option.
- * Makefile.in (INSTALLED_HEADERS): New variable.
- (install_to_libdir): Possibly also copy headers.
- * configure: Regenerated.
-
-2002-03-04 Neil Booth <neil@daikokuya.demon.co.uk>
-
- * xmalloc.c (xmalloc_fail): Clarify error message further.
-
-2002-03-03 Neil Booth <neil@daikokuya.demon.co.uk>
-
- * xmalloc.c (xmalloc_fail): Clarify error message.
-
-2002-02-22 Jim Blandy <jimb@redhat.com>
-
- * splay-tree.c (splay_tree_xmalloc_allocate,
- splay_tree_xmalloc_deallocate): New functions.
- (splay_tree_new): Call splay_tree_new_with_allocator, passing the
- above functions and a dummy data pointer.
- (splay_tree_new_with_allocator): New function.
- (splay_tree_delete_helper, splay_tree_delete, splay_tree_insert,
- splay_tree_remove): Use the splay tree's allocation and
- deallocation functions.
-
-2002-02-19 Scott Snyder <snyder@fnal.gov>
-
- * testsuite/demangle-expected: Add test case for infinite loop in
- demangler.
- * cplus-dem.c (demangle_arm_hp_template): Stop trying to demangle
- if do_type() doesn't make any progress --- prevents an infinite
- loop.
-
-2002-02-18 Carlo Wood <carlo@gnu.org>
-
- PR c++/5390
- * cplus-dem.c (demangle_integral_value): Accept multi-digit
- numbers that do not start with an underscore; This is needed
- for integer template parameters. This doesn't break anything
- because multi-digit numbers are never followed by a digit.
- * testsuite/demangle-expected: Corrected all mangled test
- cases with multi-digit template parameters: g++ 2.95.x does
- not generate underscores around these parameters.
-
-2002-02-05 Jason Merrill <jason@redhat.com>
-
- * cplus-dem.c (flags): Add DMGL_VERBOSE
- (cplus_demangle_v3_p): Remove.
- (demangle_it): Add DMGL_TYPES to passed flags.
- * cp-demangle.c (cplus_demangle_v3_all): Remove.
- (cplus_demangle_v3_type): Remove.
- (cplus_demangle_v3): Add options parm.
-
-2002-02-02 H.J. Lu (hjl@gnu.org)
-
- * cp-demangle.c (cp_demangle_type): Do not protect with
- IN_LIBGCC2.
- (cplus_demangle_v3_all): New.
- (cplus_demangle_v3): Call cplus_demangle_v3_all.
- (cplus_demangle_v3_type): Call cplus_demangle_v3_all.
-
- * cplus-dem.c (cplus_demangle_v3_p): New function pointer.
- Initialized to cplus_demangle_v3.
- (cplus_demangle_with_style): Call cplus_demangle_v3_p instead
- of cplus_demangle_v3.
- (main): Set cplus_demangle_v3_p to cplus_demangle_v3_type for
- command line symbol.
-
- * testsuite/regress-demangle: Pass the mangled name at the
- command line.
-
-2002-02-01 H.J. Lu <hjl@gnu.org>
-
- * cp-demangle.c (cp_demangle_type): Call demangling_new with
- DMGL_GNU_V3.
-
-2002-01-31 Phil Edwards <pme@gcc.gnu.org>
-
- * cp-demangle.c: Revert yesterday's change.
-
-2002-01-31 Adam Megacz <adam@xwt.org>
-
- * gcc/libiberty/configure.in: Treat mingw the same as cywin
- wrt HAVE_SYS_ERRLIST.
-
-2002-01-30 Phil Edwards <pme@gcc.gnu.org>
-
- * cp-demangle.c (cp_demangle_type): Do not protect with IN_LIBGCC2.
- (cplus_demangle_v3): Mimic __cxa_demangle and fall back on
- cp_demangle_type.
- * testsuite/demangle-expected: New gnu-v3 test.
-
-2002-01-22 Momchil Velikov <velco@fadata.bg>
-
- * configure.in (variable detection): Use arrays of unspecified
- size instead of plain integers.
-
-2002-01-18 DJ Delorie <dj@redhat.com>
-
- * Makefile.in (TESTLIB): New. This library is for future
- testsuites.
- (CFILES, REQUIRED_OFILES, CONFIGURED_OFILES): Re-alphabetize,
- break down by letter.
- (REQUIRED_OFILES): List long-to-compile files first.
- (maint-deps): New, target for updating dependencies.
- (dependencies): Update.
- * maint-tool: Add dependency-generating option.
- * configure.in: Check for _doprnt even if we're not providing it.
- * configure: Regenerate.
-
- * _doprnt.c: Modifications to allow compiling on any platform.
- * copysign.c: Likewise.
- * putenv.c: Likewise.
- * setenv.c: Likewise.
- * vsprintf.c: Likewise.
-
-2002-01-15 Douglas B Rupp <rupp@gnat.com>
-
- * mkstemps.c (mkstemps): On VMS, open temp file with option
- that causes it to be deleted when closed.
-
-2002-01-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cp-demangle.c (long_options): Const-ify.
- * cplus-dem.c (long_options): Likewise.
-
- * cplus-dem.c (mystrstr): Delete. All callers changed to use
- strstr instead.
-
-2001-12-31 Ira Ruben <ira@apple.com>
-
- * aclocal.m4 (libiberty_AC_FUNC_STRNCMP): Use anon mmap as 2nd try.
- * configure: Regenerated.
-
-2001-12-24 Douglas B. Rupp <rupp@gnat.com>
-
- * configure.in (uintptr_t): Use AC_CHECK_TYPE.
- * configure: Regenerated.
-
-2001-12-12 Craig Rodrigues <rodrigc@gcc.gnu.org>
-
- PR other/2719
- * cplus-dem.c (consume_count): Treat negative count as an error.
- * testsuite/demangle-expected: Added testcase.
-
-Tue Dec 11 07:08:57 2001 Douglas B. Rupp <rupp@gnat.com>
-
- * configure.in: Hardcode that vfork works on VMS host.
- * configure: Regenerated.
-
-2001-12-06 Richard Henderson <rth@redhat.com>
-
- * cplus-dem.c (libiberty_demanglers): Add no_demangling case.
- (cplus_demangle): Support no_demangling.
-
-2001-11-27 Zack Weinberg <zack@codesourcery.com>
-
- * _doprnt.c: Moved here from gcc/doprint.c. Adjust to build
- in libiberty context. Fix typo in leading comment.
- * configure.in: Fix various AC_DEFINEs so autoheader works.
- If any of vprintf, vsprintf, vfprintf is missing from libc,
- then AC_REPLACE_FUNCS(_doprnt).
-
-2001-11-26 DJ Delorie <dj@redhat.com>
- Daniel Jacobowitz <drow@mvista.com>
-
- * Makefile.in (stamp-h): Depend on Makefile for proper
- serialization.
- (*-subdir): Depend on config.h for proper serialization.
-
-2001-11-26 DJ Delorie <dj@redhat.com>
-
- * configure.in: Check for alloca.h (for regex.c and putenv.c).
- * configure: Regenerate.
- * config.h: Add HAVE_ALLOCA_H.
-
-2001-11-16 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * regex.c: Check defined(__STDC__) || defined(ALMOST_STDC) ||
- defined(HAVE_STRINGIZE) to determine whether ISO CPP token pasting
- is available.
-
-Thu Nov 15 11:06:25 2001 Jeffrey A Law (law@cygnus.com)
-
- * config.in (HAVE_UINTPTR_T): Provide autoconf stub.
- * configure.in (HAVE_UINTPTR_T): Test for system defining
- uintptr_t and define HAVE_UINTPTR_T appropriately.
- * regex.c (uintptr_t): Do not provide a definition if the
- system provided one.
-
- * regex.c (PREFIX): Provide an alternate definition for
- non-ANSI/ISO compilers.
- (ARG_PREFIX): Likewise.
-
-2001-11-12 Jim Meyering <meyering@lucent.com>
-
- * obstack.c (_): Honor the setting of ENABLE_NLS. Otherwise,
- this code would end up calling gettext even in packages built
- with --disable-nls.
- * getopt.c (_): Likewise.
- * regex.c (_): Likewise.
-
-2001-11-03 Alan Modra <amodra@bigpond.net.au>
-
- * configure.in: Cope with missing makeinfo.
- * configure: Regenerate.
-
-2001-10-22 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * hex.c (hex_init): Provide empty stub.
-
- * hex.c (hex_init): Delete.
- (_hex_value): Const-ify and initialize at compile-time.
-
-2001-10-19 H.J. Lu <hjl@gnu.org>
-
- * Makefile.in ($(TARGETLIB)): Also generate pic/$(TARGETLIB) if
- necessary.
-
-2001-10-17 DJ Delorie <dj@redhat.com>
-
- * argv.c, asprintf.c, choose-temp.c, concat.c, cplus-dem.c,
- ffs.c, fnmatch.txh, getruntime.c, make-temp-file.c,
- mkstemps.c, pexecute.c, random.c, strsignal.c, vasprintf.c:
- Improve manual formatting.
- * functions.texi: Regenerate.
-
-2001-10-15 DJ Delorie <dj@redhat.com>
-
- * Makefile.in (TEXIFILES): Add fnmatch.txh.
- (maint-undoc): New.
- maint-tool: Add "undoc" tool.
- * alloca.c, argv.c, asprintf.c, choose-temp.c, concat.c,
- fdmatch.c, ffs.c, getruntime.c, insque.c, lbasename.c,
- make-temp-file.c, mkstemps.c, pexecute.c, random.c, spaces.c,
- strerror.s, strsignal.c, strtol.c, vasprintf.c: Add or update
- documentation.
- * fnmatch.txh: New.
- * functions.texi: Regenerate.
-
-2001-10-10 Joseph S. Myers <jsm28@cam.ac.uk>
-
- * bcmp.c, setenv.c: Use "nonzero" instead of "non-zero".
- * strtod.c: Use "ISO C" instead of "ANSI C".
- * functions.texi: Regenerate.
-
-2001-10-07 Joseph S. Myers <jsm28@cam.ac.uk>
-
- * alloca.c, clock.c, getcwd.c, getpagesize.c, getpwd.c, index.c,
- libiberty.texi, memchr.c, putenv.c, rindex.c, strchr.c, strdup.c,
- strerror.c, strrchr.c, strstr.c, strtod.c, tmpnam.c, vfork.c,
- xatexit.c, xmalloc.c, xstrerror.c: Improve manual formatting. Fix
- spelling. Give names to function arguments in documentation. Use
- (void) prototypes in documentation.
- * functions.texi: Regenerate.
-
-2001-10-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * argv.c (buildargv, tests, main): Const-ify.
- * cp-demangle.c (operator_code): Likewise.
- * cplus-dem.c (optable, libiberty_demanglers,
- cplus_demangle_set_style, cplus_demangle_name_to_style,
- print_demangler_list): Likewise.
- * hashtab.c (higher_prime_number): Likewise.
- * strcasecmp.c (charmap): Likewise.
- * strerror.c (error_info, strerror, main): Likewise.
- * strncasecmp.c (charmap): Likewise.
- * strsignal.c (signal_info): Likewise.
-
-2001-09-29 DJ Delorie <dj@redhat.com>
-
- * configure: Regenerate.
-
-2001-09-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * concat.c: Include stdlib.h.
-
-2001-09-27 Eli Zaretskii <eliz@is.elta.co.il>
-
- * libiberty.texi: (Top level): Add syncodeindex pg. Add
- @dircategory and @direntry directives. Add @finalout.
- (many nodes): Lose the next,prev,up pointers on the @nide line.
- (Using, Supplemental Functions, Replacement Functions): Fix
- markup.
- (Functions): Move around, to allow makeinfo to build the manual
- without next,prev,up pointers in thye node lines.
- (Licenses): Fix typos.
-
- * index.c, rindex.c, strchr.c, strerror.c, strrchr.c, strstr.c,
- strtol.c, xatexit.c, xexit.c, xmalloc.c: Fix spelling and markup.
- * functions.texi: Regenerate.
-
- * copying-lib.texi: Lose the next,prev,up pointers on the @node
- line.
-
-2001-09-27 DJ Delorie <dj@redhat.com>
-
- * configure.in: Don't use in-tree texinfo, because libiberty must
- be built before it. Check for makeinfo version 4 or higher.
- * functions.texi: Regenerate.
-
-2001-09-20 DJ Delorie <dj@redhat.com>
- Phil Edwards <pedwards@disaster.jaj.com>
-
- * configure.in (MAKEINFO, PERL): Detect these.
- (--enable-maintainer-mode): Add.
- * configure: Regenerate.
- * Makefile.in (MAKEINFO, PERL): Define.
- (libiberty.info, libiberty.dvi, libiberty.html): New.
- (CFILES): Add bsearch.c.
- (CONFIGURED_OFILES): New, list of objects configure might add.
- (maint-missing, maint-buildall): New, for maintainers only.
- (clean, mostlyclean): Add info/dvi/html files.
- * libiberty.texi, copying-lib.texi, obstacks.texi, functions.texi: New.
- * gather-docs: New, for maintainers.
- * maint-tool: New, for maintainers.
- * alloca.c, atexit.c, basename.c, bcmp.c, bcopy.c, bsearch.c,
- bzero.c, calloc.c, clock.c, configure.in, configure, getcwd.c,
- getpagesize.c, getpwd.c, index.c, memchr.c, memcmp.c, memcpy.c,
- memmove.c, memset.c, putenv.c, rename.c, rindex.c, setenv.c,
- sigsetmask.c, strcasecmp.c, strchr.c, strdup.c, strerror.c,
- strncasecmp.c, strncmp.c, strrchr.c, strstr.c, strtod.c, strtol.c,
- tmpnam.c, vfork.c, vprintf.c, waitpid.c, xatexit.c, xexit.c,
- xmalloc.c, xmemdup.c, xstrdup.c, xstrerror.c: Add or update
- documentation.
-
-2001-09-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * concat.c (reconcat): Fix for traditional C.
-
-2001-09-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * concat.c (reconcat): New function.
-
-2001-09-17 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * concat.c (vconcat_length, vconcat_copy, concat_length,
- concat_copy, concat_copy2): New functions.
- (concat): Use vconcat_length/vconcat_copy.
-
- * alloca.c (libiberty_optr, libiberty_nptr, libiberty_len):
- Define.
-
-2001-09-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * asprintf.c: Don't define USE_STDARG. Use VPARAMS, VA_OPEN,
- VA_FIXEDARG & VA_CLOSE.
-
- * vasprintf.c: Check HAVE_STRING_H when including string.h.
- (checkit): Delete redundant prototype. Add ATTRIBUTE_PRINTF_1.
- Use VA_OPEN, VA_FIXEDARG & VA_CLOSE. Free allocated string.
-
-2001-08-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * concat.c (concat): Use VPARAMS, VA_OPEN, VA_FIXEDARG & VA_CLOSE.
-
-2001-08-23 Ulrich Drepper <drepper@redhat.com>
-
- * regex.c (truncate_wchar): Use wcrtomb not wctomb.
-
-2001-08-23 Ulrich Drepper <drepper@redhat.com>
-
- * posix/regex.c [_LIBC] (convert_mbs_to_wcs): Use __mbrtowc
- instead of mbrtowc.
- [_LIBC]: Use __iswctype instead of iswctype, __wcslen instead of
- wcslen, and __wcscoll instead of wcscoll.
-
-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.
-
-2001-08-21 Richard Henderson <rth@redhat.com>
-
- * Makefile.in (fibheap.o): Depend on config.h.
- * fibheap.c: Tidy formatting. Use config.h.` Rearrange some
- functions for inlining.
-
-Tue Aug 21 12:35:04 2001 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Need to set HAVE_SYS_ERRLIST and HAVE_SYS_NERR whenever
- hosting on cygwin.
- * configure: Regenerate.
-
-2001-08-20 Andrew Cagney <ac131313@redhat.com>
-
- * floatformat.c (floatformat_m88110_ext): Remove #ifdef
- HARRIS_FLOAT_FORMAT.
- (floatformat_ia64_spill_little, floatformat_ia64_quad_little)
- (floatformat_ia64_spill_big, floatformat_ia64_quad_big)
- (floatformat_arm_ext_big, floatformat_arm_ext_littlebyte_bigword)
- (floatformat_m88110_harris_ext): New float formats.
-
-2001-08-20 Daniel Berlin <dan@cgsoftware.com>
-
- * fibheap.c: New file. Fibonacci heap.
-
- * Makefile.in (CFILES): Add fibheap.c.
- (REQUIRED_OFILES): Add fibheap.o.
- (fibheap.o): Add dependencies for fibheap.o.
-
-2001-08-17 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Always set HAVE_SYS_ERRLIST when targetting cygwin.
- * configure: Regenerate.
-
-2001-08-16 Richard Henderson <rth@redhat.com>
-
- * hashtab.c (htab_hash_string): New.
-
-2001-08-13 Andrew Cagney <ac131313@redhat.com>
-
- * floatformat.c (floatformat_ieee_double_littlebyte_bigword): Fix
- name.
-
-2001-08-12 Isamu Hasegawa <isamu@yamato.ibm.com>
-
- * regex.c (wcs_regex_compile): Use appropriate string
- to compare with collating element.
- Fix the padding for the alignment.
-
-2001-08-10 Andrew Cagney <ac131313@redhat.com>
-
- * lbasename.c (lbasename): Change function definition to return a
- const char pointer.
-
-2001-08-07 Jason Merrill <jason_merrill@redhat.com>
-
- * cp-demangle.c (demangle_special_name): "GR" -> "reference temporary
- for".
-
-2001-08-03 Richard Henderson <rth@redhat.com>
-
- * Makefile.in (concat.o): Depend on config.h.
-
-2001-07-30 Andreas Jaeger <aj@suse.de>
-
- * concat.c: Include "config.h".
-
-2001-07-30 Andreas Jaeger <aj@suse.de>
-
- * regex.c: Declare wcs functions only if compiling with
- MBS_SUPPORT.
- Don't use #elif for traditional C.
-
-2001-07-23 Ulrich Drepper <drepper@redhat.com>
-
- * regex.c: Revamp memory allocation for WCHAR functions to
- not use too much stack.
-
-2001-07-30 Andreas Jaeger <aj@suse.de>
-
- * regex.c: Declare wcs functions only if compiling with
- MBS_SUPPORT.
- Don't use #elif for traditional C.
-
-2001-07-25 Daniel Jacobowitz <drow@mvista.com>
-
- * Makefile.in (regex.o): Add dependency on config.h.
-
-2001-07-18 Andreas Schwab <schwab@suse.de>
-
- * regex.c (WORDCHAR_P) [WCHAR]: Also return true for the
- underscore character.
-
-2001-07-18 Ulrich Drepper <drepper@redhat.com>
-
- * regex.c: Limit string length printed in debug messages to 100
- chars.
-
-2001-07-18 Andreas Jaeger <aj@suse.de>
-
- * regex.c: Place under LGPL version 2.1.
-
-2001-07-10 Jeff Johnston <jjohnstn@redhat.com>
-
- * Makefile.in: Add support for regex code.
- * regex.c: New file.
-
-2001-07-05 Mark Klein <mklein@dis.com>
-
- * Makefile.in: Add ffs.c dependency.
- * configure.in: Add ffs.c.
- * ffs.c: New file.
-
-2001-06-18 Richard Henderson <rth@redhat.com>
-
- * concat.c: Include <sys/types.h>.
-
-2001-06-11 Loren J. Rittle <ljrittle@acm.org>
-
- bootstrap/3106
- * strerror.c (sys_nerr): Hide the OS header version.
- * strsignal.c (sys_nsig): Likewise.
-
-2001-06-10 Richard Henderson <rth@redhat.com>
-
- * concat.c: Include string.h. Fix int vs size_t usage.
- Simplify the iteration loops. Use memcpy.
-
-2001-05-16 Matt Kraai <kraai@alumni.carnegiemellon.edu>
-
- * partition.c: Fix misspelling of `implementation'.
-
-2001-05-09 Thiemo Seufer <seufer@csv.ica.uni-stuttgart.de>
-
- * md5.c (md5_init_ctx): Declare constants as unsigned.
- (md5_process_block): Likewise.
-
-2001-05-07 Zack Weinberg <zackw@stanford.edu>
-
- * cp-demangle.c (demangle_v3_with_details,
- is_gnu_v3_mangled_ctor, is_gnu_v3_mangled_dtor): Use K+R style
- function definition.
- * ternary.c: Use K+R style function definitions. Use PTR, not
- void *. Make arguments constant where possible.
-
-2001-05-07 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.h (splay_tree_max): New function.
- (splay_tree_min): Likewise.
-
-2001-04-15 Daniel Berlin <dan@cgsoftware.com>
-
- * ternary.c: New file - Ternary search tree implementation.
-
- * Makefile.in: Add ternary.o, and ternary.c dependencies.
-
-2001-04-03 Zack Weinberg <zackw@stanford.edu>
-
- * make-temp-file.c (try): Inline.
-
-2001-02-28 Richard Henderson <rth@redhat.com>
-
- * Makefile.in (make-temp-file.o): Depend on config.h.
-
-2001-03-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * memchr.c (memchr): Adjust condition to avoid infinite loop.
-
-2001-03-23 Jakub Jelinek <jakub@redhat.com>
-
- * cp-demangle.c (demangle_discriminator): `_0' is discriminator #1,
- `_' not followed by a digit is invalid.
-
-2001-03-22 Jim Blandy <jimb@redhat.com>
-
- * cp-demangle.c (string_list_delete): Use dyn_string_delete
- instead of free, to free the contents as well as the string
- structure.
-
-2001-03-21 Zack Weinberg <zackw@stanford.edu>
-
- * make-temp-file.c: Always default DIR_SEPARATOR to '/'.
- Don't default P_tmpdir to anything. Try /var/tmp before
- /usr/tmp.
-
-2001-03-20 Zack Weinberg <zackw@stanford.edu>
-
- * choose-temp.c: Split off make_temp_file, and the code
- duplicated between it and choose_temp_base, into...
- * make-temp-file.c: ... here; new file.
-
- * Makefile.in (CFILES): Add make-temp-file.c.
- (REQUIRED_OFILES): Add make-temp-file.o.
-
-2001-03-20 Jim Blandy <jimb@redhat.com>
-
- * cp-demangle.c (struct demangling_def): New fields:
- is_constructor and is_destructor.
- (demangling_new): Initialize them.
- (demangle_ctor_dtor_name): Set them, if we detect a constructor
- or destructor.
- (demangle_v3_with_details, is_gnu_v3_mangled_ctor,
- is_gnu_v3_mangled_dtor): New functions.
-
-2001-03-20 Jason Merrill <jason@redhat.com>
-
- * cplus-dem.c (main): Skip initial $.
-
-2001-03-15 Michael Meissner <meissner@redhat.com>
-
- * hashtab.c (higher_prime_number): Silence warning that 4294967291
- might be a signed integer under pre-ISO C systems.
-
-2001-03-10 Neil Booth <neil@daikokuya.demon.co.uk>
- John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * libiberty/lbasename.c: New file.
- * libiberty/Makefile.in: Update for lbasename.
-
-2001-03-06 Zack Weinberg <zackw@stanford.edu>
-
- * aclocal.m4 (libiberty_AC_FUNC_C_ALLOCA): New.
- * configure.in: Replace all alloca logic with a simple use of
- the above new macro.
- * config.table: Kill *-*-beos* entry.
- * config/mh-beos: Delete.
- * configure, config.in: Regenerate.
-
- * Makefile.in (ALLOCA, HFILES): Kill.
- (REQUIRED_OFILES): Add alloca.o.
- (alloca.o): Depend on libiberty.h.
- (argv.o): Don't depend on alloca-conf.h.
- * alloca-conf.h: Delete.
- * alloca.c: Include libiberty.h. Kill all #ifdef emacs
- blocks. Provide the C alloca unconditionally. Use PTR where
- appropriate. Make i00afunc static.
- * argv.c: Don't include alloca-conf.h.
-
-2001-03-04 John David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * cplus-dem.c (main): Cast enum style to int.
-
-2001-02-16 Loren J. Rittle <ljrittle@acm.org>
-
- * cplus-dem.c (main): Initialize style.
-
-2001-02-02 Phil Edwards <pme@sources.redhat.com>
-
- * COPYING.LIB: Update to LGPL 2.1 from the FSF.
-
-2001-01-31 Bryce McKinlay <bryce@albatross.co.nz>
-
- Add support for Java demangling under the v3 ABI:
- * cp-demangle.c (NAMESPACE_SEPARATOR): New define.
- (struct demangling_def): Add `style' field.
- (demangling_new): New parameter `style'. Set it in demangling_t.
- (demangle_prefix): Use NAMESPACE_SEPARATOR.
- (demangle_type_ptr): Don't emit pointer symbol if doing Java output.
- (cp_demangle): New parameter `style'. Pass it to demangling_new().
- (main): Call cp_demangle with extra parameter.
- (java_demangle_v3): New function.
- (java_builtin_type_names): New. Table of primitive type names used
- for Java demangling.
- (demangle_builtin_type): Look up in java_builtin_type_names if doing
- Java output.
- * cplus-dem.c (cplus_demangle): Use java_demangle_v3 to do Java
- demangling.
- (long_options): Remove obsolete `java' option.
- (main): Remove explicit handling of `java' option. Instead, pass style
- parameter in cplus_demangle flags as gdb does.
- * testsuite/demangle.expected: Add some Java test cases.
-
-2000-12-29 DJ Delorie <dj@redhat.com>
-
- * fnmatch.c: Make the note about the origins of this file more
- accurate, at least until we can sync with glibc.
- * getopt.c: Ditto.
- * getopt1.c: Ditto.
- * md5.c: Ditto.
- * obstack.c: Ditto.
-
-2000-12-26 Michael Sokolov <msokolov@ivan.Harhan.ORG>
-
- * bsearch.c: New file.
- * configure.in (funcs): Add bsearch.
- (AC_CHECK_FUNCS): Likewise.
- * configure, config.in: Regenerate.
-
-2000-12-13 Michael Sokolov <msokolov@ivan.Harhan.ORG>
-
- * safe-ctype.c: #include "ansidecl.h".
- * strtod.c: Likewise.
-
-2000-12-13 Michael Sokolov <msokolov@ivan.Harhan.ORG>
-
- * strtoul.c: Include safe-ctype.h, not ctype.h.
-
-2000-12-07 Zack Weinberg <zack@wolery.stanford.edu>
-
- * safe-ctype.c: New file.
- * Makefile.in (CFILES): Add safe-ctype.c.
- (REQUIRED_OFILES): Add safe-ctype.o.
-
- * argv.c: Define ISBLANK and use it, not isspace.
- * basename.c, cplus-dem.c, fnmatch.c, pexecute.c, strtod.c,
- strtol.c, strtoul.c: Include safe-ctype.h, not ctype.h. Use
- uppercase ctype macros. Don't test ISUPPER(c)/ISLOWER(c)
- before calling TOLOWER(c)/TOUPPER(c).
-
-2000-12-07 Mike Stump <mrs@wrs.com>
-
- * Makefile.in (distclean): When cleaning, remove testsuite.
-
-2000-12-05 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c (cplus_demangle_v3): Check that it's a v3 mangled
- name before allocating the dyn_string.
-
-2000-12-04 Jason Merrill <jason@redhat.com>
-
- * cp-demangle.c: s/new_abi/v3/.
- * cplus-dem.c: Likewise.
- (current_demangling_style): Now auto_demangling.
- (cplus_demangle): Try v3 demangling if AUTO_DEMANGLING.
- (main): Use standard symbol chars for auto_demangling.
-
-2000-11-26 Mark Mitchell <mark@codesourcery.com>
-
- * hashtab.c (higher_prime_number): Use a table, rather than a
- seive, to find the next prime.
-
-2000-11-22 H.J. Lu <hjl@gnu.org>
-
- * cplus-dem.c (main): Handle gnat_demangling.
-
-2000-11-22 Zack Weinberg <zack@wolery.stanford.edu>
-
- * aclocal.m4 (LIB_AC_PROG_CC): Moved here from configure.in.
- (AC_DEFINE_NOAUTOHEADER): New - work around bug in autoheader.
- * configure.in: Call AC_C_INLINE and AC_C_CONST. Use three
- argument form of AC_DEFINE in dummy definitions block. Use
- AC_DEFINE_NOAUTOHEADER for real definitions of things defined
- in dummy block. Preload cache variables instead of bypassing
- tests, where possible.
- * acconfig.h: Removed.
-
- * xmalloc.c (xmalloc_failed): New function, does error
- reporting on failed allocation.
- (xmalloc, xcalloc, xrealloc): Use it.
-
-2000-11-21 Hans-Peter Nilsson <hp@bitrange.com>
-
- * cplus-dem.c (cplus_demangle): Fix formatting.
- (grow_vect): Ditto.
- (ada_demangle): Ditto.
- (internal_cplus_demangle): Ditto.
- (mop_up): Ditto.
-
-2000-11-21 H.J. Lu <hjl@gnu.org>
-
- * cplus-dem.c (main): Handle java_demangling.
-
-2000-11-19 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cplus-dem.c (grow_vect): Prototype.
- (ada_demangle): Cast the arg of ctype macros to unsigned char.
-
-2000-11-15 Hans-Peter Nilsson <hp@bitrange.com>
-
- * cplus-dem.c (ada_demangle): Add back ATTRIBUTE_UNUSED for
- parameter `option'.
-
-2000-11-15 Kenneth Block <kenneth.block@compaq.com>
-
- * cplus-dem.c: Eliminate use of DEFUN, it is obsolete and cannot
- be used in GCC.
-
-2000-11-15 Kenneth Block <kenneth.block@compaq.com>
-
- * cplus-dem.c: Add gnat demangler. Add java to demangle style
- list.
-
-2000-11-04 Hans-Peter Nilsson <hp@bitrange.com>
-
- * hashtab.c (htab_expand): Change to return int. Use calloc or
- xcalloc depending on htab->return_allocation_failure. Return zero
- if calloc fails.
- (htab_create): Update comment to cover memory allocation.
- (htab_try_create): New.
- (htab_find_slot_with_hash): Return NULL if htab_expand fails.
- Update comment to cover this.
-
-2000-11-03 Hans-Peter Nilsson <hp@bitrange.com>
-
- * hashtab.c: Change void * to PTR where necessary.
- (htab_create, htab_expand): Correct formatting of comment before
- function.
-
-2000-10-22 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (string_list_def): Add caret_position and comments.
- (result_caret_pos): New macro.
- (result_append_string): Rename to...
- (result_add_string): ... this, and insert at caret position.
- Rename throughout.
- (result_append): Rename to...
- (result_add): ... this, and insert at caret position. Rename
- throughout.
- (result_append_char): Rename to...
- (result_add_char): ... this, and insert at caret position. Rename
- throughout.
- (result_append_space): Remove.
- (string_list_new): Initialize caret position.
- (result_add_separated_char): Use caret position.
- (result_get_caret): New funtion.
- (result_set_caret): Likewise.
- (result_shift_caret): Likewise.
- (result_previous_char_is_space): Likewise.
- (substitution_start): Use caret position.
- (substitution_add): Likewise.
- (demangling_new): Initialize caret position.
- (demangle_encoding): Use caret position.
- (demanglin_nested_name): Put CV qualifiers after name.
- (demangle_type_ptr): Use switch statement. Handle pointers to
- arrays. Don't use result_append_space. Use caret position.
- (demangle_type): Emit CV qualifiers after underlying type. Adjust
- call to demangle_array_type.
- (demangle_array_type): Add parameter to handle pointers to arrays.
-
-2000-10-01 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.c (splay_tree_insert): Fix formatting.
-
-2000-09-16 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.c (splay_tree_predecessor): Fix typo in comment.
-
-2000-09-14 Michael Sokolov <msokolov@ivan.Harhan.ORG>
-
- * splay-tree.c: #include <stdio.h>.
-
-2000-09-14 Hans-Peter Nilsson <hp@axis.com>
-
- * testsuite/demangle-expected: Add two tests for anonymous
- namespaces.
- * cplus-dem.c (gnu_special): Handle anonymous namespaces.
-
-2000-09-10 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.c (splay_tree_predecessor): New function.
- (splay_tree_successor): Likewise.
-
-2000-09-10 Hans-Peter Nilsson <hp@axis.com>
-
- * testsuite/demangle-expected: Add four tests for type_info
- mangling.
- * cplus-dem.c (gnu_special): Use do_type, not demangle_fund_type,
- for a non-template non-qualified type_info function or node.
-
-2000-09-08 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c: Fix copyright banner.
-
-2000-09-07 Michael Sokolov <msokolov@ivan.Harhan.ORG>
-
- * md5.c: #include "ansidecl.h".
-
-2000-09-06 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (status_allocation_failed): Rearrange whitespace.
- (demangle_type): Handle substitution candidates correctly in the
- face of special substitutions.
-
-2000-09-05 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (demangle_encoding): Rename variable.
- (demangle_name): Rename parameter. Handle return type
- suppression.
- (demangle_nested_name): Rename parameter.
- (demangle_prefix): Likewise. Change return type suppression.
- (demangle_unqualified_name): Add parameter. Flag constructors and
- conversion operators.
- (demangle_special_name): Fix comment.
- (demangle_type): Rename variable.
- (demangle_bare_function_type): Check for missing return type and
- parameter.
- (demangle_class_enum_type): Rename parameter.
- (demangle_discriminator): Fix misspelling in comment.
-
-2000-08-31 DJ Delorie <dj@redhat.com>
-
- * configure.in (Cygwin): special case cygwin only when we're
- building cygwin, not when we're hosting cygwin.
-
-2000-09-04 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (demangle_template_arg): Eat an `E' after an
- <expression>.
-
-2000-09-04 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (demangle_type_ptr): Increment position past
- pointer and reference characters.
-
-2000-09-04 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (demangle_nv_offset): New function.
- (demangle_v_offset): Likewise.
- (demangle_call_offset): Likewise.
- (demangle_special_name): Update thunk demangling to comply with
- ABI changes.
-
-2000-09-03 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (ANONYMOUS_NAMESPACE_PREFIX): New macro.
- (substitution_def): Remove template_parm_number.
- (NOT_TEMPLATE_PARM): Remove.
- (result_insert_string): New macro.
- (result_insert): Likewise.
- (result_insert_char): Likewise.
- (substitution_add): Remove last parameter. Don't store template
- parm number.
- (BFT_NO_RETURN_TYPE): Define as NULL.
- (demangle_encoding): Adjust call to demangle_bare_function_type.
- (demangle_name): Adjust substitution. Adjust call to
- substitution_add.
- (demangle_prefix): Adjust call to substitution_add.
- (demangle_identifier): Handle anonymous namespaces.
- (demangle_operator_name): Change demangling of vendor-extended
- operator to match ABI changes.
- (demangle_type_ptr): Change parameters. Make recursive. Handle
- substitutions here.
- (demangle_type): Adjust calls to demangle_template_param,
- substitution_add, and demangle_type_ptr. Fix substitution of
- templated types.
- (demangle_function_type): Change parameter to a pointer.
- (demangle_bare_function_type): Likewise. Adjust insertion point.
- (demangle_template_param): Remove last parameter.
- (demangle_expr_primary): Remove unused variable. Adjust call to
- demangle_template_param.
- (is_mangled_char): Accept `$' and `.'.
- * cplus-dem.c (gnu_new_abi_symbol_characters): Add '$' and '.'.
- * dyn-string.c (dyn_string_insert_char): New function.
-
-2000-08-31 Hans-Peter Nilsson <hp@axis.com>
-
- * testsuite/demangle-expected: Add nine tests for
- underscore-after-number followed by five tests for name-signature
- delimiter.
-
-2000-08-28 Richard Henderson <rth@cygnus.com>
-
- * Makefile.in (md5.o): Depend on config.h.
-
-2000-08-28 Jason Merrill <jason@redhat.com>
-
- * Makefile.in (REQUIRED_OFILES): Add md5.o.
- (CFILES): Add md5.c.
- * md5.c: New file.
-
-2000-08-27 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (demangle_name): Initialize template_p in local
- name case. Don't re-add substitutions as candidates.
- (demangle_nested_name): Use <unqualified-name>.
- (demangle_prefix): Likewise. Don't add template names as
- substitution candidates twice, or re-add a substitution or the
- last prefix component.
- (demangle_local_name): Adjust output format.
-
-2000-08-25 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (result_add_separated_char): Change parameter to
- int.
- (substitution_add): Don't check for duplicates. Check if
- previously allocated size is zero.
- (demangle_name): Remove duplicate check for std substitution.
- Clear template flag appropriately.
- (demangle_prefix): Remove argument to demangle_substitution.
- Don't check that template flag is already set.
- (demangle_operator_name): Add pt operator.
- (demangle_type): Don't treat r as built-in type. Remove argument
- to demangle_substitution. Fix substitution candidate mechanics.
- Handle <template-template-parm>s. Improve comments.
- (demangle_template_param): Don't handle template arg lists here.
- (demangle_substitution): Remove parameter.
- (print_usage): Remove extra fprintf option.
-
-2000-08-24 Greg McGary <greg@mcgary.org>
-
- * libiberty/random.c (end_ptr): Revert previous change.
-
-2000-08-24 Greg McGary <greg@mcgary.org>
-
- * libiberty/cplus-dem.c (cplus_demangle_opname, cplus_mangle_opname,
- demangle_expression, demangle_function_name): Use ARRAY_SIZE.
- * libiberty/random.c (end_ptr): Likewise.
-
-2000-08-23 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (result_close_template_list): Remove function.
- (result_add_separated_char): New function.
- (result_open_template_list): New macro.
- (result_close_template_list): Likewise.
- (demangle_prefix): Don't set template_p if the
- prefix ends with a ctor name.
- (demangle_type_ptr): Remove duplicate RETURN_IF_ERROR.
- (demangle_type): Check for template args after substitution.
- (demangle_template_args): Use result_open_template_list.
-
-2000-08-02 Zack Weinberg <zack@wolery.cumb.org>
-
- * pexecute.c: Don't use vfork. Initialize 'pid' before retry loop.
-
-2000-07-26 Dave Pitts <dpitts@cozx.com>
-
- * config/mh-openedition.h: Added -DLE370 definition.
-
-2000-07-26 Mark Elbrecht <snowball3@bigfoot.com>
-
- * pexecute.c (pexecute) [__MSDOS__]: Change __GO32__ to
- __DJGPP__. Use P_WAIT instead of constant in the spawnv* call.
- Cast program to 'char *' in errmsg_arg assignment.
- (PWAIT_ERROR): Define.
- (pwait): Use PWAIT_ERROR. Adjust DJGPP's status code to conform
- to DJGPP's WIF* macros.
-
-2000-07-27 RodneyBrown <RodneyBrown@pmsc.com>
- Jeff Law <law@cygnus.com>
-
- * getcwd.c: Include string.h, stdlib.h for prototypes
-
- * Makefile.in (rename.o, waitpid.o): Depend on config.h
- * rename.c: Include config.h, unistd.h
- * waitpid.c: Include config.h, sys/wait.h
-
-2000-07-24 Hans-Peter Nilsson <hp@axis.com>
-
- * cplus-dem.c (work_stuff_copy_to_from): New.
- (delete_non_B_K_work_stuff): New.
- (delete_work_stuff): New.
- (mop_up): Break out work_stuff partly destruction to
- delete_non_B_K_work_stuff.
- (iterate_demangle_function): New.
- (demangle_prefix): Call iterate_demangle_function instead of
- demangle_function_name. Leave handling of name-signature
- __-delimiters to iterate_demangle_function.
- (demangle_integral_value): Strip an optional
- following underscore cautiously. Handle negative numbers.
-
-2000-07-24 Daniel Berlin <dberlin@redhat.com>
-
- * cplus-dem.c (demangle_signature): Change if (GNU_DEMANGLING) to
- if (AUTO_DEMANGLING || GNU_DEMANGLING)
-
-2000-07-21 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (demangle_ctor_dtor_name): Remove not-in-charge
- allocating ctor mangling.
- (demangle_array_type): Handle empty and non-constant array length.
-
-2000-07-23 Michael Sokolov <msokolov@ivan.Harhan.ORG>
- Jeff Law <law@cygnus.com>
-
- * configure.in (AC_CHECK_HEADERS): Add time.h.
- (AC_HEADER_TIME): Add check.
- * configure, config.in: Regenerate.
- * getruntime.c: Portably #include <sys/time.h> and/or <time.h>.
-
- * configure.in (AC_CHECK_HEADERS): Add limits.h.
- * configure, config.in: Regenerate.
- * sort.c: Portably #include <limits.h> and/or <sys/param.h>.
- * strtol.c, strtoul.c: #include "config.h". Portably #include
- <limits.h> and/or <sys/param.h>.
- * Makefile.in (strtol.o, strtoul.o): Update dependencies.
-
- * aclocal.m4 (libiberty_AC_DECLARE_ERRNO): New macro.
- * configure.in (libiberty_AC_DECLARE_ERRNO): Add check.
- * configure, config.in: Regenerate.
- * pexecute.c, strtol.c, strtoul.c: Declare errno if necessary.
-
- * cp-demangle.c, mkstemps.c: #include <sys/types.h>.
-
-2000-07-21 Mike Stump <mrs@wrs.com>
-
- * Makefile.in (xexit.o): Add dependency for config.h in xexit.c.
- * (vasprintf.o): Add dependency for config.h in vasprintf.c.
-
-2000-07-21 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cp-demangle.c (cp_demangle_type): Wrap in IN_LIBGCC2.
-
- * setenv.c (setenv): Initialize variable `ep'.
-
- * sigsetmask.c (abort): Prototype.
-
- * vasprintf.c: Include config.h. Check ANSI_PROTOTYPES, not
- __STDC__ for stdarg.h include.
- (int_vasprintf): Prototype.
- (checkit): Prototype. Use VPARAMS/ANSI_PROTOTYPES/VA_START in
- definition. Cast `global_total_width' in comparison.
- (main): Prototype. Return a value.
-
- * vfork.c (fork): Prototype.
-
- * xexit.c: Include config.h.
-
-2000-07-20 Joseph S. Myers <jsm28@cam.ac.uk>
-
- * cplus-dem.c (demangle_fund_type): Make 'dec' an unsigned int,
- and print it with %u.
-
-2000-07-17 Hans-Peter Nilsson <hp@axis.com>
-
- * testsuite/regress-demangle (failed test): Show result and
- expected output.
-
-2000-07-07 Andrew Haley <aph@cygnus.com>
-
- * cplus-dem.c (main): fflush() after emitting last char before
- waiting for input.
-
-2000-06-28 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (demangle_encoding): Accept no substitutions.
- (demangle_name): Handle <substitution> followed by
- <unqualified-template-name>.
- (demangle_type): Follow special substitutions with
- <class-enum-type>
- (demangle_subtitution): Set template_p for special substitutions.
- (main): Fix typos.
-
-2000-06-27 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (demangle_special_name): Swap base and derived
- class when demangling construction vtables.
-
-2000-06-21 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c: Don't include ctype.h.
- (IS_DIGIT): New macro.
- (IS_ALPHA): Likewise. Use IS_DIGIT and IS_ALPHA throughout
- instead of isdigit and isalpanum.
- (demangling_def): Make name and next const pointers.
- (STATUS_ALLOCATION_FAILED): New status code.
- (dyn_string_append_space): Handle failure in
- dyn_string_append_char.
- (int_to_dyn_string): Likewise. Change return value to status_t.
- (string_list_new): Handle failure of dyn_string_init.
- (result_close_template_list): Change return type to status_t.
- Handle failure in dyn_string_append.
- (result_push): Change return value to status_t. Handle failure in
- string_list_new. Handle failure of result_push throughout.
- (substitution_add): Change return value to status_t. Handle
- dyn_string failures. Handle failure of substitution_add
- throughout.
- (template_arg_list_new): Return NULL on allocation failure.
- (result_append_string): Return STATUS_ALLOCATION_FAILED on error.
- Handle error result throughout.
- (result_append): Likewise.
- (result_append_char): Likewise.
- (result_append_space): Likewise.
- (demangling_new): Make argument a const pointer. Handle
- allocation failures.
- (demangle_template_args): Handle failure in template_arg_list_new
- and result_close_template_list.
- (demangle_discriminator): Return if int_to_dyn_string fails.
- (cp_demangle): Likewise.
- (cp_demangle_type): New function.
- (cplus_demangle_new_abi): Don't call dyn_string_delete. Abort on
- memory allocation failure.
- (main): Likewise.
- * dyn-string.c (RETURN_ON_ALLOCATION_FAILURE): Define if
- IN_LIBGCC2.
- (dyn_string_init): Change return value to int. Handle
- RETURN_ON_ALLOCATION_FAILURE case.
- (dyn_string_new): Handle RETURN_ON_ALLOCATION_FAILURE case.
- (dyn_string_release): Delete the dyn_string.
- (dyn_string_resize): Handle RETURN_ON_ALLOCATION_FAILURE case.
- (dyn_string_copy): Change return type to int.
- (dyn_string_copy_cstr): Likewise.
- (dyn_string_prepend): Likewise.
- (dyn_string_prepend_cstr): Likewise.
- (dyn_string_insert): Likewise.
- (dyn_string_insert_cstr): Likewise.
- (dyn_string_append): Likewise.
- (dyn_string_append_cstr): Likewise.
- (dyn_string_append_char): Likewise.
- (dyn_string_substring): Likewise.
-
-2000-06-09 Zack Weinberg <zack@wolery.cumb.org>
-
- * cp-demangle.c (demangle_operator_name): Add spaces before
- names beginning with a letter: delete, delete[], new, new[],
- sizeof.
- (demangle_special_name): Handle TF <type> and TJ <type>.
-
-Thu Jun 8 18:52:24 2000 Philippe De Muyter <phdm@macqel.be>
-
- * cp-demangle.c (template_arg_list_new): Revert previous PARAMS patch.
-
-Thu Jun 8 09:25:54 2000 Philippe De Muyter <phdm@macqel.be>
-
- * cp-demangle.c (stdio.h): File included unconditionaly.
- (template_arg_list_new): Parameter list is PARAMS ((void)), not ().
- * dyn-string.c (stdio.h): File included.
- * partition.c (partition_print): No `&' needed to take the address of
- a function.
-
-2000-06-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * configure.in (ac_libiberty_warn_cflags): Add -pedantic.
-
- * choose-temp.c (try, choose_temp_base, make_temp_file): Constify.
-
- * cp-demangle.c (demangle_char): Change parameter from char to int.
- (demangle_expression, demangle_expr_primary): Remove extra
- semi-colon in prototype.
-
- * dyn-string.c (dyn_string_append_char): Change parameter from
- char to int.
-
- * memcmp.c (memcmp): Constify.
-
- * mkstemps.c (gcc_uint64_t): Mark GNUC `long long' case with
- __extension__.
-
- * partition.c (elem_compare): Prototype. Don't cast away
- const-ness.
-
- * setenv.c (setenv): Use braces to avoid ambiguous `else'.
-
-2000-06-07 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Makefile.in (cp-demangle.o): Depend on $(INCDIR)/demangle.h.
-
- * cp-demangle.c: Include demangle.h.
- (template_arg_list_new): DeANSIfy.
- (cp_demangle): Make static and add prototype.
- (operator_code, operators): Constify.
- (demangle_operator_name): Likewise for variables `p1', `p2' and `p'.
-
-2000-06-05 Alex Samuel <samuel@codesourcery.com>
-
- * cp-demangle.c (demangle_prefix): Cast argument to isdigit to
- unsigned char.
- (demangle_unqualified_name): Likewise.
- (demangle_number_literally): Likewise.
- (demangle_type): Likewise.
- (demangle_substitution): Likewise.
- (is_mangled_char): Likewise, for isalnum.
-
-2000-06-04 Alex Samuel <samuel@codesourcery.com>
-
- * Makefile.in (CFILES): Add cp-demangle.c and dyn-string.c.
- (REQUIRED_OFILES): Add cp-demangle.o and dyn-string.o.
- (cp-demangle.o): New dependency.
- (dyn-string.o): Likewise.
-
- * dyn-string.c: Move here from gcc/dyn-string.c. Add new functions.
-
- * cplus-dem.c (libiberty_demanglers): Add initializer for new-ABI
- demangler.
- (cplus_demangle): Call cplus_demangle_new_abi if in new-ABI
- demangling mode.
- (gnu_new_abi_symbol_characters): New function.
- (main): Use gnu_new_abi_symbol_characters. * cp-demangle.c: New
- file.
- * cp-demangle.c: New file.
-
-Tue May 30 16:45:25 2000 Andrew Cagney <cagney@b1.cygnus.com>
-
- * floatformat.c: Add name to each floatformat field.
-
-Tue May 30 15:07:52 2000 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (objalloc.o): Depend on config.h
-
-2000-05-29 Zack Weinberg <zack@wolery.cumb.org>
-
- * hashtab.c, partition.c, sort.c, xmemdup.c: Include string.h
- if HAVE_STRING_H.
- * pexecute.c, xexit.c: Include stdlib.h if HAVE_STDLIB_H.
- * objalloc.c: Include config.h. Include stdlib.h and don't
- declare malloc or free if HAVE_STDLIB_H.
- * strerror.c, strsignal.c: Include stdlib.h if HAVE_STDLIB_H,
- else declare malloc without prototype. Include string.h if
- HAVE_STRING_H, else declare memset without prototype. Don't
- include stddef.h.
-
-2000-05-23 Mike Stump <mrs@wrs.com>
-
- * Makefile.in (xmalloc.o): Add dependency for config.h, fixes make
- -j3.
-
-2000-05-18 J. David Anglin <dave@hiauly1.hia.nrc.ca>
-
- * xmalloc.c: Include config.h for HAVE_SBRK definition.
-
-2000-05-16 Horst von Brand <vonbrand@sleipnir.valparaiso.cl>
-
- * hashtab.c (hash_pointer): Delete low-order bits which are
- probably zero, also eliminate a warning on alpha.
-
-2000-05-15 David Edelsohn <edelsohn@gnu.org>
-
- * Makefile.in: Change "pic" to depend on $(PICFLAG), not
- on $(enable_shared).
-
-2000-05-10 Jakub Jelinek <jakub@redhat.com>
-
- * config.table: Use mh-sparcpic for sparc*-*-*.
-
-2000-05-08 Nick Clifton <nickc@cygnus.com>
-
- * Makefile.in (CFILES): Add strncmp.c.
- (NEEDED): Add strncmp.
-
-2000-05-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cplus-dem.c (cplus_demangle_opname, demangle_function_name):
- Cast the arguments to `islower' to `unsigned char'.
- (print_demangler_list): Prototype.
-
-Thu May 4 17:14:41 2000 Philippe De Muyter <phdm@macqel.be>
-
- * sort.c (UCHAR_MAX): Provide fallback definition.
-
-2000-04-29 Alexandre Oliva <aoliva@cygnus.com>
-
- * Makefile.in (maintainer-clean-subdir): Fix handling of empty
- SUBDIRS.
-
-2000-04-28 Kenneth Block <block@zk3.dec.com>
- Jason Merrill <jason@casey.cygnus.com>
-
- * cplus-dem.c (libiberty_demanglers): New table for demangle styles.
- (cplus_demangle_set_style): New function for setting style.
- (cplus_demangle_name_to_style): New function to translate name.
-
-2000-04-27 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * aclocal.m4: New file with new test libiberty_AC_FUNC_STRNCMP.
-
- * configure.in (AC_CHECK_HEADERS): Add sys/mman.h fcntl.h.
- (libiberty_AC_FUNC_STRNCMP): Invoke.
-
- * strncmp.c: New file.
-
-Thu Apr 27 16:58:43 MET DST 2000 Jan Hubicka <jh@suse.cz>
-
- * hashtab.c (htab_expand): Add prototype.
- (find_empty_slot_for_expand): Likewise.
-
-2000-04-24 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * hashtab.c (hash_pointer, eq_pointer): Make definition static to
- match prototype.
- (htab_expand): Cast the return value of xcalloc.
-
-2000-04-24 Mark Mitchell <mark@codesourcery.com>
-
- * hashtab.c (hash_pointer): New function.
- (eq_pointer): Likewise.
- (htab_hash_pointer): New variable.
- (htab_eq_pointer): Likewise.
-
-2000-04-23 Mark Mitchell <mark@codesourcery.com>
-
- * sort.c (sort_pointers): Fix endianness bugs.
-
- * sort.c: New file.
- * Makefile.in (CFILES): Add sort.c
- (REQUIRED_OFILES): Add sort.o.
- (sort.o): New target.
-
-2000-04-21 Michael Sokolov <msokolov@ivan.Harhan.ORG>
-
- * Makefile.in (*-subdir): Revamp slightly to avoid losing on
- 4.3BSD systems.
-
-Tue Apr 18 16:23:31 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
-
- * hashtab.c: Various minor cleanups.
- (htab_find_slot_with_hash): INSERT is now enum insert_option.
- (htab_find_slot): Likewise.
-
-2000-04-16 Dave Pitts <dpitts@cozx.com>
-
- * cplus-dem.c (cplus_demangle_opname): Changed to use islower.
-
-2000-04-05 Richard Henderson <rth@cygnus.com>
-
- * splay-tree.c (splay_tree_remove): New.
-
-2000-03-30 Mark Mitchell <mark@codesourcery.com>
-
- * hashtab.c (find_empty_slot_for_expand): Use hashval_t for hash
- codes.
- (htab_find_with_hash): Likewise.
- (htab_find_slot_with_hash): Likewise.
-
-2000-03-29 Zack Weinberg <zack@wolery.cumb.org>
-
- * hashtab.c (htab_find_with_hash): Avoid calculating hash2
- unless it will be used. Rearrange loop for better
- optimization.
- (higher_prime_number): Add static prototype.
-
-Thu Mar 16 01:33:58 2000 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (partition.o): Depend on config.h
-
-2000-03-14 Bernd Schmidt <bernds@cygnus.co.uk>
-
- * hashtab.c (find_empty_slot_for_expand): New function.
- (htab_expand): Use it instead of htab_find_slot.
- (htab_find_with_hash): Renamed from htab_find; now accepts extra
- argument HASH.
- (htab_find_slot_with_hash): Likewise for htab_find_slot.
- (htab_find): New wrapper function.
- (htab_find_slot): Likewise.
- (htab_traverse): Pass slot, not entry, to called function.
-
-2000-03-09 Alex Samuel <samuel@codesourcery.com>
-
- * Makefile.in (CFILES): Add partition.c.
- (REQUIRED_OFILES): Add partition.o.
- (partition.o): New rule.
- * partition.c: New file.
-
-2000-03-09 Zack Weinberg <zack@wolery.cumb.org>
-
- * hashtab.c (htab_create): Set del_f.
- (htab_delete, htab_empty, htab_remove_elt, htab_clear_slot):
- Use it.
-
-2000-03-08 Zack Weinberg <zack@wolery.cumb.org>
-
- * hashtab.c: Remove debugging variables (all_searches,
- all_collisions, all_expansions). Delete
- all_hash_table_collisions.
- (create_hash_table, delete_hash_table, empty_hash_table,
- find_hash_table_entry, remove_element_from_hash_table_entry,
- clear_hash_table_slot, traverse_hash_table, hash_table_size,
- hash_table_elements_number, hash_table_collisions): Rename to:
- htab_create, htab_delete, htab_empty, htab_find_slot,
- htab_remove_elt, htab_clear_slot, htab_traverse, htab_size,
- htab_elements, htab_collisions.
- (htab_find): New function, handles common case where you don't
- plan to add or delete an entry.
- (htab_expand): Don't create a whole new table, just a new
- entry vector.
- (htab_find_slot): Simplify logic.
-
-1999-08-03 Ian Lance Taylor <ian@zembu.com>
-
- * floatformat.c: Add casts to avoid signed/unsigned warnings.
- * pexecute.c: Add ATTRIBUTE_UNUSED as needed on Unix.
-
- * Makefile.in (install_to_libdir): Change $(TARGETLIB).n to
- $(TARGETLIB)n so it works on MSDOS.
- (install_to_tooldir): Likewise.
-
-1999-07-21 Ian Lance Taylor <ian@zembu.com>
-
- From Mark Elbrecht:
- * makefile.dos: Remove; obsolete.
- * configure.bat: Remove; obsolete.
-
-1999-07-11 Ian Lance Taylor <ian@zembu.com>
-
- * splay-tree.c (splay_tree_insert): Add initialization to avoid
- warning.
-
-2000-01-04 Mumit Khan <khan@xraylith.wisc.edu>
-
- * pexecute.c: Conditionally include string.h.
- (fix_argv): Handle embedded whitespace in args for Mingw32.
-
-2000-01-04 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * configure.in (ac_libiberty_warn_cflags): Turn on warnings if
- we're using gcc.
-
- * Makefile.in (COMPILE.c): Add @ac_libiberty_warn_cflags@
-
-1999-12-27 Geoff Keating <geoffk@cygnus.com>
-
- * vasprintf.c (int_vasprintf): Don't re-read the format character
- as this mishandles strings like '%%s'.
-
-1999-12-05 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.c (splay_tree_new): Use struct splay_tree_node_s
- rather than struct splay_tree_node.
- (splay_tree_insert): Use struct splay_tree_s rather than struct
- splay_tree.
-
-Sun Nov 28 00:59:39 1999 Philippe De Muyter <phdm@macqel.be>
-
- * hashtab.c (sys/types.h): File included.
-
-1999-11-22 Jason Merrill <jason@casey.cygnus.com>
-
- * strtoul.c, strtol.c, random.c: Remove advertising clause from
- BSD license, pursuant with
-
- ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
-
-Wed Nov 10 09:42:39 1999 Jeffrey A Law (law@cygnus.com)
-
- * hashtab.c: Include stdio.h.
-
-Mon Nov 8 09:23:41 1999 Jeffrey A Law (law@cygnus.com)
-
- * hashtab.c (traverse_hash_table): Protect prototype with PARAMS.
-
-Tue Nov 2 03:23:13 1999 Philippe De Muyter <phdm@macqel.be>
-
- * xstrdup (sys/types.h): Include this file.
-
-1999-10-28 Nathan Sidwell <nathan@acm.org>
-
- * Makefile.in (SUBDIRS): New macro.
- (mostlyclean, clean, distclean, maintainer-clean): Adjust to
- avoid multiple subdirectory cleaning.
- (*-subdir): Use SUBDIRS.
-
-1999-10-25 Jim Kingdon <http://developer.redhat.com/>
-
- * cplus-dem.c: Move declarations of standard_symbol_characters and
- hp_symbol_characters inside #ifdef MAIN to avoid compiler
- warnings.
-
-1999-10-23 08:51 -0700 Zack Weinberg <zack@bitmover.com>
-
- * hashtab.c (find_hash_table_entry): When returning a
- DELETED_ENTRY slot, change it to EMPTY_ENTRY first.
- (clear_hash_table_slot): New function which deletes an entry
- by its position in the table, not its value.
- (traverse_hash_table): New function which calls a hook
- function for every live entry in the table.
-
-1999-10-19 Mark Mitchell <mark@codesourcery.com>
-
- * cplus-dem.c (INTBUF_SIZE): New macro.
- (string_append_template_idx): New function.
- (demangle_expression): Likewise.
- (demangle_integral_value): Use it.
- (demangle_real_value): New function, split out from ...
- (demangle_template_value_parm): ... here. Use
- string_append_template_idx. Use demangle_real_value.
- (demangle_template): Use string_append_template_idx.
- (demangle_qualified): Use consume_count_with_underscores.
- (get_count): Tweak formatting.
- (do_type): Use string_append_template_idx.
-
-1999-10-18 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * calloc.c: Add a public domain notice.
-
-Mon Oct 18 02:30:47 1999 Philippe De Muyter <phdm@macqel.be>
-
- * setenv.c (sys/types.h, stdio.h): Include those files unconditionaly.
-
-Fri Oct 15 01:47:51 1999 Vladimir Makarov <vmakarov@loony.cygnus.com>
-
- * Makefile.in (CFILES): Add hashtab.c
- (REQUIRED_OFILES): Add hashtab.o
- (hashtab.o): Add dependencies.
- * hashtab.c: New file
-
-Wed Oct 13 01:16:47 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * basename.c (DIR_SEPARATOR): New macro.
- (DIR_SEPARATOR_2): Likewise.
- (HAVE_DOS_BASED_FILESYSTEM): Likewise.
- (IS_DIR_SEPARATOR): Likewise.
- (main): Handle MSDOS style pathname.
-
-1999-10-11 Mark Mitchell <mark@codesourcery.com>
-
- * cplus-dem.c (do_type): Handle pointer to member types whose
- enclosing classes have namespace scope.
-
-Sun Oct 10 01:23:50 1999 Marc Espie <espie@cvs.openbsd.org>
-
- * config.table: Provide a backup shell for executing move-if-change.
-
-1999-10-02 Mark Mitchell <mark@codesourcery.com>
-
- * xmalloc.c (xmalloc): Fix spelling error.
- (xcalloc, xrealloc): Likewise.
-
-1999-10-02 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cplus-dem.c (fancy_abort, demangle_integral_value,
- demangle_arm_hp_template, recursively_demangle,
- standard_symbol_characters, hp_symbol_characters, main): Add prototype.
- (program_name, program_version, fatal): Constify a char*.
- (usage, fatal): Mark with ATTRIBUTE_NORETURN.
- (main): Call return, not exit.
-
-1999-09-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * choose-temp.c: Remove obsolete comment about gcc.
- (make_temp_file): Constify a char*.
-
-Wed Sep 8 20:03:28 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * xmemdup.c: Include sys/types.h.
-
-1999-09-07 Jeff Garzik <jgarzik@pobox.com>
-
- * xmemdup.c: New xmemdup function.
- * Makefile.in, makefile.vms, vmsbuild.com: Use xmemdup.[co].
-
-Tue Sep 7 23:32:18 1999 Linas Vepstas <linas@linas.org>
-
- * config.table: Add openedition target.
- * config/mh-openedition: New file.
-
-Thu Sep 2 01:36:12 1999 Marc Espie <espie@cvs.openbsd.org>
-
- * pexecute.c (pexecute): Fill in temp_base when needed.
-
-1999-08-31 Richard Henderson <rth@cygnus.com>
-
- * getpwd.c: Check HAVE_GETCWD before defining it away.
-
-1999-08-30 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * Makefile.in (CFILES): Add calloc.c and getpwd.c.
- (REQUIRED_OFILES): Add getpwd.o.
- (getpwd.o): Add target.
-
- * configure.in (AC_PREREQ): Bump to 2.13.
- (AC_CHECK_HEADERS): Add check for <sys/stat.h>.
-
- * getpwd.c: New file, moved here from gcc.
-
-1999-08-25 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cplus-dem.c (gnu_special): Cast a `size_t' to `long' when
- comparing against a signed quantity.
- (arm_special): Likewise.
- (demangle_fund_type): Likewise.
- (do_hpacc_template_const_value): Mark parameter `work' with
- ATTRIBUTE_UNUSED.
- (main): Constify variable `valid_symbols'.
-
-Tue Aug 24 02:50:45 1999 Philippe De Muyter <phdm@macqel.be>
-
- * strtoul.c (strtoul): Add parentheses around && within ||.
-
-Fri Aug 6 23:32:29 1999 Daniel Jacobowitz <drow@drow.them.org>
-
- * Makefile.in (FLAGS_TO_PASS): Include prefix, exec_prefix,
- libdir, libsubdir and tooldir.
-
-1999-08-01 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.c (splay_tree_insert): Return the new node.
-
-1999-07-14 Richard Henderson <rth@cygnus.com>
-
- * argv.c: Include stdlib.h and string.h instead of
- prototyping directly.
- * choose-temp.c: Conditionally include string.h.
-
-1999-07-12 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (NEEDED): Add bcmp, bcopy, bzero.
-
-1999-07-11 Ian Lance Taylor <ian@zembu.com>
-
- * splay-tree.c (splay_tree_insert): Add initialization to avoid
- warning.
-
-1999-07-07 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (needed-list): Only include stuff we actually need
- for libstdc++.
-
-1999-06-21 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
-
- * configure.in (checkfuncs): Add gettimeofday.
- * config.in, configure: Regenerated.
-
-Mon Jun 21 05:56:01 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * configure.in (*-*-uwin*): UWIN has sys_{errlist,nerr} even if
- the test fails.
- * configure: Regenerate.
-
-1999-06-10 Mike Stump <mrs@wrs.com>
-
- * Makefile.in (setenv.o): Add config.h dep for setenv.o to fix
- parallel builds.
-
-1999-05-28 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * putenv.c: Include ansidecl.h to define `const'.
- * setenv.c: Likewise.
-
-Wed May 26 03:58:20 1999 "Melissa O'Neill" <oneill@cs.sfu.ca>
-
- * Makefile.in (CFILES): Add putenv.c and setenv.c.
- * configure.in (funcs): Add putenv and setenv.
- (AC_CHECK_FUNCS): Check for putenv and setenv.
- * configure: Rebuilt.
- * putenv.c setenv.c: New files.
-
- * getcwd.c (getcwd): If pathname is NULL, then obtain SIZE
- bytes of space using malloc.
-
-Mon May 17 01:42:34 1999 Stu Grossman <grossman@babylon-5.cygnus.com>
-
- * cplus-dem.c (demangle_fund_type (near 'I' case)): Don't advance
- the *mangled pointer beyond the end of the string. Clean up code to
- match prevailing coding style.
-
-1999-05-13 Michael Hayes <m.hayes@elec.canterbury.ac.nz>
-
- * tmpnam.c (L_tmpnam): Fix typo.
-
-Thu May 13 01:14:46 1999 Marc Espie <espie@cvs.openbsd.org>
-
- * cplus-dem.c (standard_symbol_characters): Renamed from
- standard_symbol_alphabet. No longer modify TABLE.
- (hp_symbol_characters): Renamed from hp_symbol_alphabet. No longer
- modify TABLE.
- (main): Corresponding changes. Use strchr to determine if a
- character is valid.
-
-1999-05-11 Jim Blandy <jimb@zwingli.cygnus.com>
-
- * cplus-dem.c (main): Use table lookup to distinguish identifier
- characters from non-identifier characters.
- (standard_symbol_alphabet, hp_symbol_alphabet): New functions.
-
-Thu May 6 20:34:42 1999 Fred Fish <fnf@be.com>
-
- * configure.in (sys/resource.h): Add to AC_CHECK_HEADERS list.
- * getruntime.c: Only attempt to include sys/resource.h and
- use getrusage if both HAVE_GETRUSAGE and HAVE_SYS_RESOURCE_H
- are defined.
-
-Mon Apr 26 01:36:06 1999 Donn Terry (donn@interix.com)
-
- * configure.in (alloca detection): Handle alloca directly for interix.
- * configure: Rebuilt.
-
-Sun Apr 25 01:18:21 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * choose-temp.c (DIR_SEPARATOR): Use '\\' only for native windows32.
-
-1999-04-20 Jim Blandy <jimb@zwingli.cygnus.com>
-
- Fix from Dale Hawkins:
- * cplus-dem.c (mop_up): Set typevec_size to zero, so it'll be
- reallocated properly if we use it again.
-
- * cplus-dem.c (demangle_fund_type): Check for buffer overrun. Be
- stricter about syntax. Always null-terminate string.
-
-Thu Apr 15 23:00:55 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * configure.in (checkfuncs): Check for sbrk.
- * config.in: Rebuilt.
- * configure: Likewise.
- * xmalloc.c: Use HAVE_SBRK instead of the host specific definitions.
-
-1999-04-12 Jim Blandy <jimb@zwingli.cygnus.com>
-
- Fix from Marcus Daniels:
- * cplus-dem.c (demangle_fund_type): Don't run off the end of the
- identifier looking for another underscore.
-
-Sun Apr 11 23:20:59 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * pexecute.c: Change all references to __UWIN__ to _UWIN.
- * xmalloc.c: Likewise.
- (xcalloc): UWIN has sbrk.
- (xrealloc): Fix guard macro.
-
-1999-04-11 Richard Henderson <rth@cygnus.com>
-
- * alloca-conf.h (alloca) [C_ALLOCA]: Don't use Gcc builtin
- or <alloca.h>.
- * clock.c (GNU_HZ): New definition.
- (clock): Use it.
- * getruntime.c: Likewise.
-
- * config.table: Use mh-beos.
- * config/mh-beos: New file.
-
-1999-04-11 Mark Mitchell <mark@codesourcery.com>
-
- * cplus-dem.c (demangle_template_value_parm): Handle
- pointers-to-members.
- (do_type): Handle template parameters as qualifiers.
-
-1999-04-01 Jim Blandy <jimb@zwingli.cygnus.com>
-
- * cplus-dem.c: Attempt to handle overflows in counts with some
- semblance of grace.
- (consume_count): Detect overflows. Return -1 to indicate errors,
- instead of zero.
- (demangle_template_value_parm, demangle_template): Handle change
- to consume_count's return convention.
-
-1999-04-05 Tom Tromey <tromey@cygnus.com>
-
- * testsuite/regress-demangle: New file.
- * testsuite/demangle-expected: New file.
-
- * Makefile.in (all, check, installcheck, info, install-info,
- clean-info, dvi, install, etags, tags, mostlyclean, clean,
- distclean, maintainer-clean, realclean): Depend on corresponding
- `-subdir' target.
- (all-subdir check-subdir installcheck-subdir info-subdir
- install-info-subdir clean-info-subdir dvi-subdir
- install-info-subdir etags-subdir mostlyclean-subdir clean-subdir
- distclean-subdir maintainer-clean-subdir): New target.
- * testsuite/Makefile.in: New file.
- * configure: Rebuilt.
- * configure.in: Create testsuite/Makefile.
-
-1999-04-02 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.h (splay_tree_compare_pointers): Define.
-
-1999-03-30 Mark Mitchell <mark@codesourcery.com>
-
- * splay-tree.c (splay_tree_compare_ints): Define.
-
-1999-03-30 Tom Tromey <tromey@cygnus.com>
-
- * cplus-dem.c (consume_count): If `count' wraps, return 0 and
- don't advance input pointer.
- (demangle_class_name): If consume_count didn't find a count, do
- nothing. Don't bother with `strlen' sanity check; consume_count
- does it for us.
-
-1999-03-16 Stan Shebs <shebs@andros.cygnus.com>
-
- From Art Haas <ahaas@neosoft.com>:
- * cplus-dem.c (demangle_prefix): Don't grab all the '__' strings
- when doing arm or hp style.
- (demangle_nested_args): Decr forgetting_types field when done.
-
-Thu Mar 11 01:22:58 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * pexecute.c (__CYGWIN32__): Rename to
- (__CYGWIN__): this.
- * xmalloc.c: Likewise.
-
- Changes to support i386-pc-uwin.
- * configure.in (*-*-uwin*): Workaround for vfork bug.
- * configure: Regenerate.
- * pexecute.c (pexecute): Be like standard Unix.
- (pwait): Likewise.
- * xmalloc.c (first_break): Define.
- (xmalloc_set_program_name): Use.
- (xmalloc): Use.
-
-Thu Mar 11 01:07:55 1999 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
-
- * config.table: Cleanup and add mh-*pic handling for alpha, arm, powerpc
-
-Sun Feb 28 22:30:44 1999 Geoffrey Noer <noer@cygnus.com>
-
- * config.table: Check cygwin*, not cygwin32*.
-
-Tue Feb 9 16:39:01 1999 Dave Brolley <brolley@cygnus.com>
-
- * Makefile.in: Change mkstemp -> mkstemps.
-
-Tue Feb 9 01:12:27 1999 Marc Espie <Marc.Espie@liafa.jussieu.fr>
-
- * Makefile.in (REQUIRED_OFILES): remove mkstemp.o
- * configure.in (funcs): Check for and conditionally add mkstemps to
- the list of functions libiberty will provide.
- * configure: Rebuilt.
-
-Wed Feb 3 00:01:15 1999 Mumit Khan <khan@xraylith.wisc.edu>
-
- * clock.c (HZ): Define in terms of (ISO C) CLOCKS_PER_SEC on
- platforms that don't have HZ.
- * getruntime.c (HZ): Likewise.
-
-Sat Jan 30 13:28:04 1999 Richard Henderson <rth@cygnus.com>
-
- * Makefile.in (xstrdup.o): Depend on config.h.
-
-Wed Jan 13 07:26:44 1999 H.J. Lu (hjl@gnu.org)
-
- * cplus-dem.c (mop_up): Set work->previous_argument to NULL after
- freeing it.
-
-Wed Jan 13 14:16:36 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * xstrdup.c (xstrdup): Switch from strcpy to memcpy for speed.
-
-Tue Jan 5 15:58:29 1999 Elena Zannoni <ezannoni@kwikemart.cygnus.com>
-
- * Makefile.in (CFILES): fix typo, splay-tree.c instead of
- splay-tree.o.
-
-1999-01-04 Jason Molenda (jsm@bugshack.cygnus.com)
-
- * configure.in: Require autoconf 2.12.1 or higher.
-
-1998-12-30 Michael Meissner <meissner@cygnus.com>
-
- * random.c (NULL): Don't redefine NULL if it is already defined.
-
-Tue Dec 22 09:43:35 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * argv.c (buildargv): Cast the result of alloca in assignment.
-
- * choose-temp.c: Include stdlib.h.
-
- * cplus-dem.c (demangle_arm_pt): Remove unused prototype.
- (snarf_numeric_literal): Constify first parameter.
- (code_for_qualifier): Avoid a gcc extension, make the parameter an
- int, not a char.
- (demangle_qualifier): Likewise.
- (demangle_signature): Cast the argument of a ctype function to
- unsigned char.
- (arm_pt): Add parens around assignment used as truth value.
- (demangle_arm_hp_template): Constify variable `args'.
- (do_hpacc_template_const_value): Cast the argument of a ctype
- function to unsigned char.
- (do_hpacc_template_literal): Remove unused variable `i'.
- (snarf_numeric_literal): Constify parameter `args'.
- Cast the argument of a ctype function to unsigned char.
-
- * floatformat.c (floatformat_to_double): Add explicit braces to
- avoid ambiguous `else'.
-
- * fnmatch.c (fnmatch): Change type of variables `c', `c1',
- `cstart' and `cend' to unsigned char. Cast the argument of macro
- `FOLD', which uses ctype functions, to unsigned char.
-
- * objalloc.c (free): Add prototype.
-
-Sun Dec 20 16:03:46 1998 Hans-Peter Nilsson <hp@axis.se>
-
- * Makefile.in (CFILES): Fix typo: splay-tree.c, not splay-tree.o
-
-Fri Dec 18 17:50:18 1998 David Taylor <taylor@texas.cygnus.com>
-
- * cplus-dem.c (demangle_arm_pt): remove declaration -- function
- doesn't exist.
- (do_hpacc_template_literal): remove unused variable `i'.
-
-Fri Dec 18 16:11:43 EST 1998 Andrew MacLeod <amacleod@cygnus.com>
-
- * cplus-dem.c (demangle_fund_type): Process CV and u codes before
- bumping the pointer we read from. Also prepend these codes,
- as we do in other places.
-
-1998-12-18 Nick Clifton <nickc@cygnus.com>
-
- * cplus-dem.c (demangle_arm_hp_template): Make variable 'args' be
- 'const char *' in order to match its usage when calling siblings.
- (snarf_numeric_literal): Make first arg 'const char **' in order
- to match usage.
-
-Mon Dec 14 09:55:50 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * choose-temp.c: Don't check IN_GCC anymore.
-
- * floatformat.c (floatformat_from_double): Use `const', not `CONST'.
- * memchr.c (memchr): Likewise.
- * memcpy.c (memcpy): Likewise.
- * memmove.c (memmove): Likewise.
-
- * mkstemp.c: Don't check IN_GCC anymore.
- * pexecute.c: Likewise.
- * splay-tree.c: Likewise.
-
- * strchr.c (strchr): Use `const', not `CONST'.
- * strrchr.c (strrchr): Likewise.
- * strtol.c (strtol): Likewise.
- * strtoul.c (strtoul): Likewise.
-
-Fri Dec 4 13:51:04 1998 David Taylor <taylor@texas.cygnus.com>
- Elena Zannoni <ezannoni@cygnus.com>
- Stan Shebs <shebs@cygnus.com>
- Edith Epstein <eepstein@cygnus.com>
- Andres MacLeod <amacleod@cygnus.com>
- Satish Pai <pai@apollo.hp.com>
-
- * HP aCC demangling support.
- * cplus-dem.c
- (main): Remove default to HP style demangling, set to EDG
- demangling correctly when -edg specified; set the demangling style
- when user specifies 'edg'. Set strip_underscore to
- prepends_underscore, if not HPUXHPPA. Set
- current_demangling_style to hp_demangling if HPUXHPPA. Set
- current demangling style correctly if the switch is hp. Read
- label correctly also in the HP style case.
- (work_stuff): add temp_start field; add field for volatile member
- function.
- (arm_pt): handle ARM_DEMANGLING and EDG_DEMANGLING styles; HP
- style for this case is the same as ARM.
- (demangle_args): handle EDG_DEMANGLING style; support HP style.
- (demangle_arm_hp_template): new function. (It was
- demangle_arm_pt.); check and set value of temp_start field in
- multiple places. Also, when ceching for end of template args,
- check to see if at end of static member of template class.
- (demangle_class): new local variable : save_class_name_end Don't
- include template args in string defining class.
- (demangle_class_name): use demangel_arm_hp_template.
- (demangle_function_name): handle case where demangling style is
- HP_DEMANGLING and currently point at an 'X' in the mangled name.
- Handle EDG_DEMANGLING style. Handle constructor and destructor
- ops for HP style.
- (demangle_prefix): handle EDG_DEMANGLING and ARM_DEMANGLING
- styles. global destructor and constructor for HP style are same
- as for ARM style. Same for local variables.
- (demangle_qualified): handle EDG_DEMANGLING style.
- (demangle_signature): add case for volatile member function. For
- cases '1' - '9' : initialize the temp_start field to -1 and handle
- the EDG_DEMANGLING style. for case 'F' : handle EDG_DEMANGLING
- and AUTO_DEMANGLING styles. If expecting a function and managed
- to demangle the funct args, then handle the LUCID_DEMANGLING,
- ARM_DEMANGLING, and EDG_DEMANGLING styles. Add case for local
- class name after "Lnnn_ in HP style case. HP style too needs to
- forget types. _nnn is OK for HP style, so don't report failure.
- (do_hpacc_template_const_value): new function. Handle template's
- value param for HP/aCC.
- (do_hpacc_template_literal): new function. Handle a template's
- literal parameter for HP aCC.
- (recursively_demangle): new function
- (snarf_numeric_literal): new function.
- (usage): add 'edg' to the list of demangling styles; add hp switch
- to message.
-
-Sat Nov 28 17:25:22 1998 Christopher Faylor <cgf@cygnus.com>
-
- * pexecute.c: Remove obsolete ifdefed cygwin code.
-
-Fri Nov 27 13:26:06 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * choose-temp.c: Always include libiberty.h. Avoid redundancies.
- * cplus-dem.c: Likewise. Conform to libiberty.h.
- * pexecute.c: Likewise.
- * splay-tree.c: Likewise.
-
-1998-11-25 Mike Stump <mrs@wrs.com>
-
- * Makefile.in (splay-tree.o): Add config.h dependency.
-
-Mon Nov 23 16:59:49 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * configure.in: Use AC_PREREQ(2.12.1).
-
-1998-11-16 Benjamin Kosnik <bkoz@haight.constant.com>
-
- * cplus-dem.c (demangle_fund_type): Add demangling for C9x types.
-
-Thu Nov 19 22:15:50 1998 Jeffrey A Law (law@cygnus.com)
-
- * mpw.c (mpw_access): Add missing parens.
-
-Thu Nov 19 12:59:21 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * configure.in: Call AC_HEADER_SYS_WAIT.
-
- * pexecute.c: Include sys/wait.h when !IN_GCC.
-
-Thu Nov 19 14:38:20 1998 Geoffrey Noer <noer@cygnus.com>
-
- * pexecute.c: revert back to checking old Cygwin
- preprocessor symbol until some time has passed.
-
-Wed Nov 18 08:52:26 1998 Christopher Faylor <cgf@cygnus.com>
-
- * pexecute.c: Reorganize WIN32 case to accomodate Cygwin
- since it will now support similar constructs.
-
-Fri Nov 13 19:18:05 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * configure.in: Check for calloc.
-
- * calloc.c: New file.
-
- * xmalloc.c (xcalloc): New function.
-
-Fri Nov 13 08:51:46 EST 1998 Andrew MacLeod <amacleod@cygnus.com>
-
- *cplus-dem.c (demangle_prefix): Use the last "__"
- in the mangled name when looking for the signature. This allows
- template names to begin with "__".
-
-1998-11-08 Mark Mitchell <mark@markmitchell.com>
-
- * cplus-dem.c (type_kind_t): Add tk_reference.
- (demangle_template_value_parm): Handle it.
- (do_type): Use it for references, instead of tk_pointer.
-
- * cplus-dem.c (demangle_template_value_parm): Use cplus_demangle,
- not internal_cplus_demangle.
-
-Sat Nov 7 16:02:10 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * choose-temp.c: Don't include gansidecl.h.
- * mkstemp.c: Likewise.
- * pexecute.c: Likewise.
-
-Mon Nov 2 15:05:33 1998 Geoffrey Noer <noer@cygnus.com>
-
- * configure.in: detect cygwin* instead of cygwin32*
- * configure: regenerate
-
-Mon Nov 2 10:22:01 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * pexecute.c: Check HAVE_CONFIG_H, not IN_GCC, when determining
- whether to include config.h. Possibly include unistd.h in the
- !IN_GCC case. Define VFORK_STRING as a printable function call
- for error messages (either "vfork" or "fork".) If HAVE_VFORK_H is
- defined, include vfork.h. If VMS is defined, define vfork()
- appropriately. Remove vfork check on USG, we're using autoconf.
- (pexecute): Set `errmsg_fmt' to VFORK_STRING instead of checking
- locally what string to use.
-
-1998-10-26 Mark Mitchell <mark@markmitchell.com>
-
- * splay-tree.c: Tweak include directives to make sure declarations of
- xmalloc and free are available.
-
-1998-10-25 Mark Mitchell <mark@markmitchell.com>
-
- * cplus-dem.c (gnu_special): Fix handling of virtual tables in
- anonymous namespaces.
-
-1998-10-23 Mark Mitchell <mark@markmitchell.com>
-
- * cplus-dem.c (work_stuff): Replace const_type and volatile_type
- with type_quals.
- (TYPE_UNQUALIFIED): New macro.
- (TYPE_QUAL_CONST): Likewise.
- (TYPE_QUAL_VOLATILE): Likewise.
- (TYPE_QUAL_RESTRICT): Likewise.
- (code_for_qualifier): New function.
- (qualifier_string): Likewise.
- (demangle_qualifier): Likewise.
- (internal_cplus_demangle): Use them.
- (demangle_signature): Likewise.
- (demangle_template_value_parm): Likewise.
- (do_type): Likewise.
- (demangle_fund_type)): Likewise.
-
-Thu Oct 22 19:58:43 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * splay-tree.c (splay_tree_foreach_helper): Make definition static
- to match prototype.
-
-1998-10-21 Mark Mitchell <mark@markmitchell.com>
-
- * splay-tree.c: New file.
- * Makefile.in (CFILES): Add it.
- (REQUIRED_OFILES): Likewise.
- (splay-tree.o): Add dependencies.
-
-Tue Oct 20 12:29:02 1998 Andreas Schwab <schwab@issan.cs.uni-dortmund.de>
-
- * cplus-dem.c (demangle_qualified): Fix off-by-one when checking
- range of 'K' index.
-
-Thu Oct 15 18:51:12 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * choose-temp.c: Prototype mkstemps() when IN_GCC.
-
- * cplus-dem.c (consume_count): Cast argument of ctype macro to
- `unsigned char'.
- (cplus_demangle_opname): Cast the result of `strlen' to (int) when
- comparing against one.
- (cplus_mangle_opname): Likewise.
- (demangle_integral_value): Cast argument of ctype macro to
- `unsigned char'.
- (demangle_template_value_parm): Likewise.
- (demangle_template): Initialize variable `bindex'. Cast the
- result of `strlen' to (int) when comparing against one. Remove
- unused variable `start_of_value_parm'.
- (demangle_class_name): Cast the result of `strlen' to (int) when
- comparing against one.
- (demangle_prefix): Cast argument of ctype macro to `unsigned char'.
- (gnu_special): Likewise. Cast the result of `strlen' to (int)
- when comparing against one.
- (demangle_qualified): Cast argument of ctype macro to `unsigned char'.
- (get_count): Likewise.
- (do_type): Likewise. Cast the result of `strlen' to (int) when
- comparing against one.
- (demangle_fund_type): Cast argument of ctype macro to `unsigned char'.
- (demangle_function_name): Cast the result of `strlen' to (int)
- when comparing against one.
-
- * mkstemp.c (mkstemps): Cast variable `len' to (int) when
- comparing against one.
-
-Tue Oct 13 23:51:51 1998 Jeffrey A Law (law@cygnus.com)
-
- * mkstemp.c: Check HAVE_SYS_TIME_H before including sys/time.h
- * configure.in (AC_CHECK_HEADERS): Check for sys/time.h too.
- * config.in, configure: Rebuilt.
-
- * getopt.c: Check HAVE_STRINGS_H before including strings.h.
- * configure.in (AC_CHECK_HEADERS): Check for strings.h too.
- * config.in, configure: Rebuilt.
-
-Mon Oct 12 19:15:59 1998 Geoffrey Noer <noer@cygnus.com>
-
- * configure.in: in comment, call AC_EXEEXT instead of AM_EXEEXT
-
-Sun Oct 11 17:36:06 1998 Michael Tiemann <tiemann@holodeck.cygnus.com>
-
- * Makefile.in (cplus-dem.o, obstack.o): Depend upon config.h.
-
-Thu Oct 8 23:42:08 1998 Jeffrey A Law (law@cygnus.com)
-
- * Merge egcs & devo libiberty.
-
-1998-09-08 Martin von Löwis <loewis@informatik.hu-berlin.de>
-
- * cplus-dem.c (demangle_arm_pt): Demangle anonymous namespaces.
-
-Mon Sep 7 23:29:01 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * mkstemp.c: Include config.h even when not IN_GCC. Wrap header
- inclusions inside HAVE_*_H macros. Include ansidecl.h when not
- IN_GCC.
-
- * vasprintf.c: Include stdarg.h/varargs.h first.
-
- * vprintf.c: Likewise.
-
-Sat Sep 5 03:24:49 1998 Jeffrey A Law (law@cygnus.com)
-
- * pexecute.c: Updates from gcc. Copy in gcc has been removed. This
- is the canonical copy. Define ISSPACE if !IN_GCC.
- * alloca.c, vfprintf.c, choose-temp.c, mkstemp.c, getopt.c: Similarly.
- * getopt1.c, obstack.c: Similarly.
- * Makefile.in: Build mkstemp.o
-
-Tue Sep 1 23:12:47 1998 Christopher Faylor <cgf@cygnus.com>
-
- * configure.in: Include asprintf in list of functions known not
- to be in newlib.
- * configure: Rebuild.
-
-Wed Aug 19 14:05:01 1998 Mumit Khan <khan@xraylith.wisc.edu>
-
- * cplus-dem.c (work_stuff): Add dllimported.
- (demangled_prefix): Mark symbols imported from PE DLL.
- (internal_cplus_demangled): Handle.
-
-1998-08-17 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c (do_type): Fix simple array handling. If we fail,
- stay failed.
-
-Mon Aug 17 10:40:34 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cplus-dem.c: Include config.h if it exists. Also, only
- prototype malloc/realloc if we can't get stdlib.h.
-
-Sat Aug 15 16:15:01 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Switch back to checking --with-target-subdir when
- deciding whether to check for newlib, undoing part of July 15
- change.
- * configure: Rebuild.
-
-Thu Aug 13 16:47:38 1998 Mark Mitchell <mark@markmitchell.com>
-
- * cplus-dem.c (type_kind_t): New type.
- (demangle_template_value_parm): Add type_kind_t parameter. Rely
- on this paramter, rather than demangling the type again.
- (demangle_integral_value): Pass tk_integral.
- (demangle_template_: Pass the value returned from do_type.
- (do_type): Return a type_kind_t. Pass tk_integral to
- demangle_template_value_parm for array bounds.
- (demangle_fund_type): Likewise.
-
- Also incorporate from GCC version:
-
- Tue Jul 21 13:28:19 1998 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c (do_type): Use demangle_template_value_parm for arrays.
-
-Thu Aug 13 16:47:38 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cplus-dem.c (demangle_nested_args): Make function definition
- static to match the prototype.
-
-Tue Jul 28 11:33:09 1998 Mark Mitchell <mark@markmitchell.com>
-
- * cplus-dem.c (type_kind_t): New type.
- (demangle_template_value_parm): Add type_kind_t parameter. Rely
- on this paramter, rather than demangling the type again.
- (demangle_integral_value): Pass tk_integral.
- (demangle_template_: Pass the value returned from do_type.
- (do_type): Return a type_kind_t. Pass tk_integral to
- demangle_template_value_parm for array bounds.
- (demangle_fund_type): Likewise.
-
- Also incorporate from GCC version:
-
- Tue Jul 21 13:28:19 1998 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c (do_type): Use demangle_template_value_parm for arrays.
-
-Mon Jul 27 12:16:08 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (ALLOCA): New variable.
- ($(TARGETLIB)): Add $(ALLOCA) to library.
- (needed-list): Add $(ALLOCA).
- ($(ALLOCA)): Depend upon stamp-picdir.
-
-Sun Jul 19 08:23:17 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cplus-dem.c (demangle_nested_args): Make function definition
- static to match the prototype.
-
-Wed Jul 15 00:12:58 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Check --with-cross-host rather than
- --with-target-subdir when deciding whether build uses a cross
- compiler, and when deciding where to install the library.
- * configure: Rebuild.
-
-Sun Jul 12 01:27:05 1998 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c (demangle_nested_args): Return a value.
-
-Sat Jul 11 16:19:48 1998 Mark Mitchell <mark@markmitchell.com>
-
- * cplus-dem.c (string): Move definition before work_stuff.
- (work_stuff): Add volatile_type, forgetting_types,
- previous_argument, and nrepeats fields.
- (SCOPE_STRING): New macro.
- (demangle_template): Add `remember' parameter. Add comment.
- Register the `B' code type here, if remembering. Tidy. Fix crash
- on NULL tmpl_argvec. Be consistent with use of tname/trawname.
- (demangle_nested_args): New function.
- (internal_cplus_demangle): Handle volatile-qualified member
- functions.
- (mop_up): Delete the previous_argument string if present.
- (demangle_signature): Tidy. Handle volatile-qualified member
- functions. Handle back-references using the `B' code. Use extra
- parameter to demangle_template and SCOPE_STRING where appropriate.
- (demangle_template_value_parm): Fix thinko; 'B' is not an integral
- code.
- (demangle_class): Use SCOPE_STRING.
- (gnu_special): Pass additional argument to demangle_template.
- Use SCOPE_STRING.
- (demangle_qualified): Save qualified types for later
- back-references. Handle constructors and destructors for template
- types correctly.
- (do_type): Tidy. Use SCOPE_STRING. Pass extra argument to
- demangle_template. Use demangled_nested_args. Don't remember
- qualified types here; that's now done in demangle_qualified.
- Similarly for templates.
- (do_arg): Improve commment. Handle 'n' repeat code.
- (remember_type): Check forgetting_types.
- (demangle_args): Deal with 'n' repeat codes. Tidy.
-
-Thu Jul 2 16:26:24 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * config.table: Only use mh-fbsd21 on *-*-freebsd2.2.[012], not on
- *-*-freebsd2.2.*. From Dmitrij Tejblum <tejblum@arc.hq.cti.ru>.
-
-Mon Jun 15 16:29:01 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in (setobjs): Correct quoting error in cygwin32 case.
- From Chris Faylor <cgf@cygnus.com>.
-
-Mon Jun 1 13:47:55 1998 Jason Molenda (crash@bugshack.cygnus.com)
-
- * obstack.c: Update to latest FSF version.
-
-Mon Jun 1 14:17:36 1998 Mike Stump <mrs@wrs.com>
-
- * Makefile.in: Add a dependency on stamp-picdir for the
- objects, so that we can do a parallel build.
-
-Sat May 30 22:17:13 1998 Mumit Khan <khan@xraylith.wisc.edu>
-
- * configure.in (checkfuncs): Add missing "'".
-
-Fri May 29 12:40:41 1998 Jason Molenda (crash@bugshack.cygnus.com)
-
- * obstack.c (_obstack_memory_used): Elide this function if we're
- on a system with GNU libc.
-
-Tue May 26 18:28:43 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (distclean): Remove config.log.
-
-Tue May 26 15:01:52 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- * Makefile.in (distclean): Don't remove alloca-conf.h.
-
-Fri May 22 01:38:07 1998 Hans-Peter Nilsson <hp@axis.se>
-
- * cplus-dem.c (MBUF_SIZE): Bumped from 512 to 32767.
-
-1998-05-21 Mark Mitchell <mmitchell@usa.net>
-
- * cplus-dem.c (do_type): Handle volatile qualification.
-
-1998-05-21 Manfred Hollstein <manfred@s-direktnet.de>
-
- * configure.in: Check for unistd.h as well.
- * configure: Rebuild.
- * config.in: Rebuild.
- * getpagesize.c (GNU_OUR_PAGESIZE): Use sysconf only if _SC_PAGESIZE
- is defined in unistd.h. Reformat conditional block for easier reading.
-
- * config.table (shared): Default to no if ${enable_shared}
- is unset or empty; this logic is used by the toplevel
- configure scripts, too.
-
-Sat May 16 14:01:26 1998 Jeffrey A Law (law@cygnus.com)
-
- * config.table: Add line to set enable_shared in the Makefile
- as needed.
-
-Wed May 13 14:24:38 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
-
- * cplus-dem.c (squangle_mop_up): Change return type to void.
- (internal_cplus_demangle): Remove unused parameter `options'.
- All callers changed.
- (cplus_demangle_opname): Remove function wide variable `int i' and
- replace with `size_t i' at each location where it is used.
- (cplus_mangle_opname): change type of `i' from int to size_t.
-
-Wed May 13 13:39:38 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * alloca-conf.h: Include config.h. Check HAVE_ALLOCA_H rather
- than sparc or sun.
- * Makefile.in (argv.o): Depend upon config.h and alloca-conf.h.
-
-Fri May 8 00:23:51 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Set libiberty_topdir correctly when srcdir is
- "." and with_target_subdir is not set.
- * configure: Rebuild.
-
-Thu May 7 13:01:44 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Add *-*-mingw32* case.
- * configure: Rebuild.
-
-Wed May 6 11:33:51 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * config.table: Never use a PIC file for *-*-cygwin32*.
-
- * Makefile.in (config.status): Depend upon config.table.
-
- * configure.in: On a cygwin32 host, always compile random, and
- don't test for sys_siglist, strsignal, or psignal.
- * configure: Rebuild.
-
- * clock.c: Check HAVE_SYS_PARAM_H rather than NO_SYS_PARAM_H.
- * getcwd.c: Likewise.
- * getpagesize.c: Likewise.
- * getruntime.c: Likewise.
-
-Tue May 5 18:08:32 1998 Ian Lance Taylor <ian@cygnus.com>
-
- Use autoconf tests rather than the old dummy.c test:
- * configure.in: Add AC_ARG_WITH calls for --with-target-subdir and
- --with-newlib. Add AC_CONFIG_HEADER. Use AC_REPLACE_FUNCS for
- most functions. Add special cases to handle newlib and VxWorks.
- Remove target_makefile_frag. Create stamp-h in AC_OUTPUT if
- CONFIG_HEADERS is set. Only call config-ml.in in AC_OUTPUT if
- CONFIG_FILES is set; set ac_file before calling it.
- * config.table (arm-*-riscix*, *-*-cygwin32): Remove.
- (*-*-hpux*, *-*-hiux*, *-*-irix4*, *-*-solaris2*): Remove.
- (*-*-sysv4*, *-*-go32, *-*-vxworks5*, *-*-vxworks): Remove
- (i[3456]-*-mingw32*): Remove.
- * Makefile.in (ERRORS_CC, CONFIG_H, NEEDED_LIST): Remove.
- (LIBOBJS): New variable.
- (HOST_OFILES, DO_ALSO, STAGESTUFF): Remove.
- (all): Depend upon needed-list. Don't check RULE1.
- (@target_makefile_frag@): Remove.
- (COMPILE.c): Include @DEFS@.
- (HFILES): Add alloca-conf.h.
- (REQUIRED_OFILES): Remove basename.o.
- ($(TARGETLIB)): New target.
- (stamp-needed, lneeded-list, needed.awk, stamp-config): Remove.
- (lconfig.h, needed2.awk, dummy.o, errors): Remove.
- (needed-list, config.h): Rewrite.
- (RULE1, $(RULE1), RULE2, $(RULE2)): Remove.
- (.always.): Remove.
- (Makefile): Set CONFIG_FILES and CONFIG_HEADERS.
- (stamp-h): New target.
- (atexit.o, clock.o, getcwd.o, getpagesize.o): New targets.
- (basename.o): Don't depend upon config.h.
- (getruntime.o): Depend upon config.h.
- * atexit.c: Include config.h. Check HAVE_ON_EXIT rather than
- NEED_on_exit.
- * basename.c: Don't include config.h. Don't check NEED_basename.
- * clock.c: Include config.h.
- * getcwd.c: Likewise.
- * getpagesize.c: Likewise.
- * getruntime.c: Likewise. Fix checks which set HAVE_GETRUSAGE and
- HAVE_TIMES.
- * strerror.c: Change uses of NEED_sys_errlist to
- HAVE_SYS_ERRLIST. Likewise for NEED_strerror and HAVE_STRERROR.
- * strsignal.c: Likewise for NEED_sys_siglist and HAVE_SYS_SIGLIST,
- and for NEED_strsignal and HAVE_STRSIGNAL and for NEED_psignal and
- HAVE_PSIGNAL.
- * acconfig.h: New file.
- * dummy.c: Remove.
- * functions.def: Remove.
- * config/mh-cxux7 (HDEFINES): Remove -DHAVE_SYSCONF.
- * config/mh-windows (HDEFINES): Remove.
- * config/mh-cygwin32: Remove.
- * config/mh-go32: Remove.
- * config/mh-irix4: Remove.
- * config/mh-riscix: Remove.
- * config/mh-sysv4: Remove.
- * config/mt-mingw32: Remove.
- * config/mt-vxworks5: Remove.
- * config.in: New file, generated using autoheader.
- * configure: Rebuild.
-
-Mon May 4 13:00:28 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Rewrite to use autoconf.
- * configure: Generate using autoconf.
- * config/mh-a68bsd: Remove.
- * config/mh-apollo68: Remove.
- * config/mh-hpbsd: Remove.
- * config/mh-ncr3000: Remove.
- * config/mh-sysv: Remove.
- * config/mh-aix (RANLIB, INSTALL): Don't define.
- * config/mh-cxux7 (RANLIB, INSTALL): Don't define.
- * config/mh-irix4 (CC, RANLIB, INSTALL): Don't define.
- * config/mh-sysv4 (RANLIB, INSTALL): Don't define.
- * config.table: Change config_shell to CONFIG_SHELL, and use
- libiberty_topdir to find move-if-change.
- (m68k-apollo-bsd*, m68k-apollo-sysv*): Remove.
- (i[3456]86-ncr-sysv4*, *-*-dgux*, hppa*-hp-bsd*): Remove.
- (*-*-irix*, *-*-m88kbcs*, *-*-sysv*): Remove.
- * Makefile.in (srcdir): Set to @srcdir@.
- (VPATH): Likewise.
- (prefix, exec_prefix, bindir, libdir): Set to autoconf variables.
- (SHELL, INSTALL, INSTALL_PROGRAM, INSTALL_DATA): Likewise.
- (CC, CFLAGS, RANLIB)): Likewise.
- (datadir, man*dir, infodir, includedir, MAKEINFO): Remove.
- (target_makefile_frag, host_makefile_frag): Add substitutions.
- (INSTALL_DEST): Set to @INSTALL_DEST@.
- (Makefile): Depend upon config.status. Don't depend upon
- $(host_makefile_frag) or $(target_makefile_frag).
- (config.status): New target.
-
-Sun May 3 17:58:49 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * config/mt-sunos4: Remove. Should be handled by --with-headers
- and --with-libraries options at top level.
- * config.table: Never use mt-sunos4.
-
- * alloca-conf.h: New file, combining alloca-norm.h and
- alloca-botch.h.
- * alloca-norm.h: Remove.
- * alloca-botch.h: Remove.
- * configure.in: Set shell variables files and links to empty.
- * config.table: Don't set shell variable files.
- * configure.bat: Don't create alloca-conf.h.
- * makefile.vms: Likewise.
- * mpw-config.in: Likewise.
- * vmsbuild.com: Likewise.
-
-Fri May 1 11:41:42 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in ($(HOST_OFILES) $(REQUIRED_OFILES)): Remove old
- target depending upon config.h.
- (alloca.o): Add target depending upon config.h
- (basename.o, choose-temp.o, fnmatch.o): Likewise.
- (getopt.o, getopt1.o, pexecute.o, strerror.o): Likewise.
- (strsignal.o, xstrerror.o): Likewise.
-
-Fri May 1 04:26:25 1998 Peter Schauer <pes@regent.e-technik.tu-muenchen.de>
-
- * cplus-dem.c (cplus_demangle_opname): Initialize work.
-
-Mon Apr 27 15:53:30 EDT 1998 Andrew MacLeod <amacleod@cygnus.com>
-
- * cplus-dem.c (demangle_qualified): Replace missing else.
-
-Sun Apr 26 15:38:50 1998 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
-
- * cplus-dem.c (gnu_special): Fix off-by-one bug when checking the
- length in the name of a virtual table.
-
-Wed Apr 22 10:53:49 EDT 1998 Andrew MacLeod <amacleod@cygnus.com>
-
- * cplus-dem.c (struct work stuff): Add field for B and K mangle codes.
- (cplus_demangle_opname): Call mop_up_squangle.
- (cplus_demangle): Initialize squangle info, then call
- internal_cplus_demangle. (Most code moved there as well)
- (internal_cplus_demangle): New function, performs most of what use
- to be done in cplus_demangle, but is only called with this file.
- (squangle_mop_up): New function to clean up B and K code data.
- (mop_up): set pointers to NULL after freeing.
- (demangle_signature, demangle_template, demangle_class): Add
- switch elements to handle K and B codes.
- (demangle_prefix, gnu_special, demangle_qualified): Add
- code to handle K and B codes.
- (do_type, demangle_fund_type): Handle B and K codes.
- (remember_Ktype): New function to store K info.
- (register_Btype, remember_Btype): New functions for B codes.
- (forget_B_and_K_types): New function to destroy B and K info.
-
-Fri Apr 10 01:49:10 1998 Jeffrey A Law (law@cygnus.com)
-
- * COPYING.LIB, choose-temp.c, cplus-dem.c: Sync with egcs & gcc.
-
-Thu Mar 5 09:23:28 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * config.table: Make locating frag files failsafe even for the
- special case if configuring and building in srcdir.
-
-Mon Feb 23 14:33:15 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * choose-temp.c: Fix handling of sys/file.h to work in libiberty.
-
-Sun Feb 22 18:03:23 1998 Jeffrey A Law (law@cygnus.com)
-
- * choose-temp.c: Sync with copy in gcc.
-
-Thu Feb 12 16:29:49 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * getopt.c: Update to latest FSF version.
- * getopt1.c: Likewise.
-
-Tue Feb 10 16:58:33 1998 Stan Shebs <shebs@andros.cygnus.com>
-
- * cplus-dem.c (gnu_special): Don't get confused by .<digits>
- strings that are not actually lengths.
-
-Fri Feb 6 01:35:17 1998 Manfred Hollstein <manfred@s-direktnet.de>
-
- * Makefile.in (FLAGS_TO_PASS): Don't pass PICFLAG.
- (.c.o): Check value of enable_shared, not PICFLAG.
- (stamp-picdir): Dito.
-
-Thu Feb 5 18:48:56 1998 Geoffrey Noer <noer@cygnus.com>
-
- * config/mh-cygwin32: remove vasprintf.o from EXTRA_OFILES
- since it gets built automatically
-
-Sun Feb 1 02:52:32 1998 Mike Stump <mrs@wrs.com>
-
- * config.table (vxworks configs): Default to VxWorks 5.x, as that is
- the currently shipping OS.
-
-Tue Jan 27 16:08:20 1998 Pat Rankin <rankin@eql.caltech.edu>
-
- * vmsbuild.com [REQUIRE_OFILES]: Synchronized with Makefile.in:
- Add fnmatch.o and objalloc.o; remove vasprintf.o.
- [config.h]: Define NEED_strsignal.
-
-Mon Jan 19 12:20:01 1998 Ian Lance Taylor <ian@cygnus.com>
-
- * functions.def: Correct argument types for strerror and
- strsignal. Reported by Alex Gutman <agutman@emc.com>.
-
-Sun Jan 18 15:57:28 1998 Michael Snyder <msnyder@cleaver.cygnus.com>
-
- * vasprintf.c (int_vasprintf): Increase buffer size for float/double
- values.
-
-Sat Jan 17 22:28:38 1998 Mumit Khan <khan@xraylith.wisc.edu>
- J.J. VanderHeijden <J.J.vanderHeijden@student.utwente.nl>
-
- Add mingw32 support.
- * pexecute.c (pexecute): New function for mingw32. Supports pipes.
- (pwait): New function for mingw32.
-
- * config.table (i[3456]86-*-mingw32*): Support for i386-mingw32.
- * config/mt-mingw32: New file.
- * xmalloc.c (first_break): Not used for mingw32.
- (xmalloc_set_program_name): Don't use sbrk on mingw32.
- (xmalloc): Likewise.
- (xrealloc): Likewise.
-
-Sat Jan 17 22:28:05 1998 Jeffrey A Law (law@cygnus.com)
-
- * choose-temp.c: Sync with gcc version.
-
-Tue Jan 13 18:34:39 1998 Jim Wilson <wilson@cygnus.com>
-
- * Makefile.in (install_to_libdir, install_to_tooldir): Add MULTISUBDIR
- to all filenames in libdir and tooldir.
- (distclean): Do MULTICLEAN before deleting Makefile.
- (stamp-needed, stamp-config): Add MULTISRCTOP to
- pathname for move-if-change.
-
-Thu Dec 4 17:25:19 1997 Jeffrey A Law (law@cygnus.com)
-
- * strsignal.c (sys_nsig): Try NSIG and _NSIG.
-
-Wed Nov 19 13:37:06 1997 Michael Meissner <meissner@cygnus.com>
-
- * alloca-norm.h (alloca, GCC case): Don't redefine alloca if it
- was already defined previously.
-
-Mon Nov 10 12:48:03 1997 Philippe De Muyter <phdm@macqel.be>
-
- * Makefile.in (INSTALL): Use ../install-sh, not install.
-
-Tue Oct 28 23:41:15 1997 Judy Goldberg <jodyg@idt.net>
-
- * Makefile.in (CFILES): Add pexecute.c.
-
-Wed Oct 15 19:13:48 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * asprintf.c: Consistently use either stdarg or varargs.
-
-Tue Oct 14 12:01:00 1997 Mark Mitchell <mmitchell@usa.net>
-
- * cplus-dem.c (demangle_signature): Don't look for return types on
- constructors. Handle member template constructors.
-
-Fri Oct 3 17:53:30 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * README: Fix configuration instructions.
-
-Mon Sep 29 12:28:41 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * pexecute.c: Update to current version from /gd/gnu/lib:
-
- Mon Sep 29 12:27:59 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * pexecute.c: Use spawn if __CYGWIN32__.
-
- 1997-08-08 Paul Eggert <eggert@twinsun.com>
-
- * pexecute.c: Include "config.h" first, as per autoconf manual.
-
- Fri Jun 27 15:20:29 1997 Scott Christley <scottc@net-community.com>
-
- * pexecute.c (fix_argv): New function.
- (pexecute): Win32 but not Cygwin32 needs its arguments fixed.
- Add underscore to cwait function call.
-
-Sun Sep 28 12:00:52 1997 Mark Mitchell <mmitchell@usa.net>
-
- * cplus-dem.c (demangle_template): Add new parameter. Handle new
- template-function mangling.
- (consume_count_with_underscores): New function.
- (demangle_signature): Handle new name-mangling scheme.
-
-Wed Sep 24 00:31:59 1997 Felix Lee <flee@yin.cygnus.com>
-
- * asprintf.c: stdarg.h when ALMOST_STDC
- * config/mh-windows (EXTRA_OFILES): add asprintf.o and
- strncasecmp.o.
-
-Thu Aug 28 14:27:15 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * vasprintf.c (vasprintf): Allow for _BSD_VA_LIST_.
-
- * config.table: Add case for FreeBSD 2.1 and 2.2, needs mh-fbsd21.
-
- * config/mh-fbsd21 (EXTRA_OFILES): Force vasprintf.o
-
-Wed Sep 10 12:43:10 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c (demangle_fund_type): Change "complex" to "__complex".
-
-Fri Sep 5 16:34:42 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * asprintf.c (asprintf): New file.
- * Makefile.in (CFILES): Add asprintf.c
- * functions.def: Ditto.
-
-Thu Aug 28 18:53:34 1997 Andrew Cagney <cagney@b1.cygnus.com>
-
- * argv.c (dupargv): New function, duplicate an argument vector.
-
-Tue Aug 19 20:28:45 1997 Geoffrey Noer <noer@cygnus.com>
-
- * config/mh-cygwin32: also build random.o
-
-Tue Aug 19 17:10:56 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c: Add 'extern' to prepends_underscore.
-
-Wed Jul 30 11:42:19 1997 Per Bothner <bothner@cygnus.com>
-
- * cplus-dem.c: Various changes to produce Java output when passed
- DMGL_JAVA. Thus "::" becomes "." and "JArray<Foo>" becomes "Foo[]".
- (main): Support --java and -j flags to set DMGL_JAVA.
-
-Tue Jul 22 19:05:23 1997 Robert Hoehne <robert.hoehne@Mathematik.TU-Chemnitz.DE>
-
- * config/mh-go32 (CC, AR, RANLIB): Don't define.
-
-Tue Jul 22 17:49:54 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (REQUIRED_OFILES): Add pexecute.o.
- (pexecute.o): New target.
-
- * Makefile.in (stamp-needed): New target, replacing needed-list.
- (needed-list): Just depend upon stamp-needed.
- (stamp-config): New target, replacing config.h.
- (config.h): Just depend upon stamp-config.
- (mostlyclean): Remove stamp-*.
-
-Thu Jun 12 11:00:18 1997 Angela Marie Thomas (angela@cygnus.com)
-
- * Makefile.in (FLAGS_TO_PASS): pass INSTALL, INSTALL_PROGRAM and
- INSTALL_DATA for multilibbed installs
-
-Tue Jun 3 13:21:05 1997 Doug Evans <dje@canuck.cygnus.com>
-
- Tue Dec 10 09:44:57 1996 Paul Eggert <eggert@twinsun.com>
-
- * choose-temp.c (choose_temp_base): Don't dump core if TMPDIR is empty.
-
- * choose-temp.c (try): Insist that temp dir be searchable.
-
- Wed Oct 23 17:36:39 1996 Doug Rupp (rupp@gnat.com)
-
- * choose-temp.c (choose_temp_base): On VMS, use proper syntax
- for current directory.
-
- Sat Feb 15 19:03:48 1997 Geoffrey Noer (noer@cygnus.com)
-
- * pexecute.c: Remove special cases for cygwin32.
- (pwait): Remove local definition of `pid'.
-
- Tue Nov 12 18:26:15 1996 Doug Rupp (rupp@gnat.com)
-
- * pexecute.c (vfork): Supply new definition for VMS.
- (pwait): Use waitpid instead of wait for VMS.
-
-Tue May 20 14:02:20 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cplus-dem.c (do_type): Handle `J'.
- (demangle_fund_type): Print "complex" for it.
-
-Wed Apr 30 12:15:45 1997 Jason Merrill <jason@yorick.cygnus.com>
-
- * configure.in: Don't turn on multilib here.
-
-Mon Apr 28 19:04:31 1997 Michael Snyder <msnyder@cleaver.cygnus.com>
-
- * obstack.c: move _obstack_memory_used outside of ifdef. Cannot be
- elided; needed by gdb and not present in libc.
-
-Thu Apr 24 19:33:47 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (clean): Remove tmpmulti.out.
-
-Tue Apr 22 10:25:15 1997 Fred Fish <fnf@cygnus.com>
-
- * floatformat.c (floatformat_ieee_double_littlebyte_bigword):
- Add new floatformat, mainly for ARM doubles.
-
-Mon Apr 14 12:11:16 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * config.table: Use ${config_shell} with ${moveifchange}. From
- Thomas Graichen <graichen@rzpd.de>.
-
-Fri Apr 4 03:09:24 1997 Ulrich Drepper <drepper@cygnus.com>
-
- * configure.in: Enable multilibing by default.
- Update multilib template to read config-ml.in.
-
-Tue Apr 1 16:26:39 1997 Klaus Kaempf <kkaempf@progis.de>
-
- * makefile.vms: Add objalloc.
-
-Mon Mar 31 23:57:51 1997 H.J. Lu <hjl@gnu.ai.mit.edu>
-
- * cplus-dem.c (demangle_it): Add prototype declaration.
- (usage, fatal): Likewise.
-
- * xexit.c (_xexit_cleanup): Add prototype.
-
- * strerror.c (init_error_tables): Declare.
-
-Fri Mar 28 11:43:20 1997 H.J. Lu <hjl@lucon.org>
-
- * functions.def: Add DEF of vasprintf, and DEFFUNC of strsignal.
- * strsignal.c: Only define strsignal if NEED_strsignal.
- * Makefile.in (REQUIRED_OFILES): Remove vasprintf.o.
- * configure.in: Add NEED_strsignal to xconfig.h. Add vasprintf.o
- to xneeded-list.
- * config/mh-cygwin32 (HDEFINES): Add -DNEED_strsignal.
- (EXTRA_OFILES): Define to vasprintf.o.
- * config/mh-windows (HDEFINES): Add -DNEED_strsignal.
- (EXTRA_OFILES): Add vasprintf.o.
- * config/mt-vxworks5 (vxconfig.h): Define NEED_strsignal.
- (vxneeded-list): Add vasprintf.o.
-
-Thu Mar 20 17:02:09 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * objalloc.c: Include <stdio.h>.
-
-Mon Mar 17 19:23:11 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * objalloc.c: New file.
- * Makefile.in (CFILES): Add objalloc.c
- (REQUIRED_OFILES): Add objalloc.o.
- (objalloc.o): New target.
-
-Sat Mar 15 18:49:41 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * obstack.c: Update to current FSF version.
-
-Fri Mar 14 14:18:47 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * cplus-dem.c: Add prototypes for all static functions.
- (mystrstr): Make static. Make arguments and result const.
- (cplus_match): Remove; not used.
-
-Tue Mar 11 14:20:31 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * cplus-dem.c (gnu_special): Call demangled_fund_type for other
- __t* symbols.
-
-Tue Mar 11 15:41:21 1997 H.J. Lu <hjl@lucon.org>
-
- * spaces.c: Declare malloc and free properly.
- * strsignal.c (init_signal_tables): Add prototype.
- * xatexit.c (_xexit_cleanup): Add parameter declarations.
-
-Wed Feb 19 15:43:24 1997 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (lneeded-list): If alloca.o is needed, xexit.o is
- also required because of xmalloc.o.
-
-Fri Feb 14 13:43:38 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * strsignal.c: Unconditionally redefine sys_siglist around the
- inclusion of the system header files.
-
-Thu Feb 13 22:01:04 1997 Klaus Kaempf <kkaempf@progis.de>
-
- * makefile.vms: Remove 8 bit characters. Update to latest
- gcc release.
-
-Tue Feb 4 11:52:19 1997 Ian Lance Taylor <ian@cygnus.com>
-
- * strsignal.c: Use NEED_sys_siglist instead of
- LOSING_SYS_SIGLIST.
- * config.table: Don't use mh-lynxos.
- * config/mh-lynxos: Remove.
-
-Thu Jan 16 14:51:03 1997 Bob Manson <manson@charmed.cygnus.com>
-
- * cplus-dem.c: Fix indenting; make identical to the copy
- in GCC.
- (do_type, case 'M'): Check for a template as well as a class.
-
-Thu Dec 19 13:51:33 1996 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * config/mt-vxworks5 (vxneeded-list): Remove sigsetmask.o, since
- vxworks 5.[0-3] all have sigsetmask in them; the one provided by
- libiberty is incorrect, as well.
-
-Mon Dec 2 15:03:42 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * alloca.c (alloca): When compiled with an ANSI/ISO compiler,
- alloca takes a size_t argument, not just unsigned.
-
-Mon Nov 18 15:42:08 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c: Note that this file also lives in GCC.
-
-Mon Nov 18 15:19:00 1996 Dawn Perchik <dawn@critters.cygnus.com>
-
- * alloca.c: Remove include of libiberty.h for hpux.
- * argv.c: Replace defs from libiberty.h.
- * spaces.c: Put back externs from removed from libiberty.h.
- * vasprintf.c: Remove include of libiberty.h for hpux.
-
-Mon Nov 18 14:08:00 1996 Dawn Perchik <dawn@critters.cygnus.com>
-
- * cplus-dem.c: Checking in again; last checkin filed due to sticky tag.
-
-Wed Nov 13 08:22:00 1996 Dawn Perchik <dawn@critters.cygnus.com>
-
- * cplus-dem.c: Revert last two commits due to conflicts with
- hpux system headers.
-
-Wed Nov 13 08:22:00 1996 Dawn Perchik <dawn@critters.cygnus.com>
-
- * alloca.c, argv.c, spaces.c, strcasecmp.c, vasprintf.c, vprintf.c:
- Revert last commit due to conflicts with hpux system headers.
-
-Wed Nov 13 10:36:50 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * cplus-dem.c (x{m,re}alloc): Make declarations compatibile with
- libiberty.h when compiled with a standard compiler.
-
-Tue Nov 12 16:31:00 1996 Dawn Perchik <dawn@critters.cygnus.com>
-
- * alloca.c: Include libiberty.h for definition of xmalloc.
- Don't redefine NULL.
- * argv.c: Move prototypes to libiberty.h.
- * cplus-dem.c: Include libiberty.h for definition of xmalloc.
- Don't redefine NULL.
- Use casts to eliminate compiler warnings.
- * spaces.c: Remove prototypes for malloc and free which are
- already in libibrty.h.
- * strcasecmp.c: Use casts to eliminate compiler warnings.
- * vasprintf.c: Include libiberty.h for definition of malloc.
- Don't redefine NULL.
- * vprintf.c: Include stdarg.h if __STDC__.
-
-Fri Oct 11 15:42:12 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * config/mh-windows: Add strcasecmp.o to EXTRA_OFILES.
-
-Fri Oct 11 11:16:31 1996 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw.c (mpwify_filename): Rewrite to simplify, and to handle
- upward components correctly.
-
-Tue Oct 8 08:55:34 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * config.table, config/mh-windows: Add support for building under
- MSVC (the Microsoft build environment).
-
-Mon Oct 7 10:50:27 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * fnmatch.c: Undef const if not __STDC__.
-
-Thu Oct 3 13:46:39 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * fnmatch.c: New file.
- * Makefile.in (CFILES): Add fnmatch.c.
- (REQUIRED_OFILES): Add fnmatch.o.
- (fnmatch.o): New target.
-
-Wed Sep 18 14:49:13 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c (demangle_template): Fix handling of address args.
- (gnu_special): Handle type_info stuff.
-
-Fri Sep 13 17:52:55 1996 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw.c (DebugPI): Make settable from the env var DEBUG_PATHNAMES.
- (mpwify_filename): Handle "::/" case.
-
-Thu Sep 12 13:30:40 1996 Geoffrey Noer <noer@cygnus.com>
-
- * config/mh-cygwin32: new file (need -DNEED_basename and
- -DNEED_sys_siglist for native NT rebuilding)
- * config.table (*-*-cygwin32): new entry
- * choose-temp.c: bring in sync with gcc (revert Aug 17 change)
-
-Thu Aug 29 16:48:45 1996 Michael Meissner <meissner@tiktok.cygnus.com>
-
- * config.table (i[345]86-*-*): Recognize i686 for pentium pro.
-
-Tue Aug 27 13:47:58 1996 Stan Shebs <shebs@andros.cygnus.com>
-
- * pexecute.c (pexecute) [MPW]: Remove old bogus code that
- messed with arguments that included a '/', add escape chars
- to double quotes, remove const decl from arg that Mac
- compilers don't seem to like.
-
-Sat Aug 17 04:44:27 1996 Geoffrey Noer <noer@cygnus.com>
-
- * pexecute.c: Update test for win32 (&& ! cygwin32).
- * choose-temp.c: fix WIN32 preprocessor defines
-
-Thu Aug 15 12:26:48 1996 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw-make.sed: Add @DASH_C_FLAG@ and @SEGMENT_FLAG({Default})@
- to editing of default makefile rule.
-
-Sun Aug 11 21:03:27 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * alloca-norm.h: Include <malloc.h> if _WIN32.
- * argv.c: Include non-prototyped decls for malloc and string
- functions if ! _WIN32 or if __GNUC__.
-
-Thu Aug 8 12:42:40 1996 Klaus Kaempf <kkaempf@progis.de>
-
- * config.h-vms: New file.
- * makefile.vms: Use it.
-
-Wed Aug 7 17:16:12 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * getopt.c (_getopt_internal): If argc is 0, just return (before
- we reference *argv and segfault).
-
-Mon Aug 5 01:29:08 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * Makefile.in (distclean): Add multilib.out.
-
-Thu Jul 18 17:40:55 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * alloca-norm.h: Change #ifdef sparc to #if defined (sparc) &&
- defined (sun). From Andrew Gierth <ANDREWG@microlise.co.uk>.
-
-Mon Jul 1 13:40:44 1996 Ken Raeburn <raeburn@cygnus.com>
-
- Tue May 28 15:29:03 1996 Pat Rankin <rankin@eql.caltech.edu>
-
- * vmsbuild.com (REQUIRD_OFILES): Add choose-temp.o and xstrdup.o.
-
- Thu Jan 25 18:20:04 1996 Pat Rankin <rankin@eql.caltech.edu>
-
- * vmsbuild.com: Changes to handle DEFFUNC(on_exit).
- (do_ofiles): Allow nonexistent source file in pass 3.
- (chk_deffunc): New routine.
-
-Tue Jun 25 19:24:43 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * pexecute.c (PEXECUTE_VERBOSE): Define.
- (MPW pexecute): Check flags & PEXECUTE_VERBOSE instead of verbose_flag.
-
-Tue Jun 25 23:11:48 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
-
- * Makefile.in (docdir): Removed.
-
-Tue Jun 25 23:01:07 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
-
- * Makefile.in (oldincludedir): Removed.
-
-Tue Jun 25 22:50:07 1996 Jason Molenda (crash@godzilla.cygnus.co.jp)
-
- * Makefile.in (datadir): Set to $(prefix)/share.
-
-Thu Jun 20 21:17:52 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * cplus-dem.c (demangle_arm_pt): Reindent. Avoid endless loop by
- checking for errors from do_type.
-
-Tue Jun 18 14:36:19 1996 Klaus Kaempf <kkaempf@progis.de>
-
- * makefile.vms: New file.
- * xmalloc.c: If VMS, include <stdlib.h> and <unixlib.h> rather
- than declaring malloc, realloc, and sbrk.
-
-Mon Jun 10 13:17:17 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * pexecute.c: New file.
-
-Wed Jun 5 16:57:45 1996 Richard Henderson <rth@tamu.edu>
-
- * xmalloc.c: Declare sbrk.
-
-Sat May 4 05:08:45 1996 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * alloca-norm.h: Add SPARCworks cc compatible __builtin_alloca
- declaration.
-
-Mon Apr 22 18:41:49 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * xstrerror.c: Include <stdio.h>.
-
-Sun Apr 21 11:55:12 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (CFILES): Add atexit.c.
-
-Sun Apr 21 09:50:09 1996 Stephen L Moshier (moshier@world.std.com)
-
- * choose-temp.c: Include sys/types.h before sys/file.h for sco3.2v5.
-
-Wed Apr 17 11:17:55 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * choose-temp.c: Don't #include sys/file.h ifdef NO_SYS_FILE_H.
- #include <stdio.h>
- * config/mt-vxworks5 (HDEFINES): Define NO_SYS_FILE_H.
-
-Tue Apr 16 11:27:16 1996 Jeffrey A Law (law@cygnus.com)
-
- * Makefile.in (lneeded-list): If alloca.o is needed, so is xmalloc.o.
- Reverts Feb 8, 1995 change.
-
-Mon Apr 15 12:53:26 1996 Doug Evans <dje@canuck.cygnus.com>
-
- * choose-temp.c: New file.
- * Makefile.in (CFILES): Add choose-temp.c.
- (REQUIRED_OFILES): Add choose-temp.o.
-
-Sat Apr 13 14:19:30 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * floatformat.c (floatformat_to_double): Don't bias exponent when
- handling zero's, denorms or NaNs.
-
-Thu Apr 11 13:36:56 1996 Stu Grossman (grossman@critters.cygnus.com)
-
- * floatformat.c (floatformat_to_double): Fix bugs with handling
- numbers with fractions < 32 bits.
-
-Mon Apr 8 14:48:34 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * config.table: Permit --enable-shared to specify a list of
- directories.
-
-Tue Mar 19 22:02:07 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c (demangle_template): Fix for non-mangled pointer
- arguments.
-
-Fri Mar 8 17:24:18 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: If srcdir is `.' and with_target_subdir is not
- `.', then set MULTISRCTOP before calling config-ml.in.
-
-Thu Mar 7 13:37:10 1996 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw.c (mpw_open): Add debugging output option.
-
-Wed Mar 6 17:36:03 1996 Jason Merrill <jason@yorick.cygnus.com>
-
- * cplus-dem.c (demangle_template): Fix for address-of-extern arguments.
-
-Tue Feb 27 12:00:50 1996 Raymond Jou <rjou@mexican.cygnus.com>
-
- * mpw.c (mpwify_filename): Change 6 to 5 in
- strncmp (unixname, "/tmp/", 5).
-
-Tue Feb 20 10:55:53 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * cplus-dem.c (demangle_template): Initialize is_bool. Correctly
- handle 0 as a pointer value parameter.
-
-Mon Feb 5 16:41:44 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (all): Depend upon required-list.
- (required-list): New target.
- (clean): Remove required-list.
-
-Wed Jan 31 10:19:41 1996 Steve Chamberlain <sac@slash.cygnus.com>
-
- * win32.c: Deleted.
- * config.table (i386-*-win32): Deleted.
- * config/mh-i386win32: Deleted.
-
-Thu Jan 18 11:34:17 1996 Ian Lance Taylor <ian@cygnus.com>
-
- * cplus-dem.c (cplus_demangle_opname): Change opname parameter to
- const char *.
- (cplus_mangle_opname): Change return type and opname parameter to
- const char *. Don't cast return value.
-
-Tue Jan 16 12:13:11 1996 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw.c: Include Timer.h, in order to get m68k Microseconds trap
- definition.
-
-Wed Jan 3 13:15:04 1996 Fred Fish <fnf@cygnus.com>
-
- * obstack.c: Update copyright to 1996.
- (_obstack_memory_used): Define new function. Called via
- obstack_memory_used macro.
-
-Thu Dec 28 11:39:40 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * xstrdup.c: New file.
- * Makefile.in (CFILES): Add xstrdup.c.
- (REQUIRED_OFILES): Add xstrdup.o.
- (xstrdup.o): New target.
-
-Mon Dec 11 18:18:52 1995 Mike Stump <mrs@cygnus.com>
-
- * atexit.c: New stub to provide atexit on systems that have
- on_exit, like SunOS 4.1.x systems.
- * functions.def (on_exit, atexit): Ditto.
-
-Mon Dec 11 15:42:14 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw.c (mpw_abort): Remove decl.
- (mpw_access): Move debugging printf.
-
-Sat Dec 2 01:25:23 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * config.table: Consistently use ${host} rather than ${xhost} or
- ${target}.
- * configure.in: Don't bother to set ${xhost} before calling
- config.table.
-
-Tue Nov 28 14:16:57 1995 Brendan Kehoe <brendan@lisa.cygnus.com>
-
- * Makefile.in (.c.o): Use test instead of the left bracket, to
- avoid problems with some versions of make.
-
-Tue Nov 28 11:45:17 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw-make.sed: Fix INCDIR edit to work with Nov 14 change.
-
-Tue Nov 21 11:26:34 1995 Fred Fish <fnf@rtl.cygnus.com>
-
- * config/mh-hpux: Remove. It was only used to define EXTRA_OFILES,
- which was set to just alloca.o, which is now automatically marked
- as needed by the autoconfiguration process.
-
-Tue Nov 21 14:15:06 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * config.table: Check ${with_cross_host} rather than comparing
- ${host} and ${target}.
-
-Thu Nov 16 14:34:42 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: If with_target_subdir is empty, set xhost to
- ${host} rather than ${target} before calling config.table.
-
-Tue Nov 14 01:38:30 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (MULTITOP): Deleted.
- (MULTISRCTOP, MULTIBUILDTOP): New.
- (FLAGS_TO_PASS): Delete INCDIR.
- (INCDIR): Add $(MULTISRCTOP).
- (install_to_libdir): Add $(MULTISUBDIR). Call $(MULTIDO).
- * configure.in: Delete call to cfg-ml-com.in. Call config-ml.in
- instead of cfg-ml-pos.in.
- (cross-compile check): Change to test for with_target_subdir.
- (EXTRA_LINKS): Delete.
-
-Sun Nov 12 12:13:04 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw-make.sed: Add getpagesize.c.o to needed-list.
- * mpw.c [USE_MW_HEADERS]: Conditionalize compiling of
- functions that are supplied by Metrowerks libraries.
- (fstat): Clean up descriptor->pointer conversion code.
- (InstallConsole, etc): Empty definitions, for when linking
- with SIOUX.
-
-Sun Nov 5 19:25:27 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * Makefile.in (FLAGS_TO_PASS): Also pass PICFLAGS.
- (.c.o): Stylistic change.
-
-Thu Nov 2 12:06:29 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * strtol.c, strtoul.c: Don't include <stdlib.h>. From
- phdm@info.ucl.ac.be (Philippe De Muyter).
-
-Wed Nov 1 11:59:36 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * configure.in: Correct sed call.
-
-Mon Oct 30 13:03:45 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * configure.in: Clean up / simplify for native.
-
- * configure.in: Merge in stuff from ../xiberty/configure.in.
- * Makefile.in (CC): Add definition (so it can be overrridden
- by ../configure).
-
-Tue Oct 24 17:57:27 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw-make.sed: Leave strerror.c.o in standard list of functions.
- * mpw.c (R_OK, ENOENT, EACCESS, ENOSYS): Remove.
- (link): Remove useless definition with error return.
- (last_microseconds, warn_if_spin_delay, record_for_spin_delay):
- Use UnsignedWide type for microsecond counts.
-
-Thu Oct 19 10:52:07 1995 Michael Meissner <meissner@wogglebug.tiac.net>
-
- * memcmp.c (memcmp): Argument types are const void *, not void
- *const.
-
- * strncasecmp.c (strncasecmp): Include ansidecl.h/stdarg.h, not
- sys/types.h.
- * strcasecmp.c (strcasecmp): Ditto.
-
-Tue Oct 10 11:03:24 1995 Fred Fish <fnf@cygnus.com>
-
- * Makefile.in (BISON): Remove macro.
-
-Tue Sep 26 15:06:46 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * Makefile.in (HFILES): Add default empty definition.
- * mpw-config.in (config.h): Only update if changed.
- * mpw-make.in: Remove.
- * mpw-make.sed: New file, edits Makefile.in into MPW makefile.
- * mpw.c: Remove semi-clone of strerror code.
- (sys_nerr, sys_errlist): Define here.
- (Microseconds): Only define as A-line trap if m68k Mac.
-
-Wed Sep 20 12:53:32 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * Makefile.in (maintainer-clean): New synonym for distclean.
-
-Mon Aug 28 19:47:52 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * config.table: For host, generalize rs6000-ibm-aix*
- to *-ibm-aix* so we also include powerpc.
-
-Tue Aug 22 03:18:05 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
-
- Fri Jun 16 18:35:40 1995 Pat Rankin (rankin@eql.caltech.edu)
-
- * xstrerror.c: New file.
- * Makefile.in, vmsbuild.com: Compile it.
-
-Mon Jul 31 12:16:32 1995 steve chamberlain <sac@slash.cygnus.com>
-
- * config.table (i386-*-win32): New.
-
-Fri Jul 21 11:35:52 1995 Doug Evans <dje@canuck.cygnus.com>
-
- * Makefile.in (MULTITOP): New variable.
- (MULTIDIRS, MULTISUBDIR, MULTIDO, MULTICLEAN): Likewise.
- (all): Add multilib support.
- (install_to_tooldir, *clean): Likewise.
-
-Mon Jul 10 11:47:27 1995 Ken Raeburn <raeburn@cygnus.com>
-
- * makefile.dos (OBJS): Add hex.o. From DJ Delorie.
-
-Fri Jun 30 17:28:59 1995 Pat Rankin (rankin@eql.caltech.edu)
-
- * vmsbuild.com: create "new-lib.olb", build libiberty under that
- name, and then make it become "liberty.olb" when done, so that an
- incomplete build attempt never leaves behind something which looks
- like a complete library.
-
-Thu Jun 29 00:22:02 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * config/mh-i386pe: New file for PE hosts.
- * config.table: Understand PE hosts.
-
-Wed Jun 28 19:13:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cplus-dem.c: Update from gcc.
-
- * argv.c, dummy.c: If __STDC__, #include "alloca-conf.h" after
- <stddef.h>.
- * alloca-norm.h: If __STDC__, declare alloca with its parameter.
-
-Thu Jun 22 18:57:47 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- * mpw-make.in (ALL_CFLAGS): Define NEED_basename.
- * mpw.c: Only test DebugPI once whenever printing debug info.
- (mpwify_filename): If filename is /tmp/foo, change it into :_foo,
- also fix to not write on input filename buffer.
- (mpw_access): Use stat() instead of open(), works for directories
- as well as files.
-
-Mon Jun 19 00:33:22 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in: Massage broken shells that require 'else true'.
-
-Sat Jun 17 23:21:58 1995 Fred Fish <fnf@cygnus.com>
-
- * alloca-norm.h: Declare alloca as type "PTR" to match functions.def.
- Declare __builtin_alloca in the sparc case, as argv.c did.
- * argv.c: Replace inline version of alloca-norm.h at start of file with
- a #include of alloca-conf.h. Precede it with an include of ansidecl.h
- because alloca-norm.h needs to declare alloca as "PTR".
-
-Mon Jun 12 14:24:26 1995 Steve Chamberlain <sac@slash.cygnus.com>
-
- * win32.c: New file.
-
-Fri Jun 9 15:16:14 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * dummy.c: #include "alloca-conf.h".
-
-Wed Jun 7 11:46:23 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (mostlyclean): Remove stamp-picdir.
- (clean): Don't.
-
-Mon Jun 5 18:46:06 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.table (frags): Use toplevel pic frags.
-
- * Makefile.in (PICFLAG): New macro.
- (all): Depend on stamp-picdir.
- (needed-list): Ditto.
- (.c.o): Also build pic object.
- (stamp-picdir): New rule.
- (mostlyclean): Remove pic.
- (clean): Remove stamp-picdir.
-
-Fri Mar 24 16:55:48 1995 Pat Rankin (rankin@eql.caltech.edu)
-
- * vmsbuild.com (config.h): Add `#define NEED_basename'.
-
-Tue May 23 10:12:46 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * clock.c, getopt.c, strtod.c, vsprintf.c: Change from using LGPL
- to libio-style copyright.
- * getpagesize.c: Remove FSF copyright.
-
-Sat May 20 12:30:23 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
-
- Added improved VMS support from Pat Rankin:
-
- Fri Mar 17 18:40:36 1995 Pat Rankin (rankin@eql.caltech.edu)
-
- * vmsbuild.com: new file.
-
- * getpagesize.c (getpagesize): implement for VMS;
- * strerror.c (strerror, strerrno, strtoerrno): add rudimentary
- support for EVMSERR.
-
-Thu May 18 17:01:42 1995 Ken Raeburn <raeburn@kr-laptop.cygnus.com>
-
- Wed May 10 14:28:16 1995 Richard Earnshaw (rearnsha@armltd.co.uk)
-
- * floatformat.c (floatformat_arm_ext): Define.
-
-Tue May 16 13:30:59 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * basename.c, bcmp.c, getcwd.c, insque.c, rename.c, sigsetmask.c,
- strerror.c, strsignal.c: Remove FSF copyright.
- * sigsetmask.c: #include <sys/types.h> - seems to be needed by ISC.
-
-Mon May 15 19:53:17 1995 Per Bothner <bothner@kalessin.cygnus.com>
-
- * bcopy.c, bzero.c, memcmp.c, memcpy.c, memset.c, strchr.c,
- strrchr.c, strstr.c, vfork.c: Remove FSF Copyright, because this
- might contaminate libstdc++ with the LGPL. (OK'd by RMS 11 Oct 94.)
- * strchr.c, strrchr.c: Add cast to suppress const warning.
-
-Thu May 4 14:36:42 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cplus-dem.c: Use const instead of CONST. Don't include
- ansidecl.h directly.
-
-Wed Apr 19 01:30:27 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cplus-dem.c: Don't include libiberty.h. Do declare xmalloc and
- xrealloc.
- (-DMAIN): Don't rely on an externally-defined version number;
- instead, require the version number to be defined as a
- preprocessor macro. Handle the RS/6000 leading dot. Define
- xmalloc, xrealloc and fatal. Don't strip a leading underscore
- if we couldn't demangle the word.
-
-Tue Apr 4 13:03:51 1995 Stan Shebs <shebs@andros.cygnus.com>
-
- (Old mpw.c change descriptions retained for informational value.)
- * mpw.c (warning_threshold): Default to .4 sec.
- (overflow_count, current_progress): New globals.
- (warn_if_spin_delay): Include current progress type,
- such as program name, in message.
- (mpw_start_progress): Set current_progress variable from arg.
- (mpw_end_progress): Report spin delays by power-of-two-size
- buckets instead of constant-size buckets.
-
- * mpw.c: Clean up formatting, types, returns, etc.
- (ENOSYS): Define.
- (mpw_fread, mpw_fwrite): Define.
- (sleep): Define correctly.
-
- * mpw.c: New code to implement cursor spinning support.
- (umask): New function.
- (mpw_fopen, mpw_fseek, stat, fstat): Call PROGRESS.
-
- * mpw.c (mpw_basename, mpw_mixed_basename): New functions, find
- basenames for MPW and MPW/Unix filenames.
- (mpw_special_init): New function, calls Macsbug if desired.
-
- * mpw.c: Add GPL notice.
- (mpwify_filename): Add more transformations.
- (mpw_fopen): Call mpwify_filename on file names.
- (rename): Remove.
- (chdir, getcwd): Add simple definitions.
-
- * mpw.c: Random cleanups, remove unused code bits.
- Added copy of strerror.c for gcc's use.
- (stat, fstat, _stat): New versions based on Guido van Rossum code.
-
- * mpw.c (mpw_fseek): Make it work correctly when doing SEEK_CUR.
-
- * mpw.c (stat): Remove hack definition, get from sys/stat.h.
- (fork, vfork, etc): Print error messages if called.
- (getrusage, sbrk, environ, isatty, link, utime, mkdir, rmdir,
- rename, chown): Define.
-
- * mpw-config.in: New file, MPW version of configure.in.
- * mpw-make.in: New file, MPW version of Makefile.in.
- * mpw.c: New file, MPW compatibility routines.
-
-Fri Mar 24 14:10:30 1995 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * basename.c: Include config.h before checking for NEED_basename.
-
-Thu Mar 23 19:09:54 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * functions.def: Add DEFFUNC for basename.
-
- * basename.c: Only define basename if NEED_basename.
-
-Thu Mar 16 13:36:05 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * config.table: Fix --enable-shared logic for native builds.
-
-Mon Mar 13 11:05:11 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * cplus-dem.c (demangle_template): Demangle bool literals properly.
-
-Mon Mar 6 23:57:28 1995 Stu Grossman (grossman@cygnus.com)
-
- * strtol.c strtoul.c: Replace these with less buggy versions from
- NetBSD. (strtoul in particular couldn't handle base 16.)
-
-Wed Mar 1 15:59:01 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * config/mt-vxworks5 (HDEFINES): Define NO_SYS_PARAM_H.
-
- * clock.c: If NO_SYS_PARAM_H is defined, don't include
- <sys/param.h>.
- * getcwd.c, getpagesize.c, getruntime.c: Likewise.
-
-Fri Feb 17 15:40:55 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * getruntime.c (get_run_time): Don't assume that CLOCKS_PER_SEC is
- a number; ANSI appears to permit any expression, including a
- function call.
-
- * config.table (*-*-vxworks5*): Use mt-vxworks5 when configuring
- xiberty.
- * config/mt-vxworks5: New file.
-
-Thu Feb 9 14:19:45 1995 Ian Lance Taylor <ian@cygnus.com>
-
- * basename.c (basename): Change argument to be const.
-
-Wed Feb 8 18:06:52 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (lneeded-list): Don't worry about xmalloc.
-
-Sun Jan 15 00:40:36 1995 Jeff Law (law@snake.cs.utah.edu)
-
- * Makefile.in (distclean): Delete xhost-mkfrag.
-
-Thu Jan 12 16:54:18 1995 Jason Merrill <jason@phydeaux.cygnus.com>
-
- * Makefile.in (lneeded-list): If alloca.o is needed, so is xmalloc.o.
-
-Wed Jan 11 22:39:56 1995 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * hex.c: New file.
- * Makefile.in (REQUIRED_OFILES, CFILES): List it.
- (hex.o): Add dependencies.
-
- * cplus-dem.c (demangle_prefix): For GNU style constructor and
- destructor names, try demangling the remainder of the string.
-
-Wed Dec 28 00:49:15 1994 Ian Lance Taylor <ian@tweedledumb.cygnus.com>
-
- * vasprintf.c (int_vasprintf): New static function.
- (vasprintf): Use int_vasprintf. Removes assumption that va_list
- is assignment compatible.
-
-Sat Nov 5 19:29:12 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * Makefile.in (LIBCFLAGS): New variable.
- (FLAGS_TO_PASS): Pass it.
- (.c.o): Use it.
-
-Thu Nov 3 19:09:47 1994 Ken Raeburn <raeburn@cujo.cygnus.com>
-
- * getopt.c, getopt1.c: Do compile these functions under Linux,
- since many native versions are based on glibc but are buggy.
-
-Mon Oct 24 15:16:46 1994 Per Bothner <bothner@kalessin.cygnus.com>
-
- * vasprintf.c: Make 'format' arg be const, to avoid a mismatch
- with prototype in GNU libc. Support stdarg.h as well as varargs.h.
-
-Tue Oct 11 17:48:27 1994 Jason Merrill (jason@phydeaux.cygnus.com)
-
- * Makefile.in (REQUIRED_OFILES): Add vasprintf.o.
- * functions.def: Remove vasprintf.
-
-Wed Sep 14 17:04:55 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * xmalloc.c (first_break): New static variable.
- (xmalloc_set_program_name): Record sbrk (0) in first_break.
- (xmalloc): If memory allocation fails, try to report how much
- memory was allocated by the program up to this point.
- (xrealloc): Likewise.
-
-Sun Sep 04 17:58:10 1994 Richard Earnshaw (rwe@pegasus.esprit.ec.org)
-
- * Makefile.in (ERRORS_CC): New variable, defaulted to $(CC). Use it
- when linking dummy.
- * config.table: Add host RISCiX Makefile frag.
- * config/mh-riscix: New file.
-
-Thu Aug 25 17:29:44 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * Makefile.in (FLAGS_TO_PASS): Define.
- ($(RULE1)): Use $(FLAGS_TO_PASS).
-
-Wed Aug 24 17:08:47 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * vasprintf.c: Include <string.h>.
- (vasprintf): Add casts to void for va_arg to avoid gcc warnings.
- * xatexit.c: Declare malloc.
-
-Fri Aug 19 15:29:12 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_args): Fix a bug in previous patch (the
- one below).
-
-Thu Aug 18 14:37:14 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle args): Handle ARM repeat encoding where
- the type index is greater than 9.
-
-Wed Aug 17 16:13:49 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_qualified): accept optional '_' between
- qualified name. This is baecause the template name may end with
- numeric and can mixed up with the length of next qualified name.
-
-Wed Aug 3 05:52:14 1994 D. V. Henkel-Wallace (gumby@cygnus.com)
-
- * config/mt-sunos4: Use our standard location for cross-includes
- and cross-libs when the target is also a "host" environment (ie no
- newlib; includes and such don't belong to us). This is specific
- to the Cygnus Support environment.
-
-Tue Aug 2 15:25:12 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_template): demangle as xxx<'Q'> not
- xxx<ch=81>.
-
-Mon Aug 1 17:02:48 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (main): flush stdout to make pipe work.
-
-Sat Jul 16 12:56:32 1994 Stan Shebs (shebs@andros.cygnus.com)
-
- * config.table (*-*-cxux7*): Recognize.
- * floatformat.c (floatformat_m88110_ext) [HARRIS_FLOAT_FORMAT]:
- Harris-specific float format.
- * config/mh-cxux7: New file.
-
-Wed Jun 29 00:26:17 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * cplus-dem.c (demangle_template): Make sure that the result of
- consume_count doesn't index beyond the end of the string.
-
-Mon Jun 20 23:54:37 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * cplus-dem.c (gnu_special): Handle vtable mangling of gcc-2.4.5 and
- earlier. Improve test for new vtable mangling. Change output back
- to `virtual table'.
-
-Mon Jun 20 11:37:30 1994 Ian Lance Taylor (ian@sanguine.cygnus.com)
-
- * obstack.c: Always compile this code, even if using the GNU
- library. Avoids problems with relatively recent binary
- incompatibility.
-
-Thu Jun 16 17:54:01 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * cplus-dem.c: Include libiberty.h.
- (xmalloc, xrealloc, free): Don't declare.
- (strstr): Don't declare parameters.
- (xmalloc, xrealloc): Don't define.
- (long_options): Add no-strip-underscores.
- (main): Call xmalloc_set_program_name. Pass n in short options to
- getopt_long. Handle option 'n' to not strip underscores.
- (usage): Mention -n and --no-strip-underscores.
-
-Sun Jun 12 01:37:09 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c (demangle_template): Separate consecutive >'s with a
- space.
- (gnu_special): Demangle template and qualified names in a vtable name.
-
-Fri May 27 12:27:52 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- From gas-2.3 and binutils-2.4 net releases:
-
- Wed May 11 22:32:00 1994 DJ Delorie (dj@ctron.com)
-
- * makefile.dos: [new] Makefile for dos/go32
- * configure.bat: update for latest files
- * msdos.c: remove some functions now in libc.a
-
-Fri May 20 18:53:32 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * cplus-dem.c (gnu_special): Recognize thunks, as well as
- the new naming style for vtables (when -fvtable-thunks).
-
-Wed May 18 13:34:06 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * Makefile.in (XTRAFLAGS): Don't define.
- (.c.o, dummy.o): Don't use XTRAFLAGS.
- ($(RULE1)): Don't pass XTRAFLAGS down in recursive call.
-
-Fri May 13 16:02:12 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * vasprintf.c: New file.
- * Makefile.in, functions.def: Add it.
-
-Fri May 13 16:20:28 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c (demangle_fund_type): Grok bool.
-
-Fri May 6 14:44:21 1994 Steve Chamberlain (sac@cygnus.com)
-
- * config.table: Add go32
- * config/mh-go32: New template.
-
-Fri May 6 11:01:59 1994 D. V. Henkel-Wallace (gumby@rtl.cygnus.com)
-
- * config.table, config/mt-sunos4: config for when sun4 is cross target.
-
-Mon Apr 11 00:54:33 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
-
- * getopt.c [not __GNU_LIBRARY__] [__GCC__] [not __STDC__]:
- Declare strlen to return int. Don't include stddef.h.
-
-Fri Apr 1 00:38:17 1994 Jim Wilson (wilson@mole.gnu.ai.mit.edu)
-
- * getopt.c: Delete use of IN_GCC to control whether
- stddef.h or gstddef.h is included.
-
-Thu Apr 14 14:00:56 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_signature): Fix a bug in template function
- type numbering.
-
-Wed Apr 13 17:23:03 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_signature): Fix template function with arm
- style argument type number, Tn.
-
-Wed Apr 13 17:11:15 1994 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c (optable): Add new[] and delete[].
-
-Fri Apr 8 11:21:42 1994 Jim Kingdon (kingdon@deneb.cygnus.com)
-
- * argv.c (buildargv): Don't produce empty argument just because
- there is trailing whitespace.
-
-Wed Apr 6 11:42:14 1994 Kung Hsu (kung@mexican.cygnus.com)
-
- * cplus-dem.c (demangle_template): fix 'Q' qualified name bug.
- Handle 'p' same as 'P'.
- * cplus-dem.c (do_type): Handle 'p' same as 'P'.
-
-Sat Mar 26 12:00:13 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * floatformat.c (get_field, put_field): Fix off by one error in
- little endian case.
-
-Thu Mar 24 10:40:19 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * floatformat.c (floatformat_from_double): Pass unsigned char *,
- not char *, to put_field.
-
-Fri Mar 18 12:34:33 1994 Per Bothner (bothner@kalessin.cygnus.com)
-
- * memmove.c: Re-wrote; placed in public domain.
-
-Wed Mar 16 10:33:07 1994 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * cplus-dem.c (demangle_prefix): If ARM demangling, don't treat
- __Q* as a constructor.
-
-Mon Mar 14 12:26:02 1994 Ian Lance Taylor (ian@cygnus.com)
-
- * ieee-float.c: Removed; no longer used.
- * Makefile.in: Changed accordingly.
-
-Mon Mar 7 12:28:17 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * floatformat.c (get_field): Removed unused local variable i.
- (put_field): Removed unused local variable i.
-
-Sun Feb 27 21:50:11 1994 Jim Kingdon (kingdon@deneb.cygnus.com)
-
- * floatformat.c: New file, intended to replace ieee-float.c.
- * Makefile.in: Change accordingly.
-
-Thu Feb 24 11:51:12 1994 David J. Mackenzie (djm@rtl.cygnus.com)
-
- * getopt.c: Remove #ifdef GETOPT_COMPAT and #if 0 code.
- (_getopt_initialize): New function, broken out of _getopt_internal.
- (_getopt_internal):
- If long_only and the ARGV-element has the form "-f", where f is
- a valid short option, don't consider it an abbreviated form of
- a long option that starts with f. Otherwise there would be no
- way to give the -f short option.
-
-Thu Feb 10 14:44:16 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
-
- * getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC]:
- Test just __STDC__, not emacs.
-
-Wed Feb 9 00:14:00 1994 Richard Stallman (rms@mole.gnu.ai.mit.edu)
-
- * getopt.c [not __GNU_LIBRARY__] [__GNUC__] [not IN_GCC]
- [emacs] [not __STDC__]: Don't include stddef.h. Don't declare strlen.
-
-Fri Dec 24 19:43:00 1993 Noah Friedman (friedman@nutrimat.gnu.ai.mit.edu)
-
- * getopt.c (_NO_PROTO): Define before config.h is included.
-
-Mon Sep 20 15:59:03 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
-
- * getopt.c, getopt1.c [emacs || CONFIG_BROKETS]: Include
- <config.h> only under these, else "config.h".
-
-Thu Aug 12 18:16:49 1993 Roland McGrath (roland@churchy.gnu.ai.mit.edu)
-
- * getopt.c, getopt1.c [HAVE_CONFIG_H]: Include
- <config.h> instead of "config.h".
-
-Sun Feb 20 17:17:01 1994 Ian Lance Taylor (ian@lisa.cygnus.com)
-
- * concat.c: Check ANSI_PROTOTYPES rather than __STDC__ to decide
- whether to use prototypes or not.
- * strerror.c (const): Never undefine; let ansidecl.h handle it.
- * strsignal.c (const): Likewise.
-
-Thu Feb 17 13:27:35 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * xatexit.c (_xexit_cleanup): Declare as extern; don't initialize.
- Merging common and initialized variables need not be supported by
- ANSI C compilers.
- (xatexit): Initialize _xexit_cleanup if not already set.
- * xexit.c: Comment fix.
-
-Wed Feb 16 01:15:36 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * xmalloc.c: Don't declare xexit; it's declared in libiberty.h.
- (xrealloc): If oldmem is NULL, allocate with malloc, rather than
- assuming that realloc works correctly.
-
-Tue Feb 15 09:26:16 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * concat.c, ieee-float.c: Replace inclusion of <string.h>
- with explicit function declarations, as recommended by Ian Taylor.
-
-Sat Feb 12 10:31:11 1994 David J. Mackenzie (djm@rtl.cygnus.com)
-
- * xmalloc.c (xmalloc, xrealloc): Use PTR and size_t throughout.
- (malloc, realloc): Declare.
-
-Thu Feb 10 17:08:19 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * argv.c, basename.c: Include ansidecl.h and libiberty.h.
- * concat.c, fdmatch.c, getruntime.c, spaces.c: Likewise.
- * strerror.c, strsignal.c, xatexit.c, xexit.c: Likewise.
- * xmalloc.c: Likewise.
- * concat.c: Don't declare xmalloc. If __STDC__, use <stdarg.h>
- macros, not <varargs.h> macros.
- * spaces.c (spaces): Make return type const. Don't crash if
- malloc returns NULL.
- * strerror.c (struct error_info): Make name and msg fields const.
- (error_names): Make const.
- (strerrno): Make const.
- (strtoerrno): Make argument const.
- * strsignal.c (struct signal_info): Make name and msg fields
- const.
- (signal_names, sys_siglist): Make const.
- (strsignal, strsigno): Make const.
- (strtosigno): Make argument const.
- * xatexit.c: Declare parameter types.
- * xmalloc.c (name): Make const.
- (xmalloc_set_program_name): Make argument const.
- * Makefile.in (INCDIR): Define.
- (.c.o): Use $(INCDIR).
- (dummy.o): Likewise.
- (argv.o, basename.o): New targets; depend on libiberty.h.
- (concat.o, fdmatch.o, getruntime.o, spaces.o): Likewise.
- (strerror.o, strsignal.o, xatexit.o, xexit.o): Likewise.
- (xmalloc.o): Likewise.
- (cplus-dem.o): New target; depend on demangle.h.
- (getopt.o, getopt1.o): New targets; depend on getopt.h.
- (ieee-float.o): New target; depend on ieee-float.h.
- (obstack.o): New target; depend on obstack.h.
-
-Tue Feb 8 05:29:08 1994 David J. Mackenzie (djm@thepub.cygnus.com)
-
- Handle obstack_chunk_alloc returning NULL. This allows
- obstacks to be used by libraries, without forcing them
- to call exit or longjmp.
- * obstack.c (_obstack_begin, _obstack_begin_1, _obstack_newchunk):
- If CALL_CHUNKFUN returns NULL, set alloc_failed, else clear it.
- (_obstack_begin, _obstack_begin_1): Return 1 if successful, 0 if not.
-
-Tue Feb 8 00:32:28 1994 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * concat.c, ieee-float.c: Include <string.h>.
-
-Sun Feb 6 21:28:46 1994 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * xmalloc.c (xmalloc_set_program_name): New function.
- (xmalloc, xrealloc): Include the name in the error message, if set.
-
- * Replace atexit.c with xatexit.c.
- * Makefile.in (CFILES), functions.def: Change references.
-
-Sat Feb 5 14:02:32 1994 Stan Shebs (shebs@andros.cygnus.com)
-
- * getruntime.c (get_run_time): Use getrusage or times if
- HAVE_GETRUSAGE or HAVE_TIMES are defined.
-
-Fri Feb 4 15:49:38 1994 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * atexit.c: New file.
- * Makefile.in (CFILES), functions.def: Add it.
- * xexit.c: New file.
- * Makefile.in (CFILES, REQUIRED_OFILES): Add it.
- * xmalloc.c (xmalloc, xrealloc): Call xexit instead of exit.
- Change request for 0 bytes into request for 1 byte.
-
-Wed Feb 2 11:36:49 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * xmalloc.c (xmalloc, xrealloc): Print size using %lu, and cast to
- unsigned long, to avoid warnings.
-
-Fri Jan 28 17:49:06 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
-
- * dummy.c: Don't include time.h ever; always define clock_t as
- "unsigned long". Until gcc/fixincludes ensures that clock_t
- exists, __STDC__ isn't a sufficient test. And if clock() doesn't
- exist, clock_t probably doesn't either.
-
-Mon Jan 24 11:52:31 1994 Stan Shebs (shebs@andros.cygnus.com)
-
- * clock.c, getruntime.c: New files.
- * Makefile.in: Add to file lists.
- * functions.def (clock): Add to list.
- * dummy.c (time.h): Add if __STDC__.
- (clock_t): #define as "unsigned long" if not __STDC__.
-
-Tue Jan 11 11:27:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * strtod.c: Declare atof. From edler@jan.ultra.nyu.edu (Jan
- Edler).
-
-Tue Dec 28 14:17:30 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * Makefile.in (errors): Use CFLAGS as well as LDFLAGS when
- linking.
-
-Fri Dec 17 12:26:07 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c (demangle_arm_pt): New function. Common code
- for ARM template demangling.
- * cplus-dem.c (demangle_class_name): Use demangle_arm_pt.
- * cplus-dem.c (demangle_prefix): Likewise.
-
-Tue Nov 30 15:47:48 1993 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c (cplus_demangle_opname): Add CONST to please gcc.
-
-Sat Nov 27 11:05:50 1993 Fred Fish (fnf@cygnus.com)
-
- Merge changes from tom@basil.icce.rug.nl (Tom R.Hageman)
- * strerror.c, strsignal.c: As a small space optimization, don't
- include messages when they aren't actually used.
-
- Merge changes from takefive.co.at!joe (Josef Leherbauer)
- * cplus-dem.c (demangle_prefix, demangle_function_name,
- cplus_demangle_opname): Fixes for systems where cplus_marker
- is something other than '$'.
-
-Fri Nov 26 13:51:11 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * waitpid.c: Simple-minded approcimation to waitpid
- using vanilla wait.
- * functions.def, Makefile.in: Update accordingly,
-
-Thu Nov 18 18:01:15 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c(demangle_template): fix bug template instantiation
- with value of user defined type.
-
-Wed Nov 17 18:30:21 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c(cplus_demangle_opname): add the subject new function
- to support unified search of operator in class.
-
-Wed Nov 10 09:47:22 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- gcc -Wall lint:
- * strtoul.c (strtoul): use "(digit = *s) != '\0'" not just
- "digit = *s" as condition in while loop.
-
-Tue Nov 9 15:52:22 1993 Mark Eichin (eichin@cygnus.com)
-
- * Makefile.in: pass SHELL to recursive make
-
-Thu Nov 4 12:09:26 1993 Per Bothner (bothner@kalessin.cygnus.com)
-
- * vfprintf.c, vprintf.c, vsprintf.c: Make format arg
- be (const char*), for ANSI (and gcc w/fixproto) consistency.
-
-Thu Nov 4 08:29:04 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * config.table: Make *-*-hiux* use mh-hpux.
-
-Fri Oct 22 07:53:15 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * config.table: Add * to end of all OS names.
-
-Tue Oct 19 17:12:01 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * Makefile.in (lneeded-list): ensure that object file names are
- not duplicated, as multiple instances of the same object file in
- a library causes problems on some machines
-
-Mon Oct 18 21:59:28 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * strcasecmp.c, strncasecmp.c: Change u_char to unsigned char.
-
-Fri Oct 15 22:17:11 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * strncasecmp.c: new file, implements strncasecmp
- * strcasecmp.c: new file, implement strcasecmp
-
- * Makefile.in (CFILES): list these two new source files
-
- * functions.def: add strcasecmp and strncasecmp entries
-
-Fri Oct 15 14:53:05 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * strtoul.c (strtoul), strtol.c (strtol): Handle overflow
- according to ANSI C.
-
-Thu Oct 14 16:34:19 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c: add support of ARM global constructor/destructor,
- and 'G' for passing record or union in parameter.
-
-Wed Oct 13 13:36:19 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * Makefile.in: Fix comment to clarify that stuff in REQUIRED_OFILES
- should not be in functions.def.
-
-Wed Oct 13 13:13:38 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
-
- * functions.def: Removed xmalloc. Stuff in REQUIRED_OFILES should
- not be in functions.def.
-
-Mon Oct 4 18:26:39 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c: change globl constructor/destructor to proper name
-
-Tue Sep 28 18:11:07 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c: fix bug in constructor/destructor
-
-Tue Sep 28 16:20:49 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c: support both old and new _vt$... vtbl mangled names
-
-Fri Sep 24 19:07:16 1993 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c: Fix demangle_template prototype
-
-Fri Sep 24 17:32:55 1993 Kung Hsu (kung@cirdan.cygnus.com)
-
- * cplus-dem.c: fix template demangling
- * cplus-dem.c: fix const type demangling
- * cplus-dem.c: fix constructor/destructor, virtual table,
- qualifier, global constructor/destructor demangling
-
-Wed Sep 1 23:13:11 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * strsignal.c, strerror.c: Use fully-bracketed initializer to
- keep gcc -Wall happy.
-
-Fri Aug 27 10:30:09 1993 Jason Merrill (jason@deneb.cygnus.com)
-
- * cplus-dem.c (do_type): Add CONSTS to make gcc happy with last
- patch.
-
-Fri Aug 27 11:24:54 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- Patch from Paul Flinders:
- * cplus-dem.c (do_type): Deal with arrays.
-
-Tue Aug 24 14:23:50 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * cplus-dem.c (demangle_qualified: Deal with GNU format for more
- than 9 classes.
-
-Wed Aug 18 19:50:29 1993 Jason Merrill (jason@deneb.cygnus.com)
-
- * Makefile.in (dummy.o): Redirect to /dev/null to avoid "variable
- not initialized" warnings under HP/UX
-
-Sun Aug 15 20:42:40 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * strerror.c: Move include of stdio.h after sys_errlist #define.
- Also remove NULL definition (stdio.h always defines NULL, so it
- never did anything but clutter up the code).
-
-Sat Aug 14 14:21:49 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * Makefile.in, functions.def: handle xmalloc.c
-
- * xmalloc.c: provide xmalloc and xrealloc functions
-
-Thu Aug 12 17:38:57 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * cplus-dem.c: Fix a comment.
-
-Sat Aug 7 13:56:35 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * getopt1.c: Declare const the way getopt.c does.
-
-Fri Aug 6 17:03:13 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * obstack.c, alloca.c: Update from FSF.
- * getopt.c, getopt1.c: Update to current FSF version, which
- doesn't use alloca.
-
-Tue Jul 27 14:03:57 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * Makefile.in (demangle): Add the target with a message saying
- where demangle went.
-
-Mon Jul 26 15:49:54 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * Makefile.in: Remove obsolete `demangle' target.
-
-Thu Jul 22 08:31:01 1993 Fred Fish (fnf@deneb.cygnus.com)
-
- * cplus-dem.c (arm_special): Apply patch from arg@lucid.com to
- avoid infinite loop on vtbl symbols with disambiguating "junk"
- tacked on the end.
-
-Mon Jul 19 14:10:37 1993 david d `zoo' zuhn (zoo@rtl.cygnus.com)
-
- * strsignal.c: work around some systems losing definitions of
- sys_siglist
-
- * config/mh-lynxos: this system has a losing definition of
- sys_siglist
-
- * config.table: use mh-lynxos for *-*-lynxos
-
-Mon Jul 19 17:08:52 1993 Ken Raeburn (raeburn@rtl.cygnus.com)
-
- * config.table: Add support for HPPA BSD hosts.
-
- * config/mh-hpbsd: New file.
-
-Mon Jul 12 18:00:40 1993 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in (TAGS): make work when srcdir != objdir.
-
-Sun Jun 27 15:35:31 1993 David J. Mackenzie (djm@thepub.cygnus.com)
-
- * cplus-dem.c (main): Add long options, including --help and
- --version.
- (usage): New function from code in main.
-
-Tue Jun 22 11:37:38 1993 Per Bothner (bothner@deneb.cygnus.com)
-
- * config.table: New shell scipt, sourced by both ./configure,in
- and ../xiberty/configure.in, to avoid maintainance lossages.
- * configure.in and ../xiberty/configure.in: Use config.table.
-
- * configure.in: Don't use mh-aix for AIX 3.2, only for 3.1.
- * configure.in: Map *-*-irix* (except irix4) to mh-sysv.
- * ../xiberty/configure.in: Update from ./configure.in.
-
-Tue Jun 15 17:05:31 1993 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * Makefile.in: remove parentdir support
-
-Wed May 26 12:59:09 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * cplus-dem.c (xrealloc): Match definition with prototype.
-
-Tue May 25 14:27:51 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * cplus-dem.c (demangle_prefix): Demangle cfront
- local variables as an extension to ARM demangling.
-
-Fri May 21 09:53:57 1993 Jim Kingdon (kingdon@lioth.cygnus.com)
-
- * ieee-float.c: Don't require pointers to double to be aligned.
-
-Tue May 18 17:12:10 1993 Fred Fish (fnf@cygnus.com)
-
- (merge changes from dlong@cse.ucsc.edu)
- * cplus-dem.c (consume_count): Simplify.
- * cplus-dem.c (arm_pt, demangle_class_name): New functions.
- * cplus-dem.c (various): Calls to arm_pt, demangle_class_name.
-
- * cplus-dem.c (xmalloc, xrealloc, strstr): Make extern decls into
- full prototypes.
- * cplus-dem.c (free): Add prototype.
- * cplus-dem.c (optable): Fully bracketize initializer.
-
-Fri May 14 17:13:05 1993 Per Bothner (bothner@cygnus.com)
-
- * cplus-dem.c: Whether initial underscores are stripped
- depends on the external variable prepends_underscore
- (which is generated by the binutils Makefile).
-
-Fri May 14 07:32:20 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
-
- * cplus-dem.c (mop_up, arm_special): Remove some unused variables.
-
-Tue May 4 20:31:59 1993 Fred Fish (fnf@cygnus.com)
-
- * cplus-dem.c (consume_count): Return zero if arg does not
- start with digit, and don't consume any input.
-
-Tue May 4 08:10:28 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * Makefile.in (demangle): Use ${srcdir} not $^.
-
- * strtod.c: New file, needed at least for BSD 4.3.
-
-Sun May 2 11:30:42 1993 Fred Fish (fnf@cygnus.com)
-
- * strsignal.c (sys_siglist): For ANSI compilations, type is
- "const char *const". Also remove conditionalization on __STDC__
- since const is defined away for non-ANSI.
-
-Wed Apr 28 19:29:55 1993 Ken Raeburn (raeburn@deneb.cygnus.com)
-
- * configure.in: Recognize *-*-hpux.
- * config/mh-hpux: New file.
-
-Tue Apr 27 15:22:19 1993 Per Bothner (bothner@cygnus.com)
-
- * tmpnam.c: Added ANSI tmpnam() function.
- * functions.def, Makefile.in: Update accordingly.
-
-Tue Apr 27 13:38:38 1993 Peter Schauer (pes@regent.e-technik.tu-muenchen.de)
-
- * cplus-dem.c (demangle_function_name): Get the demangling of
- stop__1A right.
-
-Fri Apr 16 23:48:24 1993 Jim Kingdon (kingdon at calvin)
-
- * cplus-dem.c: Declare strstr return type.
-
-Fri Mar 26 12:01:26 1993 Jim Kingdon (kingdon@cygnus.com)
-
- * strsignal.c: Add some AIX signals.
-
-Thu Mar 25 15:17:23 1993 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in (MAKEOVERRIDES): Define to be empty.
-
-Wed Mar 24 01:59:25 1993 david d `zoo' zuhn (zoo at poseidon.cygnus.com)
-
- * Makefile.in: add installcheck & dvi targets
-
-Thu Mar 18 14:05:44 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * ieee-float.c: New file, moved from ../gdb (since it is
- needed by ../opcode/m68k-dis.c).
-
-Tue Mar 2 17:47:31 1993 Fred Fish (fnf@cygnus.com)
-
- * cplus-dem.c: Replace all references to cfront with ARM.
-
-Fri Feb 26 00:17:07 1993 Per Bothner (bothner@rtl.cygnus.com)
-
- * cplus-dem.c: Fix main program (when compiled with -DMAIN)
- to be more useful as a filter.
-
-Sat Feb 20 21:41:39 1993 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * Makefile.in (install_to_libdir, install_to_tooldir): Go into the
- destination directory before running $(RANLIB), in case that
- program tries to create a file in the current directory as part of
- its work.
-
-Thu Feb 18 23:00:19 1993 John Gilmore (gnu@cygnus.com)
-
- * strsignal.c (sys_siglist): Remove yet another *%^&%&$# "const"
- because BSD 4.4 lacks one. Isn't this fun?
-
-Thu Feb 18 11:24:25 1993 Fred Fish (fnf@cygnus.com)
-
- * cplus-dem.c (demangle_signature): Set func_done after
- demangling a template.
- * cplus-dem.c (demangle_template): Fix several small bugs
- in demangling GNU style templates.
- * cplus-dem.c (demangle_prefix): Fix for templates in GNU
- style constructors.
- * cplus-dem.c (gnu_special): Fix for templates in GNU style
- static data members.
-
-Tue Feb 16 17:28:35 1993 Fred Fish (fnf@cygnus.com)
-
- * cplus-dem.c (demangle_signature): Modify to include type
- modifiers like static and const in remembered types.
-
-Thu Feb 11 22:20:47 1993 Fred Fish (fnf@cygnus.com)
-
- * cplus-dem.c (demangled_qualified): Add new parameter that tells
- whether to prepend or append the qualifiers.
- * cplus-dem.c (string_prepends): Used now, remove #if 0.
- * cplus-dem.c (demangle_signature): Call demangle_qualified
- with prepending.
- * cplus-dem.c (gnu_special): Recognize static data members that
- use qualified names.
- * cplus-dem.c (demangle_qualified): Accumulate qualifiers in a
- temporary buffer and the prepend or append them to the result,
- as specified by the new "append" flag.
- * cplus-dem.c (do_type): Call demangled_qualified with
- appending.
-
-Mon Dec 28 10:47:19 1992 Ken Raeburn (raeburn@cygnus.com)
-
- * strsignal.c (signal_table): Now const.
- (init_signal_tables): Variable eip now points to const.
-
- * strerror.c (error_table): Now const.
- (init_error_tables): Variable eip now points to const.
-
-Tue Dec 15 15:36:50 1992 Per Bothner (bothner@cygnus.com)
-
- * memchr.c (memchr): New (ANSI standard) function.
- * Makefile.in, functions.def: Added memchr.
- * Makefile.in (AR_FLAGS): Use rc instad of non-standard cq.
-
-Wed Dec 2 22:49:10 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * getopt.c: remove use of USG around <alloca.h>, which never meant
- anything anyway
-
- * config/mh-{aix,apollo68,ncr3000,sysv,sysv4}: removed definitions
- of USG and USGr4
-
-Thu Nov 19 03:09:33 1992 Brendan Kehoe (brendan@lisa.cygnus.com)
-
- * cplus-dem.c (demangle_fund_type): Recognize `w', a wide character;
- it's now a type according to the ANSI X3J16 working paper; output
- "wchar_t" for it.
- (demangle_template): Accept `w' as an integral type.
- (xmalloc, xrealloc): Use `char *', not `PTR'. Cast calls to their
- counterparts malloc and realloc to `char *'.
- (main): Exit with a 0 status.
- * Makefile.in (demangle): Don't expect the user to define
- DEMANGLE, instead force to be cplus-dem.c. Look in $(srcdir)/../include
- for demangle.h. Pass it any HDEFINES or XTRAFLAGS.
-
-Wed Nov 18 18:56:20 1992 John Gilmore (gnu@cygnus.com)
-
- * Makefile.in (AR_FLAGS): Avoid verbosity.
- * config/mh-sysv4: Remove AR_FLAGS override, use INSTALL=cp,
- replace USGr4 with HAVE_SYSCONF.
- * config/mh-solaris: Remove; mh-sysv4 works now.
- * getpagesize.c: Replace USGr4 with HAVE_SYSCONF.
- * configure.in: Simplify host matching table, remove separate
- solaris config file.
-
-Sun Nov 15 09:35:16 1992 Fred Fish (fnf@cygnus.com)
-
- * configure.in (i[34]86-*-solaris2*): Add, use mh-sysv4.
-
-Tue Nov 3 21:27:03 1992 Brendan Kehoe (brendan@cygnus.com)
-
- * cplus-dem.c (xmalloc, xrealloc): Add decls.
- (remember_type): Don't cast xmalloc.
- (string_need): Likewise; don't cast xrealloc either.
-
-Fri Oct 23 08:52:01 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in, functions.defs, rename.c: added simple
- implementation of rename, since some binutils programs use it.
-
-Thu Oct 15 15:18:22 1992 Per Bothner (bothner@cygnus.com)
-
- * strsignal.c: Add appropriate 'const' to sys_siglist
- extern declaration (if __STDC__). (Needed for Linux.)
- * strsignal.c (strsignal): Add cast to remove const-ness.
-
-Fri Oct 9 03:22:55 1992 John Gilmore (gnu@cygnus.com)
-
- * Makefile.in (needed.awk, needed2.awk): Remove erroneous \'s
- before "'s, diagnosed by BSD 4.4 awk.
-
-Thu Oct 8 15:25:12 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in: create config.h and needed-list through $(CONFIG_H)
- and $(NEEDED_LIST), to give some hooks for xiberty.
-
-Thu Oct 1 23:31:42 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * configure.in: use cpu-vendor-triple instead of nested cases
-
-Wed Sep 30 11:26:59 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in, argv.c, basename.c, bcmp.c, bcopy.c, bzero.c,
- concat.c, cplus-dem.c, fdmatch.c, getcwd.c, getopt.c, getopt1.c,
- getpagesize.c, insque.c, memcmp.c, memcpy.c, memmove.c, memset.c,
- obstack.c, sigsetmask.c, spaces.c, strchr.c, strerror.c,
- strrchr.c, strsignal.c, strstr.c, vfork.c, vsprintf.c:
- Convert from using GPL to LGPL.
-
-Sat Sep 26 04:01:30 1992 John Gilmore (gnu@cygnus.com)
-
- * Makefile.in (errors): Leave dummy.o and dummy around so that
- we can see how the needed list was generated (it's sometimes wrong).
- (mostlyclean): Remove them.
-
-Mon Sep 21 14:50:42 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * getcwd.c: supply a default if MAXPATHLEN is not defined.
-
- * config/mh-irix4: set EXTRA_OFILES to alloca.o, from WRS.
-
-Wed Sep 9 12:41:48 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in: Use XTRAFLAGS when compiling, so that xiberty works
- when cross-compiling.
-
-Thu Sep 3 13:29:39 1992 K. Richard Pixley (rich@sendai.cygnus.com)
-
- * cplus-dem.c: (demangle_prefix): reduction in strength of strstr
- as a time optimization.
-
- * cplus-dem.c (cplus_demangle): remove strpbrk test. Appears to
- be more expensive than simply demangling.
-
- * cplus-dem.c (cplus_match): new function.
-
-Tue Sep 1 15:24:04 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * cplus-dem.c: #include <stdio.h>, to define NULL.
- Define current_demangling_style.
-
-Sun Aug 30 17:58:19 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * cplus-dem.c: New file, moved from ../gdb.
- * cplus-dem.c (set_cplus_marker_for_demangling): New exported
- function, to avoid compiling in target-dependency for CPLUS_MARKER.
- * cplus-dem.c (cplus_demangle): Allow demangling style option
- to be passed as a parameter, but using the global variable
- current_demangling_style as a default.
- * Makefile.in: Update for cplus-dem.c
-
-Sat Aug 29 10:44:09 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.c: Merge in comment changes from FSF version. Now
- matches the FSF version exactly.
-
-Fri Aug 28 18:39:08 1992 John Gilmore (gnu@cygnus.com)
-
- * obstack.c (CALL_FREEFUN): Can't use ?: with void values (at
- least on losing DECstations!); use if-then-else instead.
-
-Wed Aug 19 14:40:34 1992 Ian Lance Taylor (ian@cygnus.com)
-
- * Makefile.in: always create installation directories.
-
-Mon Aug 10 17:33:40 1992 david d `zoo' zuhn (zoo at cirdan.cygnus.com)
-
- * Makefile.in: clean up definition of CFILES, more comments
-
-Sat Aug 8 23:10:59 1992 Fred Fish (fnf@cygnus.com)
-
- * getopt.c (my_index): Make first arg const to match strchr,
- which it sometimes is remapped to.
-
-Sat Aug 1 13:48:50 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.c (DEFAULT_ALIGNMENT): Update to match FSF version.
- * obstack.c (_obstack_begin): Initialize use_extra_arg.
- * obstack.c (_obstack_begin_1): New, from FSF version.
-
-Mon Jul 20 21:07:58 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.c (CALL_CHECKFUN, CALL_FREEFUN): Use use_extra_arg and
- extra_arg.
- * obstack.c (_obstack_begin): Remove area_id and flags arguments
- (previously added for mmalloc support, interface has changed).
- Also convert flags usage to use use_extra_arg and maybe_empty_object.
-
-Fri Jul 10 00:41:53 1992 Fred Fish (fnf@cygnus.com)
-
- * argv.c: Move expandargv inline and eliminate static variables.
- Rewrite to always allocate in powers of two. Fix to return an
- argv with a single null string arg if passed a null string.
-
-Fri Jul 3 20:27:29 1992 Fred Fish (fnf@cygnus.com)
-
- * random.c, sigsetmask.c, strerror.c, strsignal.c: Remove
- "(void)" casts from function calls where the return value is
- ignored, in accordance with GNU coding standards.
-
-Mon Jun 29 10:54:19 1992 Fred Fish (fnf at cygnus.com)
-
- * bcopy.c, strerror.c, strsignal.c: Lint.
-
-Thu Jun 25 09:18:41 1992 K. Richard Pixley (rich@rtl.cygnus.com)
-
- * getopt.c: merge changes from make.
-
-Thu Jun 25 04:43:22 1992 John Gilmore (gnu at cygnus.com)
-
- * alloca.c: Incorporate fixes from gdb/alloca.c.
- FIXME: Eventually move gdb's alloca configuration files here,
- and remove gdb/alloca.c and its Makefile.in support.
-
-Tue Jun 23 21:56:30 1992 Fred Fish (fnf@cygnus.com)
-
- * dummy.c: Define NOTHING to /*nothing*/, change return type
- of main to int and return zero.
- * functions.def: Supply NOTHING as the fourth arg to macros
- that don't have an explicit arg, to satisfy picky preprocessors.
-
-Wed Jun 17 18:13:58 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Clean up *clean rules, as per standards.texi.
-
-Tue Jun 16 16:11:59 1992 K. Richard Pixley (rich@rtl.cygnus.com)
-
- * getopt.c, getopt1.c: merged largely gratuitous, mostly
- whitespace diffs from other prep distributions.
-
-Mon Jun 15 12:25:46 1992 Fred Fish (fnf@cygnus.com)
-
- * config/mh-ncr3000 (INSTALL): Don't use /usr/ucb/install,
- it is broken on ncr 3000's.
-
-Mon Jun 15 01:03:26 1992 John Gilmore (gnu at cygnus.com)
-
- * sigsetmask.c: Rewrite. Old one was very confused about its
- arguments and result. New one can't do much, but at least knows
- what it can't do, and it's good enough for GDB's use.
-
-Sun Jun 14 15:17:40 1992 Stu Grossman (grossman at cygnus.com)
-
- * functions.def: Use proper prototype for strtoul.
-
-Fri Jun 12 19:22:40 1992 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in: Add random.c.
- * config/mh-*: Use "true" rather than "echo >/dev/null" for ranlib.
- * configure.in: update solaris2 config.
-
-Wed Jun 10 16:31:29 1992 Fred Fish (fnf@cygnus.com)
-
- * random.c: Add for random() and srandom().
- * functions.def: Add random
-
-Tue Jun 9 17:27:18 1992 Fred Fish (fnf@cygnus.com)
-
- * config/{mh-ncr3000, mh-sysv4}: Add definition for INSTALL
- using /usr/ucb/install.
-
-Mon Jun 1 13:20:17 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * strerror.c: Kludge to guard against a conflict with
- possible declaration of sys_errlist in errno.h.
-
-Sun May 31 15:07:47 1992 Mark Eichin (eichin at cygnus.com)
-
- * configure.in, config/mh-solaris: add solaris2 config support.
-
-Fri May 29 17:23:23 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * sigsetmask.c: #ifdef out sigsetmask if SIG_SETMASK
- is not defined (should be defined in signal.h, says Posix.).
-
-Mon May 18 17:35:04 1992 K. Richard Pixley (rich@cygnus.com)
-
- * getopt.c: merged changes from make-3.62.11.
-
-Fri May 8 14:53:07 1992 K. Richard Pixley (rich@cygnus.com)
-
- * getopt.c: merged changes from bison-1.18.
-
-Tue May 5 11:51:40 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * Makefile.in: Don't have $(EXTRA_OFILES) depend on config.h,
- since that introduces a circular dependency.
- ($(EXTRA_OFILES) are used to build config.h.)
-
- * strtoul.c: Fixes to handle non-decimal bases better.
-
-Wed Apr 22 09:27:51 1992 Fred Fish (fnf@cygnus.com)
-
- * config/mh-ncr3000: Replace MINUS_G with CFLAGS.
- * Makefile.dos: Finish MINUS_G eradication.
- * Makefile.in (CFILES): Add strsignal.c.
- * Makefile.in (REQUIRED_OFILES): Add strerror.o strsignal.o
- * Makefile.in (needed-list): Split creation of errors file to
- separate make target.
- * Makefile.in (config.h, needed2.awk, errors): New targets.
- * Makefile.in (clean): Split to multiple lines, add needed2.awk
- and config.h.
- * dummy.c (DEFFUNC, DEFVAR): Add defines and undefs.
- * functions.def (strerror): Remove from optional list.
- * functions.def (sys_nerr, sys_errlist, sys_siglist): DEFVAR's
- * functions.def (strerror, psignal): DEFFUNC's
- * strerror.c: Rewrite from scratch to use sys_errlist only if
- available, add errno_max(), add strerrno(), add strtoerrno(),
- add test driver.
- * strsignal.c: New file, signal equivalent to strerror.c.
- Uses sys_siglist if available, defines signo_max(), strsignal(),
- strsigno(), strtosigno(), psignal(), and test driver.
-
-Mon Apr 20 20:49:32 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in: do not print recursion line.
-
- * Makefile.in: allow CFLAGS to be passed in from command line.
- Removed MINUS_G. Default CFLAGS to -g.
-
-Mon Apr 20 12:57:46 1992 Per Bothner (bothner@rtl.cygnus.com)
-
- * config/mh-aix: New. EXTRA_OFILES lists copysign.o,
- so libg++ users don't have to be inconvenienced by a
- libc.a bug (libc.a needs copysign, but doesn't define it!).
- * configure.in: Use config/mh-aix.
- * strtoul.c: Handle '-' as required by ANSI.
- Clean up radix handling.
- * strstr.c: Fix buggy algorithm.
- * Makefile.in: Change so that ${EXTRA_OFILES} is
- appended to needed-list (which is used by libg++).
-
-Fri Apr 10 22:51:41 1992 Fred Fish (fnf@cygnus.com)
-
- * configure.in: Recognize new ncr3000 config.
- * config/mh-ncr3000: New config file.
-
-Wed Apr 1 23:31:43 1992 John Gilmore (gnu at cygnus.com)
-
- * argv.c, dummy.c: Lint.
-
-Tue Mar 31 18:46:44 1992 Fred Fish (fnf@cygnus.com)
-
- * config/mh-sysv4: New config file.
- * configure.in (host_makefile_frag): Set to config/mh-sysv4 for
- host_os == sysv4.
- * getpagesize.c: For SVR4, use sysconf(_SC_PAGESIZE) to get
- pagesize.
-
-Sun Mar 29 12:26:42 1992 John Gilmore (gnu at cygnus.com)
-
- * getopt.c: Lint.
-
-Fri Mar 27 08:32:55 1992 Fred Fish (fnf@cygnus.com)
-
- * functions.def (alloca): Fix return type and args to avoid
- type clash with gcc's builtin alloca.
-
-Tue Mar 24 23:33:42 1992 K. Richard Pixley (rich@cygnus.com)
-
- * configure.in, config/mh-irix4: irix4 support.
-
- * Makefile.in, functions.def, alloca.c: added alloca.
-
-Tue Mar 24 17:34:46 1992 Stu Grossman (grossman at cygnus.com)
-
- * obstack.c (CALL_FREEFUN): Make it compile on DECstations.
-
-Thu Mar 19 13:57:42 1992 Fred Fish (fnf@cygnus.com)
-
- * argv.c: Fix various external function definitions to be
- correct in an ANSI compilation environment.
-
-Sat Mar 14 17:28:17 1992 Fred Fish (fnf@cygnus.com)
-
- * obstack.c: Changes to support calling mmalloc functions,
- which take an additional argument over malloc functions.
-
-Fri Mar 6 22:01:10 1992 K. Richard Pixley (rich@cygnus.com)
-
- * added check target.
-
-Thu Feb 27 22:19:39 1992 Per Bothner (bothner@cygnus.com)
-
- * argv.c: #include alloca-conf.h (needed by AIX).
-
-Wed Feb 26 18:04:40 1992 K. Richard Pixley (rich@cygnus.com)
-
- * Makefile.in, configure.in: removed traces of namesubdir,
- -subdirs, $(subdir), $(unsubdir), some rcs triggers. Forced
- copyrights to '92, changed some from Cygnus to FSF.
-
-Sat Feb 22 01:09:21 1992 Stu Grossman (grossman at cygnus.com)
-
- * argv.c: Check in Fred's version which fixes problems with
- alloca().
-
-Fri Feb 7 21:46:08 1992 Stu Grossman (grossman at cygnus.com)
-
- * makefile.dos: Remove NUL to keep patch from failing.
-
-Thu Jan 30 22:48:41 1992 Stu Grossman (grossman at cygnus.com)
-
- * getopt.c (_getopt_internal): Fix usage of enum has_arg.
-
-Mon Jan 20 18:53:23 1992 Stu Grossman (grossman at cygnus.com)
-
- * getopt.c, getopt1.c, ../include/getopt.h: Get latest versions.
-
-Sat Jan 18 16:53:01 1992 Fred Fish (fnf at cygnus.com)
-
- * argv.c: New file to build and destroy standard argument
- vectors from a command string.
-
- * Makefile.in: Add argv.c and argv.o to appropriate macros.
-
-Fri Dec 20 12:12:57 1991 Fred Fish (fnf at cygnus.com)
-
- * configure.in: Change svr4 references to sysv4.
-
- * rindex.c: Declare return type of externally used function
- strrchr().
-
-Thu Dec 19 18:35:03 1991 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in: Remove "***" in normal output, since Make produces
- this on errors, and it's convenient to search for.
-
-Tue Dec 17 23:21:30 1991 Per Bothner (bothner at cygnus.com)
-
- * memcmp.c, memcpy.c, memmove.c, memset.c, strchr.c, strrchr.c:
- New ANSI functions. The old non-ANSI functions (such as bcopy)
- should be avoided.
- * bcopy.c: Fix to correctly handle overlapping regions.
- * index.c, rindex.c: Re-write in terms of strchr() and strrchr().
- * functions.def: Add the new functions.
- * functions.def: Add 4th parameter to DEF macro,
- an ansidecl.h-style prototype.
- * dummy.c: Use expanded DEF macro to create a dummy function
- call, with correct parameter types. (This avoids some
- complaints from gcc about predefined builtins.)
-
- Move the functionality of config/mh-default into Makefile.in.
- This avoid duplication, and simplifies things slightly.
- * Makefile.in: Tweak so we don't need config/mh-default.
- * README: Update.
- * configure.in: No longer need config/mh-default.
- * config/mh-default: Deleted.
- * config/mh-sysv: Remove lines copied from old mh-default.
-
-Tue Dec 17 05:46:46 1991 John Gilmore (gnu at cygnus.com)
-
- * fdmatch.c (fdmatch): Don't compare st_rdev, which is for
- 'mknod' device numbers.
-
-Mon Dec 16 12:25:34 1991 Fred Fish (fnf at cygnus.com)
-
- * fdmatch.c, Makefile.in: Add new function that takes two
- open file descriptors and returns nonzero if they refer to
- the same file, zero otherwise. (used in gdb)
-
-Wed Dec 11 17:40:39 1991 Steve Chamberlain (sac at rtl.cygnus.com)
- From DJ:
- * msdos.c: stub functions for dos.
- * makefile.dos, configdj.bat: new.
- * getopt.c: Don't include alloca-conf.h in a GO32 world.
-
-
-Tue Dec 10 04:14:49 1991 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * Makefile.in: infodir belongs in datadir.
-
-Fri Dec 6 23:26:45 1991 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * Makefile.in: remove spaces following hyphens because bsd make
- can't cope. added standards.text support. install using
- INSTALL_DATA.
-
- * configure.in: remove commontargets as it is no longer a
- recognized hook.
-
-Thu Dec 5 22:46:46 1991 K. Richard Pixley (rich at rtl.cygnus.com)
-
- * Makefile.in: idestdir and ddestdir go away. Added copyrights
- and shift gpl to v2. Added ChangeLog if it didn't exist. docdir
- and mandir now keyed off datadir by default.
-
-Fri Nov 22 19:15:29 1991 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in: find-needed.awk does not fit in 14 chars.
-
- * Makefile.in: Suppress error checking when compiling the test
- program, because Ultrix make/sh aborts there due to a bug.
-
-Fri Nov 22 12:23:17 1991 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in: Re-did how EXTRA_OFILES is used to be more useful.
- * README: Explained how the auto-configuration works,
- and how to add new files and/or configurations.
-
-Fri Nov 22 09:45:23 1991 John Gilmore (gnu at cygnus.com)
-
- * strtoul.c: Avoid defining ULONG_MAX if already defined;
- cast a const char * to char * for pedants.
-
- * getopt.c: Only define "const" after local include files get to,
- and only if they haven't defined it.
-
-Thu Nov 21 16:58:53 1991 John Gilmore (gnu at cygnus.com)
-
- * getcwd.c (remove getwd.c): GNU code should call getcwd(). We
- emulate it with getwd() if available. This avoids callers having
- to find a MAXPATHLEN or PATH_MAX value from somewhere.
- * Makefile.in, functions.def: getwd->getcwd.
- * configure.in: Use generic case for every system.
- * config/mh-{delta88,mach,rs6000,svr4}: Remove.
- * config/mh-sysv: Use default handling, just add -DUSG.
-
-Thu Nov 14 10:58:05 1991 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in, config/mh-default: Re-do make magic
- so that for the default ("automatic") mode we only
- compile the files we actually need. Do this using
- a recursive make: The top-level generates the list
- of needed files (loosely, the ones missing in libc),
- and then passes that list to the recursive make.
- * config/mh-mach: Remove obsolete STRERROR-{C,O} macros.
-
-Tue Nov 12 19:10:57 1991 John Gilmore (gnu at cygnus.com)
-
- RS/6000 host support (grumble).
-
- * configure.in: Build alloca-conf.h file from alloca-norm.h
- (everything else) or alloca-botch.h (rs/6000).
- * Makefile.in: Include . on the include path.
- * getopt.c: Use alloca-conf.h.
- * alloca-norm.h: How to declare alloca on reasonable machines.
- * alloca-botch.h: How to declare alloca on braindead machines.
-
-Tue Nov 12 09:21:48 1991 Fred Fish (fnf at cygnus.com)
-
- * concat.c : New file, like concat() in gdb but can take a
- variable number of arguments rather than fixed at 3 args. For
- now, client applications must supply an xmalloc(), which is a
- front end function to malloc() that deals with out-of-memory
- conditions.
-
- * Makefile.in: Add concat.c and concat.o to appropriate macros.
-
-Sat Nov 9 13:29:59 1991 Fred Fish (fnf at cygnus.com)
-
- * config/mh-svr4: Add sigsetmask to list of required functions.
-
-Sun Nov 3 11:57:56 1991 Per Bothner (bothner at cygnus.com)
-
- * vsprintf.c: New file.
- * functions.def, Makefile.in: Add vsprintf.
-
-Sun Oct 27 16:31:22 1991 John Gilmore (gnu at cygnus.com)
-
- * configure.in, config/mh-rs6000: Add rs/6000 host support.
- * Makefile.in: Compile with debug info.
-
-Fri Oct 25 17:01:12 1991 Per Bothner (bothner at cygnus.com)
-
- * Makefile.in, configure.in, and new files: dummy.c, functions.def,
- config/mf-default: Added a default configuration mode,
- which includes into libiberty.a functions that are "missing" in libc.
- * strdup.c, vprintf.c, vfprintf.c: New files.
-
-Thu Oct 24 02:29:26 1991 Fred Fish (fnf at cygnus.com)
-
- * config/hmake-svr4: New file.
-
- * config/hmake-sysv: Add HOST_CFILES and HOST_OFILES.
-
- * basename.c, bcmp.c, bcopy.c, bzero.c, getpagesize.c getwd.c,
- index.c, insque.c, rindex.c, spaces.c, strstr.c, vfork.c: New
- files containing either portable C versions or emulations using
- native library calls.
-
- * strerror.c: Add copyright, internal documentation, etc.
-
- * strtol.c: Replace hardwired hex constants with some more
- portable macros. Remove illegal (according to gcc) cast.
-
- * strtoul.c: Replace hardwired hex constant with more portable
- macro.
-
- * Makefile.in: Move TARGETLIB and CFLAGS where makefile fragments
- can override them. Add new source and object file names to CFILES
- and OFILES respectively.
-
- * configure.in: Add support for SVR4 makefile fragments.
-
-Tue Oct 22 19:00:23 1991 Steve Chamberlain (steve at cygnus.com)
-
- * Makefile.in: Move RANLIB, AR and AR_FLAGS to where they can be
- over-ridden by config/hmake-*
- * configure.in: added m88kcvs to sysv list
-
-Fri Oct 4 01:29:08 1991 John Gilmore (gnu at cygnus.com)
-
- * Makefile.in: Most hosts need strerror, but one or two don't,
- and they override these definitions in the host-dependent makefile
- fragment.
- * config/hmake-mach: The odd man out on strerror -- it's supplied.
- * strerror.c: New file.
-
- * strtol.c, strtoul.c: Add strtol to libiberty, since Mach lacks
- it and bfd uses it.
- * configure.in, Makefile.in, config/hmake-mach: Only configure
- strtol & strotoul in on Mach.
-
-Tue Sep 3 06:36:23 1991 John Gilmore (gnu at cygint.cygnus.com)
-
- * obstack.c: Merge with latest FSF version.
-
-
-Local Variables:
-version-control: never
-End:
diff --git a/gcc-4.7/libiberty/Makefile.in b/gcc-4.7/libiberty/Makefile.in
deleted file mode 100644
index 5280bc158..000000000
--- a/gcc-4.7/libiberty/Makefile.in
+++ /dev/null
@@ -1,1257 +0,0 @@
-# Makefile for the libiberty library.
-# Originally written by K. Richard Pixley <rich@cygnus.com>.
-#
-# Copyright (C) 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
-# 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
-# Free Software Foundation
-#
-# This file is part of the libiberty library.
-# Libiberty is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# Libiberty is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with libiberty; see the file COPYING.LIB. If not,
-# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-# Boston, MA 02110-1301, USA.
-
-libiberty_topdir = @libiberty_topdir@
-srcdir = @srcdir@
-
-prefix = @prefix@
-
-exec_prefix = @exec_prefix@
-bindir = @bindir@
-libdir = @libdir@
-includedir = @includedir@
-target_header_dir = @target_header_dir@
-objext = @OBJEXT@
-
-SHELL = @SHELL@
-
-# Multilib support variables.
-MULTISRCTOP =
-MULTIBUILDTOP =
-MULTIDIRS =
-MULTISUBDIR =
-MULTIDO = true
-MULTICLEAN = true
-
-INSTALL = @INSTALL@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_DATA = @INSTALL_DATA@
-mkinstalldirs = $(SHELL) $(libiberty_topdir)/mkinstalldirs
-
-# Some compilers can't handle cc -c blah.c -o foo/blah.o.
-OUTPUT_OPTION = @OUTPUT_OPTION@
-
-AR = @AR@
-AR_FLAGS = rc
-
-CC = @CC@
-CFLAGS = @CFLAGS@
-CPPFLAGS = @CPPFLAGS@
-RANLIB = @RANLIB@
-MAKEINFO = @MAKEINFO@
-PERL = @PERL@
-
-PICFLAG = @PICFLAG@
-
-MAKEOVERRIDES =
-
-TARGETLIB = ./libiberty.a
-TESTLIB = ./testlib.a
-
-LIBOBJS = @LIBOBJS@
-
-# A configuration can specify extra .o files that should be included,
-# even if they are in libc. (Perhaps the libc version is buggy.)
-EXTRA_OFILES =
-
-# Flags to pass to a recursive make.
-FLAGS_TO_PASS = \
- "AR=$(AR)" \
- "AR_FLAGS=$(AR_FLAGS)" \
- "CC=$(CC)" \
- "CFLAGS=$(CFLAGS)" \
- "CPPFLAGS=$(CPPFLAGS)" \
- "DESTDIR=$(DESTDIR)" \
- "EXTRA_OFILES=$(EXTRA_OFILES)" \
- "HDEFINES=$(HDEFINES)" \
- "INSTALL=$(INSTALL)" \
- "INSTALL_DATA=$(INSTALL_DATA)" \
- "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
- "LDFLAGS=$(LDFLAGS)" \
- "LOADLIBES=$(LOADLIBES)" \
- "RANLIB=$(RANLIB)" \
- "SHELL=$(SHELL)" \
- "prefix=$(prefix)" \
- "exec_prefix=$(exec_prefix)" \
- "libdir=$(libdir)" \
- "libsubdir=$(libsubdir)" \
- "tooldir=$(tooldir)"
-
-# Subdirectories to recurse into. We need to override this during cleaning
-SUBDIRS = testsuite
-
-# FIXME: add @BUILD_INFO@ once we're sure it works for everyone.
-all: stamp-picdir $(TARGETLIB) required-list all-subdir
- @: $(MAKE) ; $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
-
-.PHONY: check installcheck
-check: check-subdir
-installcheck: installcheck-subdir
-
-@host_makefile_frag@
-
-INCDIR=$(srcdir)/$(MULTISRCTOP)../include
-
-COMPILE.c = $(CC) -c @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) $(HDEFINES) @ac_libiberty_warn_cflags@
-
-# Just to make sure we don't use a built-in rule with VPATH
-.c.$(objext):
- false
-
-# NOTE: If you add new files to the library, add them to this list
-# (alphabetical), and add them to REQUIRED_OFILES, or
-# CONFIGURED_OFILES and funcs in configure.ac. Also run "make maint-deps"
-# to build the new rules.
-CFILES = alloca.c argv.c asprintf.c atexit.c \
- basename.c bcmp.c bcopy.c bsearch.c bzero.c \
- calloc.c choose-temp.c clock.c concat.c cp-demangle.c \
- cp-demint.c cplus-dem.c crc32.c \
- dyn-string.c \
- fdmatch.c ffs.c fibheap.c filename_cmp.c floatformat.c \
- fnmatch.c fopen_unlocked.c \
- getcwd.c getopt.c getopt1.c getpagesize.c getpwd.c getruntime.c \
- gettimeofday.c \
- hashtab.c hex.c \
- index.c insque.c \
- lbasename.c \
- lrealpath.c \
- make-relative-prefix.c \
- make-temp-file.c md5.c memchr.c memcmp.c memcpy.c memmem.c \
- memmove.c mempcpy.c memset.c mkstemps.c \
- objalloc.c obstack.c \
- partition.c pexecute.c \
- pex-common.c pex-djgpp.c pex-msdos.c pex-one.c \
- pex-unix.c pex-win32.c \
- physmem.c putenv.c \
- random.c regex.c rename.c rindex.c \
- safe-ctype.c setenv.c setproctitle.c sha1.c sigsetmask.c \
- simple-object.c simple-object-coff.c simple-object-elf.c \
- simple-object-mach-o.c \
- snprintf.c sort.c \
- spaces.c splay-tree.c stack-limit.c stpcpy.c stpncpy.c \
- strcasecmp.c strchr.c strdup.c strerror.c strncasecmp.c \
- strncmp.c strrchr.c strsignal.c strstr.c strtod.c strtol.c \
- strtoul.c strndup.c strverscmp.c \
- timeval-utils.c tmpnam.c \
- unlink-if-ordinary.c \
- vasprintf.c vfork.c vfprintf.c vprintf.c vsnprintf.c vsprintf.c \
- waitpid.c \
- xatexit.c xexit.c xmalloc.c xmemdup.c xstrdup.c xstrerror.c \
- xstrndup.c
-
-# These are always included in the library. The first four are listed
-# first and by compile time to optimize parallel builds.
-REQUIRED_OFILES = \
- ./regex.$(objext) ./cplus-dem.$(objext) ./cp-demangle.$(objext) \
- ./md5.$(objext) ./sha1.$(objext) ./alloca.$(objext) \
- ./argv.$(objext) \
- ./choose-temp.$(objext) ./concat.$(objext) \
- ./cp-demint.$(objext) ./crc32.$(objext) ./dyn-string.$(objext) \
- ./fdmatch.$(objext) ./fibheap.$(objext) \
- ./filename_cmp.$(objext) ./floatformat.$(objext) \
- ./fnmatch.$(objext) ./fopen_unlocked.$(objext) \
- ./getopt.$(objext) ./getopt1.$(objext) ./getpwd.$(objext) \
- ./getruntime.$(objext) ./hashtab.$(objext) ./hex.$(objext) \
- ./lbasename.$(objext) ./lrealpath.$(objext) \
- ./make-relative-prefix.$(objext) ./make-temp-file.$(objext) \
- ./objalloc.$(objext) \
- ./obstack.$(objext) \
- ./partition.$(objext) ./pexecute.$(objext) ./physmem.$(objext) \
- ./pex-common.$(objext) ./pex-one.$(objext) \
- ./@pexecute@.$(objext) \
- ./safe-ctype.$(objext) \
- ./simple-object.$(objext) ./simple-object-coff.$(objext) \
- ./simple-object-elf.$(objext) ./simple-object-mach-o.$(objext) \
- ./sort.$(objext) ./spaces.$(objext) \
- ./splay-tree.$(objext) ./stack-limit.$(objext) \
- ./strerror.$(objext) ./strsignal.$(objext) \
- ./timeval-utils.$(objext) ./unlink-if-ordinary.$(objext) \
- ./xatexit.$(objext) ./xexit.$(objext) ./xmalloc.$(objext) \
- ./xmemdup.$(objext) ./xstrdup.$(objext) ./xstrerror.$(objext) \
- ./xstrndup.$(objext)
-
-# These are all the objects that configure may add to the library via
-# $funcs or EXTRA_OFILES. This list exists here only for "make
-# maint-missing" and "make check".
-CONFIGURED_OFILES = ./asprintf.$(objext) ./atexit.$(objext) \
- ./basename.$(objext) ./bcmp.$(objext) ./bcopy.$(objext) \
- ./bsearch.$(objext) ./bzero.$(objext) \
- ./calloc.$(objext) ./clock.$(objext) ./copysign.$(objext) \
- ./_doprnt.$(objext) \
- ./ffs.$(objext) \
- ./getcwd.$(objext) ./getpagesize.$(objext) \
- ./gettimeofday.$(objext) \
- ./index.$(objext) ./insque.$(objext) \
- ./memchr.$(objext) ./memcmp.$(objext) ./memcpy.$(objext) \
- ./memmem.$(objext) ./memmove.$(objext) \
- ./mempcpy.$(objext) ./memset.$(objext) ./mkstemps.$(objext) \
- ./pex-djgpp.$(objext) ./pex-msdos.$(objext) \
- ./pex-unix.$(objext) ./pex-win32.$(objext) \
- ./putenv.$(objext) \
- ./random.$(objext) ./rename.$(objext) ./rindex.$(objext) \
- ./setenv.$(objext) \
- ./setproctitle.$(objext) \
- ./sigsetmask.$(objext) ./snprintf.$(objext) \
- ./stpcpy.$(objext) ./stpncpy.$(objext) ./strcasecmp.$(objext) \
- ./strchr.$(objext) ./strdup.$(objext) ./strncasecmp.$(objext) \
- ./strncmp.$(objext) ./strndup.$(objext) ./strrchr.$(objext) \
- ./strstr.$(objext) ./strtod.$(objext) ./strtol.$(objext) \
- ./strtoul.$(objext) ./strverscmp.$(objext) \
- ./tmpnam.$(objext) \
- ./vasprintf.$(objext) ./vfork.$(objext) ./vfprintf.$(objext) \
- ./vprintf.$(objext) ./vsnprintf.$(objext) ./vsprintf.$(objext) \
- ./waitpid.$(objext)
-
-# These files are installed if the library has been configured to do so.
-INSTALLED_HEADERS = \
- $(INCDIR)/ansidecl.h \
- $(INCDIR)/demangle.h \
- $(INCDIR)/dyn-string.h \
- $(INCDIR)/fibheap.h \
- $(INCDIR)/floatformat.h \
- $(INCDIR)/hashtab.h \
- $(INCDIR)/libiberty.h \
- $(INCDIR)/objalloc.h \
- $(INCDIR)/partition.h \
- $(INCDIR)/safe-ctype.h \
- $(INCDIR)/sort.h \
- $(INCDIR)/splay-tree.h \
- $(INCDIR)/timeval-utils.h
-
-$(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
- -rm -f $(TARGETLIB) pic/$(TARGETLIB)
- $(AR) $(AR_FLAGS) $(TARGETLIB) \
- $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS)
- $(RANLIB) $(TARGETLIB)
- if [ x"$(PICFLAG)" != x ]; then \
- cd pic; \
- $(AR) $(AR_FLAGS) $(TARGETLIB) \
- $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS); \
- $(RANLIB) $(TARGETLIB); \
- cd ..; \
- else true; fi
-
-$(TESTLIB): $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
- -rm -f $(TESTLIB)
- $(AR) $(AR_FLAGS) $(TESTLIB) \
- $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
- $(RANLIB) $(TESTLIB)
-
-info: libiberty.info info-subdir
-install-info: install-info-subdir
-clean-info: clean-info-subdir
-dvi: libiberty.dvi dvi-subdir
-
-LIBIBERTY_PDFFILES = libiberty.pdf
-
-pdf: $(LIBIBERTY_PDFFILES) pdf-subdir
-
-.PHONY: install-pdf
-
-pdf__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-
-install-pdf: $(LIBIBERTY_PDFFILES)
- @$(NORMAL_INSTALL)
- test -z "$(pdfdir)" || $(mkinstalldirs) "$(DESTDIR)$(pdfdir)"
- @list='$(LIBIBERTY_PDFFILES)'; for p in $$list; do \
- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
- f=$(pdf__strip_dir) \
- echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(pdfdir)/$$f'"; \
- $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(pdfdir)/$$f"; \
- done
-
-# html, install-html targets
-HTMLS = libiberty.html
-
-html: $(HTMLS)
-
-.PHONY: install-html install-html-am
-
-NORMAL_INSTALL = :
-mkdir_p = mkdir -p --
-
-html__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-
-install-html: install-html-am
-
-install-html-am: $(HTMLS)
- @$(NORMAL_INSTALL)
- test -z "$(htmldir)" || $(mkdir_p) "$(DESTDIR)$(htmldir)"
- @list='$(HTMLS)'; for p in $$list; do \
- if test -f "$$p" || test -d "$$p"; then d=""; else d="$(srcdir)/"; fi; \
- f=$(html__strip_dir) \
- if test -d "$$d$$p"; then \
- echo " $(mkdir_p) '$(DESTDIR)$(htmldir)/$$f'"; \
- $(mkdir_p) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \
- echo " $(INSTALL_DATA) '$$d$$p'/* '$(DESTDIR)$(htmldir)/$$f'"; \
- $(INSTALL_DATA) "$$d$$p"/* "$(DESTDIR)$(htmldir)/$$f"; \
- else \
- echo " $(INSTALL_DATA) '$$d$$p' '$(DESTDIR)$(htmldir)/$$f'"; \
- $(INSTALL_DATA) "$$d$$p" "$(DESTDIR)$(htmldir)/$$f"; \
- fi; \
- done
-
-TEXISRC = \
- $(srcdir)/libiberty.texi \
- $(srcdir)/copying-lib.texi \
- $(srcdir)/obstacks.texi \
- $(srcdir)/functions.texi
-
-# Additional files that have texi snippets that need to be collected
-# and sorted. Some are here because the sources are imported from
-# elsewhere. Others represent headers in ../include.
-TEXIFILES = fnmatch.txh pexecute.txh simple-object.txh
-
-libiberty.info : $(srcdir)/libiberty.texi $(TEXISRC)
- $(MAKEINFO) -I$(srcdir) $(srcdir)/libiberty.texi
-
-libiberty.dvi : $(srcdir)/libiberty.texi $(TEXISRC)
- texi2dvi $(srcdir)/libiberty.texi
-
-libiberty.pdf : $(srcdir)/libiberty.texi $(TEXISRC)
- texi2pdf $(srcdir)/libiberty.texi
-
-libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC)
- $(MAKEINFO) --no-split --html -I$(srcdir) -o $@ $<
-
-@MAINT@$(srcdir)/functions.texi : stamp-functions
-@MAINT@ @true
-
-@MAINT@stamp-functions : $(CFILES:%=$(srcdir)/%) $(TEXIFILES:%=$(srcdir)/%) $(srcdir)/gather-docs Makefile
-@MAINT@@HAVE_PERL@ $(PERL) $(srcdir)/gather-docs $(srcdir) $(srcdir)/functions.texi $(CFILES) $(TEXIFILES)
-@MAINT@ echo stamp > stamp-functions
-
-INSTALL_DEST = @INSTALL_DEST@
-install: install_to_$(INSTALL_DEST) install-subdir
-install-strip: install
-
-.PHONY: install install-strip
-
-# This is tricky. Even though CC in the Makefile contains
-# multilib-specific flags, it's overridden by FLAGS_TO_PASS from the
-# default multilib, so we have to take CFLAGS into account as well,
-# since it will be passed the multilib flags.
-MULTIOSDIR = `$(CC) $(CFLAGS) -print-multi-os-directory`
-install_to_libdir: all
- ${mkinstalldirs} $(DESTDIR)$(libdir)/$(MULTIOSDIR)
- $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n
- ( cd $(DESTDIR)$(libdir)/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n ;$(RANLIB) $(TARGETLIB)n )
- mv -f $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(libdir)/$(MULTIOSDIR)/$(TARGETLIB)
- if test -n "${target_header_dir}"; then \
- case "${target_header_dir}" in \
- /*) thd=${target_header_dir};; \
- *) thd=${includedir}/${target_header_dir};; \
- esac; \
- ${mkinstalldirs} $(DESTDIR)$${thd}; \
- for h in ${INSTALLED_HEADERS}; do \
- ${INSTALL_DATA} $$h $(DESTDIR)$${thd}; \
- done; \
- fi
- @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
-install_to_tooldir: all
- ${mkinstalldirs} $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)
- $(INSTALL_DATA) $(TARGETLIB) $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n
- ( cd $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR) ; chmod 644 $(TARGETLIB)n; $(RANLIB) $(TARGETLIB)n )
- mv -f $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)n $(DESTDIR)$(tooldir)/lib/$(MULTIOSDIR)/$(TARGETLIB)
- @$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
-
-# required-list was used when building a shared bfd/opcodes/libiberty
-# library. I don't know if it used by anything currently.
-required-list: Makefile
- echo $(REQUIRED_OFILES) > required-list
-
-stamp-picdir:
- if [ x"$(PICFLAG)" != x ] && [ ! -d pic ]; then \
- mkdir pic; \
- else true; fi
- touch stamp-picdir
-
-.PHONY: all etags tags ls clean stage1 stage2
-
-etags tags: TAGS etags-subdir
-
-TAGS: $(CFILES)
- etags `for i in $(CFILES); do echo $(srcdir)/$$i ; done`
-
-# The standalone demangler (c++filt) has been moved to binutils.
-# But make this target work anyway for demangler hacking.
-demangle: $(ALL) $(srcdir)/cp-demangle.c
- @echo "The standalone demangler, now named c++filt, is now"
- @echo "a part of binutils."
- $(CC) @DEFS@ $(CFLAGS) $(CPPFLAGS) -I. -I$(INCDIR) $(HDEFINES) \
- $(srcdir)/cp-demangle.c -DSTANDALONE_DEMANGLER $(TARGETLIB) -o $@
-
-ls:
- @echo Makefile $(CFILES)
-
-# Various targets for maintainers.
-
-maint-missing :
- @$(PERL) $(srcdir)/maint-tool -s $(srcdir) missing $(CFILES) $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
-
-maint-buildall : $(REQUIRED_OFILES) $(CONFIGURED_OFILES)
- @true
-
-maint-undoc : $(srcdir)/functions.texi
- @$(PERL) $(srcdir)/maint-tool -s $(srcdir) undoc
-
-maint-deps :
- @$(PERL) $(srcdir)/maint-tool -s $(srcdir) deps $(INCDIR)
-
-# Need to deal with profiled libraries, too.
-
-# Cleaning has to be done carefully to ensure that we don't clean our SUBDIRS
-# multiple times, hence our explicit recursion with an empty SUBDIRS.
-mostlyclean: mostlyclean-subdir
- -rm -rf *.$(objext) pic core errs \#* *.E a.out
- -rm -f errors dummy config.h stamp-*
- -rm -f $(CONFIG_H) stamp-picdir
- -rm -f libiberty.aux libiberty.cp libiberty.cps libiberty.fn libiberty.ky
- -rm -f libiberty.log libiberty.tmp libiberty.tps libiberty.pg
- -rm -f libiberty.pgs libiberty.toc libiberty.tp libiberty.tpl libiberty.vr
- -rm -f libtexi.stamp
- @$(MULTICLEAN) multi-clean DO=mostlyclean
-clean: clean-subdir
- $(MAKE) SUBDIRS="" mostlyclean
- -rm -f *.a required-list tmpmulti.out
- -rm -f libiberty.dvi libiberty.pdf libiberty.info* libiberty.html
- @$(MULTICLEAN) multi-clean DO=clean
-distclean: distclean-subdir
- $(MAKE) SUBDIRS="" clean
- @$(MULTICLEAN) multi-clean DO=distclean
- -rm -f *~ Makefile config.cache config.status xhost-mkfrag TAGS multilib.out
- -rm -f config.log
- -rmdir testsuite 2>/dev/null
-maintainer-clean realclean: maintainer-clean-subdir
- $(MAKE) SUBDIRS="" distclean
-
-force:
-
-Makefile: $(srcdir)/Makefile.in config.status
- CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
-
-# Depending on Makefile makes sure that config.status has been re-run
-# if needed. This prevents problems with parallel builds.
-config.h: stamp-h ; @true
-stamp-h: $(srcdir)/config.in config.status Makefile
- CONFIG_FILES= CONFIG_HEADERS=config.h:$(srcdir)/config.in $(SHELL) ./config.status
-
-config.status: $(srcdir)/configure
- $(SHELL) ./config.status --recheck
-
-AUTOCONF = autoconf
-configure_deps = $(srcdir)/aclocal.m4 \
- $(srcdir)/../config/acx.m4 \
- $(srcdir)/../config/no-executables.m4 \
- $(srcdir)/../config/override.m4 \
- $(srcdir)/../config/warnings.m4 \
-
-$(srcdir)/configure: @MAINT@ $(srcdir)/configure.ac $(configure_deps)
- cd $(srcdir) && $(AUTOCONF)
-
-# Depending on config.h makes sure that config.status has been re-run
-# if needed. This prevents problems with parallel builds, in case
-# subdirectories need to run config.status also.
-all-subdir check-subdir installcheck-subdir info-subdir \
-install-info-subdir clean-info-subdir dvi-subdir pdf-subdir install-subdir \
-etags-subdir mostlyclean-subdir clean-subdir distclean-subdir \
-maintainer-clean-subdir: config.h
- @subdirs='$(SUBDIRS)'; \
- target=`echo $@ | sed -e 's/-subdir//'`; \
- for dir in $$subdirs ; do \
- cd $$dir && $(MAKE) $(FLAGS_TO_PASS) $$target; \
- done
-
-$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS): stamp-picdir
-$(CONFIGURED_OFILES): stamp-picdir
-
-# Don't export variables to the environment, in order to not confuse
-# configure.
-.NOEXPORT:
-
-# The dependencies in the remainder of this file are automatically
-# generated by "make maint-deps". Manual edits will be lost.
-
-./_doprnt.$(objext): $(srcdir)/_doprnt.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/_doprnt.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/_doprnt.c $(OUTPUT_OPTION)
-
-./alloca.$(objext): $(srcdir)/alloca.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/alloca.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/alloca.c $(OUTPUT_OPTION)
-
-./argv.$(objext): $(srcdir)/argv.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/argv.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/argv.c $(OUTPUT_OPTION)
-
-./asprintf.$(objext): $(srcdir)/asprintf.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/asprintf.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/asprintf.c $(OUTPUT_OPTION)
-
-./atexit.$(objext): $(srcdir)/atexit.c config.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/atexit.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/atexit.c $(OUTPUT_OPTION)
-
-./basename.$(objext): $(srcdir)/basename.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/basename.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/basename.c $(OUTPUT_OPTION)
-
-./bcmp.$(objext): $(srcdir)/bcmp.c
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/bcmp.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/bcmp.c $(OUTPUT_OPTION)
-
-./bcopy.$(objext): $(srcdir)/bcopy.c
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/bcopy.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/bcopy.c $(OUTPUT_OPTION)
-
-./bsearch.$(objext): $(srcdir)/bsearch.c config.h $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/bsearch.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/bsearch.c $(OUTPUT_OPTION)
-
-./bzero.$(objext): $(srcdir)/bzero.c
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/bzero.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/bzero.c $(OUTPUT_OPTION)
-
-./calloc.$(objext): $(srcdir)/calloc.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/calloc.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/calloc.c $(OUTPUT_OPTION)
-
-./choose-temp.$(objext): $(srcdir)/choose-temp.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/choose-temp.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/choose-temp.c $(OUTPUT_OPTION)
-
-./clock.$(objext): $(srcdir)/clock.c config.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/clock.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/clock.c $(OUTPUT_OPTION)
-
-./concat.$(objext): $(srcdir)/concat.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/concat.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/concat.c $(OUTPUT_OPTION)
-
-./copysign.$(objext): $(srcdir)/copysign.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/copysign.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/copysign.c $(OUTPUT_OPTION)
-
-./cp-demangle.$(objext): $(srcdir)/cp-demangle.c config.h $(INCDIR)/ansidecl.h \
- $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
- $(INCDIR)/dyn-string.h $(INCDIR)/getopt.h $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demangle.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/cp-demangle.c $(OUTPUT_OPTION)
-
-./cp-demint.$(objext): $(srcdir)/cp-demint.c config.h $(INCDIR)/ansidecl.h \
- $(srcdir)/cp-demangle.h $(INCDIR)/demangle.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/cp-demint.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/cp-demint.c $(OUTPUT_OPTION)
-
-./cplus-dem.$(objext): $(srcdir)/cplus-dem.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/demangle.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/cplus-dem.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/cplus-dem.c $(OUTPUT_OPTION)
-
-./crc32.$(objext): $(srcdir)/crc32.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/crc32.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/crc32.c $(OUTPUT_OPTION)
-
-./dyn-string.$(objext): $(srcdir)/dyn-string.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/dyn-string.h $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/dyn-string.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/dyn-string.c $(OUTPUT_OPTION)
-
-./fdmatch.$(objext): $(srcdir)/fdmatch.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/fdmatch.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/fdmatch.c $(OUTPUT_OPTION)
-
-./ffs.$(objext): $(srcdir)/ffs.c
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/ffs.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/ffs.c $(OUTPUT_OPTION)
-
-./fibheap.$(objext): $(srcdir)/fibheap.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/fibheap.h $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/fibheap.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/fibheap.c $(OUTPUT_OPTION)
-
-./filename_cmp.$(objext): $(srcdir)/filename_cmp.c config.h $(INCDIR)/filenames.h \
- $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/filename_cmp.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/filename_cmp.c $(OUTPUT_OPTION)
-
-./floatformat.$(objext): $(srcdir)/floatformat.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/floatformat.h $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/floatformat.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/floatformat.c $(OUTPUT_OPTION)
-
-./fnmatch.$(objext): $(srcdir)/fnmatch.c config.h $(INCDIR)/fnmatch.h \
- $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/fnmatch.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/fnmatch.c $(OUTPUT_OPTION)
-
-./fopen_unlocked.$(objext): $(srcdir)/fopen_unlocked.c config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/fopen_unlocked.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/fopen_unlocked.c $(OUTPUT_OPTION)
-
-./getcwd.$(objext): $(srcdir)/getcwd.c config.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/getcwd.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/getcwd.c $(OUTPUT_OPTION)
-
-./getopt.$(objext): $(srcdir)/getopt.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/getopt.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/getopt.c $(OUTPUT_OPTION)
-
-./getopt1.$(objext): $(srcdir)/getopt1.c config.h $(INCDIR)/getopt.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/getopt1.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/getopt1.c $(OUTPUT_OPTION)
-
-./getpagesize.$(objext): $(srcdir)/getpagesize.c config.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/getpagesize.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/getpagesize.c $(OUTPUT_OPTION)
-
-./getpwd.$(objext): $(srcdir)/getpwd.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/getpwd.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/getpwd.c $(OUTPUT_OPTION)
-
-./getruntime.$(objext): $(srcdir)/getruntime.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/getruntime.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/getruntime.c $(OUTPUT_OPTION)
-
-./gettimeofday.$(objext): $(srcdir)/gettimeofday.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/gettimeofday.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/gettimeofday.c $(OUTPUT_OPTION)
-
-./hashtab.$(objext): $(srcdir)/hashtab.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/hashtab.h $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/hashtab.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/hashtab.c $(OUTPUT_OPTION)
-
-./hex.$(objext): $(srcdir)/hex.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/hex.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/hex.c $(OUTPUT_OPTION)
-
-./index.$(objext): $(srcdir)/index.c
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/index.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/index.c $(OUTPUT_OPTION)
-
-./insque.$(objext): $(srcdir)/insque.c
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/insque.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/insque.c $(OUTPUT_OPTION)
-
-./lbasename.$(objext): $(srcdir)/lbasename.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/filenames.h $(INCDIR)/libiberty.h \
- $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/lbasename.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/lbasename.c $(OUTPUT_OPTION)
-
-./lrealpath.$(objext): $(srcdir)/lrealpath.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/lrealpath.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/lrealpath.c $(OUTPUT_OPTION)
-
-./make-relative-prefix.$(objext): $(srcdir)/make-relative-prefix.c config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/make-relative-prefix.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/make-relative-prefix.c $(OUTPUT_OPTION)
-
-./make-temp-file.$(objext): $(srcdir)/make-temp-file.c config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/make-temp-file.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/make-temp-file.c $(OUTPUT_OPTION)
-
-./md5.$(objext): $(srcdir)/md5.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/md5.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/md5.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/md5.c $(OUTPUT_OPTION)
-
-./memchr.$(objext): $(srcdir)/memchr.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/memchr.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/memchr.c $(OUTPUT_OPTION)
-
-./memcmp.$(objext): $(srcdir)/memcmp.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/memcmp.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/memcmp.c $(OUTPUT_OPTION)
-
-./memcpy.$(objext): $(srcdir)/memcpy.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/memcpy.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/memcpy.c $(OUTPUT_OPTION)
-
-./memmem.$(objext): $(srcdir)/memmem.c config.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/memmem.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/memmem.c $(OUTPUT_OPTION)
-
-./memmove.$(objext): $(srcdir)/memmove.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/memmove.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/memmove.c $(OUTPUT_OPTION)
-
-./mempcpy.$(objext): $(srcdir)/mempcpy.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/mempcpy.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/mempcpy.c $(OUTPUT_OPTION)
-
-./memset.$(objext): $(srcdir)/memset.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/memset.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/memset.c $(OUTPUT_OPTION)
-
-./mkstemps.$(objext): $(srcdir)/mkstemps.c config.h $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/mkstemps.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/mkstemps.c $(OUTPUT_OPTION)
-
-./msdos.$(objext): $(srcdir)/msdos.c
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/msdos.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/msdos.c $(OUTPUT_OPTION)
-
-./objalloc.$(objext): $(srcdir)/objalloc.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/objalloc.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/objalloc.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/objalloc.c $(OUTPUT_OPTION)
-
-./obstack.$(objext): $(srcdir)/obstack.c config.h $(INCDIR)/obstack.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/obstack.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/obstack.c $(OUTPUT_OPTION)
-
-./partition.$(objext): $(srcdir)/partition.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/partition.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/partition.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/partition.c $(OUTPUT_OPTION)
-
-./pex-common.$(objext): $(srcdir)/pex-common.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-common.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/pex-common.c $(OUTPUT_OPTION)
-
-./pex-djgpp.$(objext): $(srcdir)/pex-djgpp.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-djgpp.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/pex-djgpp.c $(OUTPUT_OPTION)
-
-./pex-msdos.$(objext): $(srcdir)/pex-msdos.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(srcdir)/pex-common.h \
- $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-msdos.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/pex-msdos.c $(OUTPUT_OPTION)
-
-./pex-one.$(objext): $(srcdir)/pex-one.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-one.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/pex-one.c $(OUTPUT_OPTION)
-
-./pex-unix.$(objext): $(srcdir)/pex-unix.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-unix.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/pex-unix.c $(OUTPUT_OPTION)
-
-./pex-win32.$(objext): $(srcdir)/pex-win32.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(srcdir)/pex-common.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/pex-win32.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/pex-win32.c $(OUTPUT_OPTION)
-
-./pexecute.$(objext): $(srcdir)/pexecute.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/pexecute.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/pexecute.c $(OUTPUT_OPTION)
-
-./physmem.$(objext): $(srcdir)/physmem.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/physmem.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/physmem.c $(OUTPUT_OPTION)
-
-./putenv.$(objext): $(srcdir)/putenv.c config.h $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/putenv.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/putenv.c $(OUTPUT_OPTION)
-
-./random.$(objext): $(srcdir)/random.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/random.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/random.c $(OUTPUT_OPTION)
-
-./regex.$(objext): $(srcdir)/regex.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/xregex.h $(INCDIR)/xregex2.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/regex.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/regex.c $(OUTPUT_OPTION)
-
-./rename.$(objext): $(srcdir)/rename.c config.h $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/rename.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/rename.c $(OUTPUT_OPTION)
-
-./rindex.$(objext): $(srcdir)/rindex.c
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/rindex.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/rindex.c $(OUTPUT_OPTION)
-
-./safe-ctype.$(objext): $(srcdir)/safe-ctype.c $(INCDIR)/ansidecl.h \
- $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/safe-ctype.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/safe-ctype.c $(OUTPUT_OPTION)
-
-./setenv.$(objext): $(srcdir)/setenv.c config.h $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/setenv.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/setenv.c $(OUTPUT_OPTION)
-
-./setproctitle.$(objext): $(srcdir)/setproctitle.c config.h $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/setproctitle.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/setproctitle.c $(OUTPUT_OPTION)
-
-./sha1.$(objext): $(srcdir)/sha1.c config.h $(INCDIR)/ansidecl.h $(INCDIR)/sha1.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/sha1.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/sha1.c $(OUTPUT_OPTION)
-
-./sigsetmask.$(objext): $(srcdir)/sigsetmask.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/sigsetmask.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/sigsetmask.c $(OUTPUT_OPTION)
-
-./simple-object-coff.$(objext): $(srcdir)/simple-object-coff.c config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(srcdir)/simple-object-common.h $(INCDIR)/simple-object.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/simple-object-coff.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/simple-object-coff.c $(OUTPUT_OPTION)
-
-./simple-object-elf.$(objext): $(srcdir)/simple-object-elf.c config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(srcdir)/simple-object-common.h $(INCDIR)/simple-object.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/simple-object-elf.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/simple-object-elf.c $(OUTPUT_OPTION)
-
-./simple-object-mach-o.$(objext): $(srcdir)/simple-object-mach-o.c config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(srcdir)/simple-object-common.h $(INCDIR)/simple-object.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/simple-object-mach-o.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/simple-object-mach-o.c $(OUTPUT_OPTION)
-
-./simple-object.$(objext): $(srcdir)/simple-object.c config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h \
- $(srcdir)/simple-object-common.h $(INCDIR)/simple-object.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/simple-object.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/simple-object.c $(OUTPUT_OPTION)
-
-./snprintf.$(objext): $(srcdir)/snprintf.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/snprintf.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/snprintf.c $(OUTPUT_OPTION)
-
-./sort.$(objext): $(srcdir)/sort.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/sort.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/sort.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/sort.c $(OUTPUT_OPTION)
-
-./spaces.$(objext): $(srcdir)/spaces.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/spaces.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/spaces.c $(OUTPUT_OPTION)
-
-./splay-tree.$(objext): $(srcdir)/splay-tree.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/splay-tree.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/splay-tree.c $(OUTPUT_OPTION)
-
-./stack-limit.$(objext): $(srcdir)/stack-limit.c config.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/stack-limit.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/stack-limit.c $(OUTPUT_OPTION)
-
-./stpcpy.$(objext): $(srcdir)/stpcpy.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/stpcpy.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/stpcpy.c $(OUTPUT_OPTION)
-
-./stpncpy.$(objext): $(srcdir)/stpncpy.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/stpncpy.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/stpncpy.c $(OUTPUT_OPTION)
-
-./strcasecmp.$(objext): $(srcdir)/strcasecmp.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strcasecmp.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strcasecmp.c $(OUTPUT_OPTION)
-
-./strchr.$(objext): $(srcdir)/strchr.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strchr.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strchr.c $(OUTPUT_OPTION)
-
-./strdup.$(objext): $(srcdir)/strdup.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strdup.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strdup.c $(OUTPUT_OPTION)
-
-./strerror.$(objext): $(srcdir)/strerror.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strerror.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strerror.c $(OUTPUT_OPTION)
-
-./strncasecmp.$(objext): $(srcdir)/strncasecmp.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strncasecmp.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strncasecmp.c $(OUTPUT_OPTION)
-
-./strncmp.$(objext): $(srcdir)/strncmp.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strncmp.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strncmp.c $(OUTPUT_OPTION)
-
-./strndup.$(objext): $(srcdir)/strndup.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strndup.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strndup.c $(OUTPUT_OPTION)
-
-./strrchr.$(objext): $(srcdir)/strrchr.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strrchr.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strrchr.c $(OUTPUT_OPTION)
-
-./strsignal.$(objext): $(srcdir)/strsignal.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strsignal.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strsignal.c $(OUTPUT_OPTION)
-
-./strstr.$(objext): $(srcdir)/strstr.c
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strstr.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strstr.c $(OUTPUT_OPTION)
-
-./strtod.$(objext): $(srcdir)/strtod.c $(INCDIR)/ansidecl.h \
- $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strtod.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strtod.c $(OUTPUT_OPTION)
-
-./strtol.$(objext): $(srcdir)/strtol.c config.h $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strtol.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strtol.c $(OUTPUT_OPTION)
-
-./strtoul.$(objext): $(srcdir)/strtoul.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strtoul.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strtoul.c $(OUTPUT_OPTION)
-
-./strverscmp.$(objext): $(srcdir)/strverscmp.c $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h $(INCDIR)/safe-ctype.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/strverscmp.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/strverscmp.c $(OUTPUT_OPTION)
-
-./timeval-utils.$(objext): $(srcdir)/timeval-utils.c config.h \
- $(INCDIR)/timeval-utils.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/timeval-utils.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/timeval-utils.c $(OUTPUT_OPTION)
-
-./tmpnam.$(objext): $(srcdir)/tmpnam.c
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/tmpnam.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/tmpnam.c $(OUTPUT_OPTION)
-
-./unlink-if-ordinary.$(objext): $(srcdir)/unlink-if-ordinary.c config.h \
- $(INCDIR)/ansidecl.h $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/unlink-if-ordinary.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/unlink-if-ordinary.c $(OUTPUT_OPTION)
-
-./vasprintf.$(objext): $(srcdir)/vasprintf.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/vasprintf.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/vasprintf.c $(OUTPUT_OPTION)
-
-./vfork.$(objext): $(srcdir)/vfork.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/vfork.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/vfork.c $(OUTPUT_OPTION)
-
-./vfprintf.$(objext): $(srcdir)/vfprintf.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/vfprintf.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/vfprintf.c $(OUTPUT_OPTION)
-
-./vprintf.$(objext): $(srcdir)/vprintf.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/vprintf.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/vprintf.c $(OUTPUT_OPTION)
-
-./vsnprintf.$(objext): $(srcdir)/vsnprintf.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/vsnprintf.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/vsnprintf.c $(OUTPUT_OPTION)
-
-./vsprintf.$(objext): $(srcdir)/vsprintf.c $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/vsprintf.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/vsprintf.c $(OUTPUT_OPTION)
-
-./waitpid.$(objext): $(srcdir)/waitpid.c config.h $(INCDIR)/ansidecl.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/waitpid.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/waitpid.c $(OUTPUT_OPTION)
-
-./xatexit.$(objext): $(srcdir)/xatexit.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/xatexit.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/xatexit.c $(OUTPUT_OPTION)
-
-./xexit.$(objext): $(srcdir)/xexit.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/xexit.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/xexit.c $(OUTPUT_OPTION)
-
-./xmalloc.$(objext): $(srcdir)/xmalloc.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/xmalloc.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/xmalloc.c $(OUTPUT_OPTION)
-
-./xmemdup.$(objext): $(srcdir)/xmemdup.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/xmemdup.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/xmemdup.c $(OUTPUT_OPTION)
-
-./xstrdup.$(objext): $(srcdir)/xstrdup.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrdup.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/xstrdup.c $(OUTPUT_OPTION)
-
-./xstrerror.$(objext): $(srcdir)/xstrerror.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrerror.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/xstrerror.c $(OUTPUT_OPTION)
-
-./xstrndup.$(objext): $(srcdir)/xstrndup.c config.h $(INCDIR)/ansidecl.h \
- $(INCDIR)/libiberty.h
- if [ x"$(PICFLAG)" != x ]; then \
- $(COMPILE.c) $(PICFLAG) $(srcdir)/xstrndup.c -o pic/$@; \
- else true; fi
- $(COMPILE.c) $(srcdir)/xstrndup.c $(OUTPUT_OPTION)
-
diff --git a/gcc-4.7/libiberty/README b/gcc-4.7/libiberty/README
deleted file mode 100644
index 9f1cc979e..000000000
--- a/gcc-4.7/libiberty/README
+++ /dev/null
@@ -1,72 +0,0 @@
-This directory contains the -liberty library of free software.
-It is a collection of subroutines used by various GNU programs.
-Current members include:
-
- getopt -- get options from command line
- obstack -- stacks of arbitrarily-sized objects
- strerror -- error message strings corresponding to errno
- strtol -- string-to-long conversion
- strtoul -- string-to-unsigned-long conversion
-
-We expect many of the GNU subroutines that are floating around to
-eventually arrive here.
-
-The library must be configured from the top source directory. Don't
-try to run configure in this directory. Follow the configuration
-instructions in ../README.
-
-Please report bugs to "gcc-bugs@gcc.gnu.org" and send fixes to
-"gcc-patches@gcc.gnu.org". Thank you.
-
-ADDING A NEW FILE
-=================
-
-There are two sets of files: Those that are "required" will be
-included in the library for all configurations, while those
-that are "optional" will be included in the library only if "needed."
-
-To add a new required file, edit Makefile.in to add the source file
-name to CFILES and the object file to REQUIRED_OFILES.
-
-To add a new optional file, it must provide a single function, and the
-name of the function must be the same as the name of the file.
-
- * Add the source file name to CFILES in Makefile.in and the object
- file to CONFIGURED_OFILES.
-
- * Add the function to name to the funcs shell variable in
- configure.ac.
-
- * Add the function to the AC_CHECK_FUNCS lists just after the
- setting of the funcs shell variable. These AC_CHECK_FUNCS calls
- are never executed; they are there to make autoheader work
- better.
-
- * Consider the special cases of building libiberty; as of this
- writing, the special cases are newlib and VxWorks. If a
- particular special case provides the function, you do not need
- to do anything. If it does not provide the function, add the
- object file to LIBOBJS, and add the function name to the case
- controlling whether to define HAVE_func.
-
-Finally, in the build directory of libiberty, configure with
-"--enable-maintainer-mode", run "make maint-deps" to update
-Makefile.in, and run 'make stamp-functions' to regenerate
-functions.texi.
-
-The optional file you've added (e.g. getcwd.c) should compile and work
-on all hosts where it is needed. It does not have to work or even
-compile on hosts where it is not needed.
-
-ADDING A NEW CONFIGURATION
-==========================
-
-On most hosts you should be able to use the scheme for automatically
-figuring out which files are needed. In that case, you probably
-don't need a special Makefile stub for that configuration.
-
-If the fully automatic scheme doesn't work, you may be able to get
-by with defining EXTRA_OFILES in your Makefile stub. This is
-a list of object file names that should be treated as required
-for this configuration - they will be included in libiberty.a,
-regardless of whatever might be in the C library.
diff --git a/gcc-4.7/libiberty/_doprnt.c b/gcc-4.7/libiberty/_doprnt.c
deleted file mode 100644
index ca97bc8c5..000000000
--- a/gcc-4.7/libiberty/_doprnt.c
+++ /dev/null
@@ -1,296 +0,0 @@
-/* Provide a version of _doprnt in terms of fprintf.
- Copyright (C) 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
- Contributed by Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-#include "ansidecl.h"
-#include "safe-ctype.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#undef _doprnt
-
-#ifdef HAVE__DOPRNT
-#define TEST
-#endif
-
-#ifdef TEST /* Make sure to use the internal one. */
-#define _doprnt my_doprnt
-#endif
-
-#define COPY_VA_INT \
- do { \
- const int value = abs (va_arg (ap, int)); \
- char buf[32]; \
- ptr++; /* Go past the asterisk. */ \
- *sptr = '\0'; /* NULL terminate sptr. */ \
- sprintf(buf, "%d", value); \
- strcat(sptr, buf); \
- while (*sptr) sptr++; \
- } while (0)
-
-#define PRINT_CHAR(CHAR) \
- do { \
- putc(CHAR, stream); \
- ptr++; \
- total_printed++; \
- continue; \
- } while (0)
-
-#define PRINT_TYPE(TYPE) \
- do { \
- int result; \
- TYPE value = va_arg (ap, TYPE); \
- *sptr++ = *ptr++; /* Copy the type specifier. */ \
- *sptr = '\0'; /* NULL terminate sptr. */ \
- result = fprintf(stream, specifier, value); \
- if (result == -1) \
- return -1; \
- else \
- { \
- total_printed += result; \
- continue; \
- } \
- } while (0)
-
-int
-_doprnt (const char *format, va_list ap, FILE *stream)
-{
- const char * ptr = format;
- char specifier[128];
- int total_printed = 0;
-
- while (*ptr != '\0')
- {
- if (*ptr != '%') /* While we have regular characters, print them. */
- PRINT_CHAR(*ptr);
- else /* We got a format specifier! */
- {
- char * sptr = specifier;
- int wide_width = 0, short_width = 0;
-
- *sptr++ = *ptr++; /* Copy the % and move forward. */
-
- while (strchr ("-+ #0", *ptr)) /* Move past flags. */
- *sptr++ = *ptr++;
-
- if (*ptr == '*')
- COPY_VA_INT;
- else
- while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */
- *sptr++ = *ptr++;
-
- if (*ptr == '.')
- {
- *sptr++ = *ptr++; /* Copy and go past the period. */
- if (*ptr == '*')
- COPY_VA_INT;
- else
- while (ISDIGIT(*ptr)) /* Handle explicit numeric value. */
- *sptr++ = *ptr++;
- }
- while (strchr ("hlL", *ptr))
- {
- switch (*ptr)
- {
- case 'h':
- short_width = 1;
- break;
- case 'l':
- wide_width++;
- break;
- case 'L':
- wide_width = 2;
- break;
- default:
- abort();
- }
- *sptr++ = *ptr++;
- }
-
- switch (*ptr)
- {
- case 'd':
- case 'i':
- case 'o':
- case 'u':
- case 'x':
- case 'X':
- case 'c':
- {
- /* Short values are promoted to int, so just copy it
- as an int and trust the C library printf to cast it
- to the right width. */
- if (short_width)
- PRINT_TYPE(int);
- else
- {
- switch (wide_width)
- {
- case 0:
- PRINT_TYPE(int);
- break;
- case 1:
- PRINT_TYPE(long);
- break;
- case 2:
- default:
-#if defined(__GNUC__) || defined(HAVE_LONG_LONG)
- PRINT_TYPE(long long);
-#else
- PRINT_TYPE(long); /* Fake it and hope for the best. */
-#endif
- break;
- } /* End of switch (wide_width) */
- } /* End of else statement */
- } /* End of integer case */
- break;
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- {
- if (wide_width == 0)
- PRINT_TYPE(double);
- else
- {
-#if defined(__GNUC__) || defined(HAVE_LONG_DOUBLE)
- PRINT_TYPE(long double);
-#else
- PRINT_TYPE(double); /* Fake it and hope for the best. */
-#endif
- }
- }
- break;
- case 's':
- PRINT_TYPE(char *);
- break;
- case 'p':
- PRINT_TYPE(void *);
- break;
- case '%':
- PRINT_CHAR('%');
- break;
- default:
- abort();
- } /* End of switch (*ptr) */
- } /* End of else statement */
- }
-
- return total_printed;
-}
-
-#ifdef TEST
-
-#include <math.h>
-#ifndef M_PI
-#define M_PI (3.1415926535897932385)
-#endif
-
-#define RESULT(x) do \
-{ \
- int i = (x); \
- printf ("printed %d characters\n", i); \
- fflush(stdin); \
-} while (0)
-
-static int checkit (const char * format, ...) ATTRIBUTE_PRINTF_1;
-
-static int
-checkit (const char* format, ...)
-{
- int result;
- VA_OPEN (args, format);
- VA_FIXEDARG (args, char *, format);
-
- result = _doprnt (format, args, stdout);
- VA_CLOSE (args);
-
- return result;
-}
-
-int
-main (void)
-{
- RESULT(checkit ("<%d>\n", 0x12345678));
- RESULT(printf ("<%d>\n", 0x12345678));
-
- RESULT(checkit ("<%200d>\n", 5));
- RESULT(printf ("<%200d>\n", 5));
-
- RESULT(checkit ("<%.300d>\n", 6));
- RESULT(printf ("<%.300d>\n", 6));
-
- RESULT(checkit ("<%100.150d>\n", 7));
- RESULT(printf ("<%100.150d>\n", 7));
-
- RESULT(checkit ("<%s>\n",
- "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
-777777777777777777333333333333366666666666622222222222777777777777733333"));
- RESULT(printf ("<%s>\n",
- "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
-777777777777777777333333333333366666666666622222222222777777777777733333"));
-
- RESULT(checkit ("<%f><%0+#f>%s%d%s>\n",
- 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"));
- RESULT(printf ("<%f><%0+#f>%s%d%s>\n",
- 1.0, 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx"));
-
- RESULT(checkit ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI));
- RESULT(printf ("<%4f><%.4f><%%><%4.4f>\n", M_PI, M_PI, M_PI));
-
- RESULT(checkit ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI));
- RESULT(printf ("<%*f><%.*f><%%><%*.*f>\n", 3, M_PI, 3, M_PI, 3, 3, M_PI));
-
- RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n",
- 75, 75, 75, 75, 75, 75, 75));
- RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n",
- 75, 75, 75, 75, 75, 75, 75));
-
- RESULT(checkit ("<%d><%i><%o><%u><%x><%X><%c>\n",
- 75, 75, 75, 75, 75, 75, 75));
- RESULT(printf ("<%d><%i><%o><%u><%x><%X><%c>\n",
- 75, 75, 75, 75, 75, 75, 75));
-
- RESULT(checkit ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456));
- RESULT(printf ("Testing (hd) short: <%d><%ld><%hd><%hd><%d>\n", 123, (long)234, 345, 123456789, 456));
-
-#if defined(__GNUC__) || defined (HAVE_LONG_LONG)
- RESULT(checkit ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345));
- RESULT(printf ("Testing (lld) long long: <%d><%lld><%d>\n", 123, 234234234234234234LL, 345));
- RESULT(checkit ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345));
- RESULT(printf ("Testing (Ld) long long: <%d><%Ld><%d>\n", 123, 234234234234234234LL, 345));
-#endif
-
-#if defined(__GNUC__) || defined (HAVE_LONG_DOUBLE)
- RESULT(checkit ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n",
- 1.23456, 1.234567890123456789L, 1.23456));
- RESULT(printf ("Testing (Lf) long double: <%.20f><%.20Lf><%0+#.20f>\n",
- 1.23456, 1.234567890123456789L, 1.23456));
-#endif
-
- return 0;
-}
-#endif /* TEST */
diff --git a/gcc-4.7/libiberty/aclocal.m4 b/gcc-4.7/libiberty/aclocal.m4
deleted file mode 100644
index bf8a90710..000000000
--- a/gcc-4.7/libiberty/aclocal.m4
+++ /dev/null
@@ -1,175 +0,0 @@
-sinclude(../config/acx.m4)
-sinclude(../config/no-executables.m4)
-sinclude(../config/override.m4)
-sinclude(../config/picflag.m4)
-sinclude(../config/warnings.m4)
-
-dnl See whether strncmp reads past the end of its string parameters.
-dnl On some versions of SunOS4 at least, strncmp reads a word at a time
-dnl but erroneously reads past the end of strings. This can cause
-dnl a SEGV in some cases.
-AC_DEFUN(libiberty_AC_FUNC_STRNCMP,
-[AC_REQUIRE([AC_FUNC_MMAP])
-AC_CACHE_CHECK([for working strncmp], ac_cv_func_strncmp_works,
-[AC_TRY_RUN([
-/* Test by Jim Wilson and Kaveh Ghazi.
- Check whether strncmp reads past the end of its string parameters. */
-#include <sys/types.h>
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
-#endif
-
-#ifndef MAP_ANON
-#ifdef MAP_ANONYMOUS
-#define MAP_ANON MAP_ANONYMOUS
-#else
-#define MAP_ANON MAP_FILE
-#endif
-#endif
-
-#ifndef MAP_FILE
-#define MAP_FILE 0
-#endif
-#ifndef O_RDONLY
-#define O_RDONLY 0
-#endif
-
-#define MAP_LEN 0x10000
-
-main ()
-{
-#if defined(HAVE_MMAP) || defined(HAVE_MMAP_ANYWHERE)
- char *p;
- int dev_zero;
-
- dev_zero = open ("/dev/zero", O_RDONLY);
- if (dev_zero < 0)
- exit (1);
-
- p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_PRIVATE, dev_zero, 0);
- if (p == (char *)-1)
- p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_PRIVATE, -1, 0);
- if (p == (char *)-1)
- exit (2);
- else
- {
- char *string = "__si_type_info";
- char *q = (char *) p + MAP_LEN - strlen (string) - 2;
- char *r = (char *) p + 0xe;
-
- strcpy (q, string);
- strcpy (r, string);
- strncmp (r, q, 14);
- }
-#endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */
- exit (0);
-}
-], ac_cv_func_strncmp_works=yes, ac_cv_func_strncmp_works=no,
- ac_cv_func_strncmp_works=yes)
-rm -f core core.* *.core])
-if test $ac_cv_func_strncmp_works = no ; then
- AC_LIBOBJ([strncmp])
-fi
-])
-
-dnl See if errno must be declared even when <errno.h> is included.
-AC_DEFUN(libiberty_AC_DECLARE_ERRNO,
-[AC_CACHE_CHECK(whether errno must be declared, libiberty_cv_declare_errno,
-[AC_TRY_COMPILE(
-[#include <errno.h>],
-[int x = errno;],
-libiberty_cv_declare_errno=no,
-libiberty_cv_declare_errno=yes)])
-if test $libiberty_cv_declare_errno = yes
-then AC_DEFINE(NEED_DECLARATION_ERRNO, 1,
- [Define if errno must be declared even when <errno.h> is included.])
-fi
-])
-
-dnl See whether we need a declaration for a function.
-AC_DEFUN(libiberty_NEED_DECLARATION,
-[AC_MSG_CHECKING([whether $1 must be declared])
-AC_CACHE_VAL(libiberty_cv_decl_needed_$1,
-[AC_TRY_COMPILE([
-#include "confdefs.h"
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif],
-[char *(*pfn) = (char *(*)) $1],
-libiberty_cv_decl_needed_$1=no, libiberty_cv_decl_needed_$1=yes)])
-AC_MSG_RESULT($libiberty_cv_decl_needed_$1)
-if test $libiberty_cv_decl_needed_$1 = yes; then
- AC_DEFINE([NEED_DECLARATION_]translit($1, [a-z], [A-Z]), 1,
- [Define if $1 is not declared in system header files.])
-fi
-])dnl
-
-# We always want a C version of alloca() compiled into libiberty,
-# because native-compiler support for the real alloca is so !@#$%
-# unreliable that GCC has decided to use it only when being compiled
-# by GCC. This is the part of AC_FUNC_ALLOCA that calculates the
-# information alloca.c needs.
-AC_DEFUN(libiberty_AC_FUNC_C_ALLOCA,
-[AC_CACHE_CHECK(whether alloca needs Cray hooks, ac_cv_os_cray,
-[AC_EGREP_CPP(webecray,
-[#if defined(CRAY) && ! defined(CRAY2)
-webecray
-#else
-wenotbecray
-#endif
-], ac_cv_os_cray=yes, ac_cv_os_cray=no)])
-if test $ac_cv_os_cray = yes; then
- for ac_func in _getb67 GETB67 getb67; do
- AC_CHECK_FUNC($ac_func,
- [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func,
- [Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP
- systems. This function is required for alloca.c support on those
- systems.]) break])
- done
-fi
-
-AC_CACHE_CHECK(stack direction for C alloca, ac_cv_c_stack_direction,
-[AC_TRY_RUN([find_stack_direction ()
-{
- static char *addr = 0;
- auto char dummy;
- if (addr == 0)
- {
- addr = &dummy;
- return find_stack_direction ();
- }
- else
- return (&dummy > addr) ? 1 : -1;
-}
-main ()
-{
- exit (find_stack_direction() < 0);
-}],
- ac_cv_c_stack_direction=1,
- ac_cv_c_stack_direction=-1,
- ac_cv_c_stack_direction=0)])
-AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction,
- [Define if you know the direction of stack growth for your system;
- otherwise it will be automatically deduced at run-time.
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown])
-])
diff --git a/gcc-4.7/libiberty/alloca.c b/gcc-4.7/libiberty/alloca.c
deleted file mode 100644
index 9b2e9cb12..000000000
--- a/gcc-4.7/libiberty/alloca.c
+++ /dev/null
@@ -1,483 +0,0 @@
-/* alloca.c -- allocate automatically reclaimed memory
- (Mostly) portable public-domain implementation -- D A Gwyn
-
- This implementation of the PWB library alloca function,
- which is used to allocate space off the run-time stack so
- that it is automatically reclaimed upon procedure exit,
- was inspired by discussions with J. Q. Johnson of Cornell.
- J.Otto Tennant <jot@cray.com> contributed the Cray support.
-
- There are some preprocessor constants that can
- be defined when compiling for your specific system, for
- improved efficiency; however, the defaults should be okay.
-
- The general concept of this implementation is to keep
- track of all alloca-allocated blocks, and reclaim any
- that are found to be deeper in the stack than the current
- invocation. This heuristic does not reclaim storage as
- soon as it becomes invalid, but it will do so eventually.
-
- As a special case, alloca(0) reclaims storage without
- allocating any. It is a good idea to use alloca(0) in
- your main control loop, etc. to force garbage collection. */
-
-/*
-
-@deftypefn Replacement void* alloca (size_t @var{size})
-
-This function allocates memory which will be automatically reclaimed
-after the procedure exits. The @libib{} implementation does not free
-the memory immediately but will do so eventually during subsequent
-calls to this function. Memory is allocated using @code{xmalloc} under
-normal circumstances.
-
-The header file @file{alloca-conf.h} can be used in conjunction with the
-GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make
-available this function. The @code{AC_FUNC_ALLOCA} test requires that
-client code use a block of preprocessor code to be safe (see the Autoconf
-manual for more); this header incorporates that logic and more, including
-the possibility of a GCC built-in function.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <libiberty.h>
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-/* These variables are used by the ASTRDUP implementation that relies
- on C_alloca. */
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-const char *libiberty_optr;
-char *libiberty_nptr;
-unsigned long libiberty_len;
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/* If your stack is a linked list of frames, you have to
- provide an "address metric" ADDRESS_FUNCTION macro. */
-
-#if defined (CRAY) && defined (CRAY_STACKSEG_END)
-static long i00afunc ();
-#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
-#else
-#define ADDRESS_FUNCTION(arg) &(arg)
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-/* Define STACK_DIRECTION if you know the direction of stack
- growth for your system; otherwise it will be automatically
- deduced at run-time.
-
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown */
-
-#ifndef STACK_DIRECTION
-#define STACK_DIRECTION 0 /* Direction unknown. */
-#endif
-
-#if STACK_DIRECTION != 0
-
-#define STACK_DIR STACK_DIRECTION /* Known at compile-time. */
-
-#else /* STACK_DIRECTION == 0; need run-time code. */
-
-static int stack_dir; /* 1 or -1 once known. */
-#define STACK_DIR stack_dir
-
-static void
-find_stack_direction (void)
-{
- static char *addr = NULL; /* Address of first `dummy', once known. */
- auto char dummy; /* To get stack address. */
-
- if (addr == NULL)
- { /* Initial entry. */
- addr = ADDRESS_FUNCTION (dummy);
-
- find_stack_direction (); /* Recurse once. */
- }
- else
- {
- /* Second entry. */
- if (ADDRESS_FUNCTION (dummy) > addr)
- stack_dir = 1; /* Stack grew upward. */
- else
- stack_dir = -1; /* Stack grew downward. */
- }
-}
-
-#endif /* STACK_DIRECTION == 0 */
-
-/* An "alloca header" is used to:
- (a) chain together all alloca'ed blocks;
- (b) keep track of stack depth.
-
- It is very important that sizeof(header) agree with malloc
- alignment chunk size. The following default should work okay. */
-
-#ifndef ALIGN_SIZE
-#define ALIGN_SIZE sizeof(double)
-#endif
-
-typedef union hdr
-{
- char align[ALIGN_SIZE]; /* To force sizeof(header). */
- struct
- {
- union hdr *next; /* For chaining headers. */
- char *deep; /* For stack depth measure. */
- } h;
-} header;
-
-static header *last_alloca_header = NULL; /* -> last alloca header. */
-
-/* Return a pointer to at least SIZE bytes of storage,
- which will be automatically reclaimed upon exit from
- the procedure that called alloca. Originally, this space
- was supposed to be taken from the current stack frame of the
- caller, but that method cannot be made to work for some
- implementations of C, for example under Gould's UTX/32. */
-
-/* @undocumented C_alloca */
-
-PTR
-C_alloca (size_t size)
-{
- auto char probe; /* Probes stack depth: */
- register char *depth = ADDRESS_FUNCTION (probe);
-
-#if STACK_DIRECTION == 0
- if (STACK_DIR == 0) /* Unknown growth direction. */
- find_stack_direction ();
-#endif
-
- /* Reclaim garbage, defined as all alloca'd storage that
- was allocated from deeper in the stack than currently. */
-
- {
- register header *hp; /* Traverses linked list. */
-
- for (hp = last_alloca_header; hp != NULL;)
- if ((STACK_DIR > 0 && hp->h.deep > depth)
- || (STACK_DIR < 0 && hp->h.deep < depth))
- {
- register header *np = hp->h.next;
-
- free ((PTR) hp); /* Collect garbage. */
-
- hp = np; /* -> next header. */
- }
- else
- break; /* Rest are not deeper. */
-
- last_alloca_header = hp; /* -> last valid storage. */
- }
-
- if (size == 0)
- return NULL; /* No allocation required. */
-
- /* Allocate combined header + user data storage. */
-
- {
- register void *new_storage = XNEWVEC (char, sizeof (header) + size);
- /* Address of header. */
-
- if (new_storage == 0)
- abort();
-
- ((header *) new_storage)->h.next = last_alloca_header;
- ((header *) new_storage)->h.deep = depth;
-
- last_alloca_header = (header *) new_storage;
-
- /* User storage begins just after header. */
-
- return (PTR) ((char *) new_storage + sizeof (header));
- }
-}
-
-#if defined (CRAY) && defined (CRAY_STACKSEG_END)
-
-#ifdef DEBUG_I00AFUNC
-#include <stdio.h>
-#endif
-
-#ifndef CRAY_STACK
-#define CRAY_STACK
-#ifndef CRAY2
-/* Stack structures for CRAY-1, CRAY X-MP, and CRAY Y-MP */
-struct stack_control_header
- {
- long shgrow:32; /* Number of times stack has grown. */
- long shaseg:32; /* Size of increments to stack. */
- long shhwm:32; /* High water mark of stack. */
- long shsize:32; /* Current size of stack (all segments). */
- };
-
-/* The stack segment linkage control information occurs at
- the high-address end of a stack segment. (The stack
- grows from low addresses to high addresses.) The initial
- part of the stack segment linkage control information is
- 0200 (octal) words. This provides for register storage
- for the routine which overflows the stack. */
-
-struct stack_segment_linkage
- {
- long ss[0200]; /* 0200 overflow words. */
- long sssize:32; /* Number of words in this segment. */
- long ssbase:32; /* Offset to stack base. */
- long:32;
- long sspseg:32; /* Offset to linkage control of previous
- segment of stack. */
- long:32;
- long sstcpt:32; /* Pointer to task common address block. */
- long sscsnm; /* Private control structure number for
- microtasking. */
- long ssusr1; /* Reserved for user. */
- long ssusr2; /* Reserved for user. */
- long sstpid; /* Process ID for pid based multi-tasking. */
- long ssgvup; /* Pointer to multitasking thread giveup. */
- long sscray[7]; /* Reserved for Cray Research. */
- long ssa0;
- long ssa1;
- long ssa2;
- long ssa3;
- long ssa4;
- long ssa5;
- long ssa6;
- long ssa7;
- long sss0;
- long sss1;
- long sss2;
- long sss3;
- long sss4;
- long sss5;
- long sss6;
- long sss7;
- };
-
-#else /* CRAY2 */
-/* The following structure defines the vector of words
- returned by the STKSTAT library routine. */
-struct stk_stat
- {
- long now; /* Current total stack size. */
- long maxc; /* Amount of contiguous space which would
- be required to satisfy the maximum
- stack demand to date. */
- long high_water; /* Stack high-water mark. */
- long overflows; /* Number of stack overflow ($STKOFEN) calls. */
- long hits; /* Number of internal buffer hits. */
- long extends; /* Number of block extensions. */
- long stko_mallocs; /* Block allocations by $STKOFEN. */
- long underflows; /* Number of stack underflow calls ($STKRETN). */
- long stko_free; /* Number of deallocations by $STKRETN. */
- long stkm_free; /* Number of deallocations by $STKMRET. */
- long segments; /* Current number of stack segments. */
- long maxs; /* Maximum number of stack segments so far. */
- long pad_size; /* Stack pad size. */
- long current_address; /* Current stack segment address. */
- long current_size; /* Current stack segment size. This
- number is actually corrupted by STKSTAT to
- include the fifteen word trailer area. */
- long initial_address; /* Address of initial segment. */
- long initial_size; /* Size of initial segment. */
- };
-
-/* The following structure describes the data structure which trails
- any stack segment. I think that the description in 'asdef' is
- out of date. I only describe the parts that I am sure about. */
-
-struct stk_trailer
- {
- long this_address; /* Address of this block. */
- long this_size; /* Size of this block (does not include
- this trailer). */
- long unknown2;
- long unknown3;
- long link; /* Address of trailer block of previous
- segment. */
- long unknown5;
- long unknown6;
- long unknown7;
- long unknown8;
- long unknown9;
- long unknown10;
- long unknown11;
- long unknown12;
- long unknown13;
- long unknown14;
- };
-
-#endif /* CRAY2 */
-#endif /* not CRAY_STACK */
-
-#ifdef CRAY2
-/* Determine a "stack measure" for an arbitrary ADDRESS.
- I doubt that "lint" will like this much. */
-
-static long
-i00afunc (long *address)
-{
- struct stk_stat status;
- struct stk_trailer *trailer;
- long *block, size;
- long result = 0;
-
- /* We want to iterate through all of the segments. The first
- step is to get the stack status structure. We could do this
- more quickly and more directly, perhaps, by referencing the
- $LM00 common block, but I know that this works. */
-
- STKSTAT (&status);
-
- /* Set up the iteration. */
-
- trailer = (struct stk_trailer *) (status.current_address
- + status.current_size
- - 15);
-
- /* There must be at least one stack segment. Therefore it is
- a fatal error if "trailer" is null. */
-
- if (trailer == 0)
- abort ();
-
- /* Discard segments that do not contain our argument address. */
-
- while (trailer != 0)
- {
- block = (long *) trailer->this_address;
- size = trailer->this_size;
- if (block == 0 || size == 0)
- abort ();
- trailer = (struct stk_trailer *) trailer->link;
- if ((block <= address) && (address < (block + size)))
- break;
- }
-
- /* Set the result to the offset in this segment and add the sizes
- of all predecessor segments. */
-
- result = address - block;
-
- if (trailer == 0)
- {
- return result;
- }
-
- do
- {
- if (trailer->this_size <= 0)
- abort ();
- result += trailer->this_size;
- trailer = (struct stk_trailer *) trailer->link;
- }
- while (trailer != 0);
-
- /* We are done. Note that if you present a bogus address (one
- not in any segment), you will get a different number back, formed
- from subtracting the address of the first block. This is probably
- not what you want. */
-
- return (result);
-}
-
-#else /* not CRAY2 */
-/* Stack address function for a CRAY-1, CRAY X-MP, or CRAY Y-MP.
- Determine the number of the cell within the stack,
- given the address of the cell. The purpose of this
- routine is to linearize, in some sense, stack addresses
- for alloca. */
-
-static long
-i00afunc (long address)
-{
- long stkl = 0;
-
- long size, pseg, this_segment, stack;
- long result = 0;
-
- struct stack_segment_linkage *ssptr;
-
- /* Register B67 contains the address of the end of the
- current stack segment. If you (as a subprogram) store
- your registers on the stack and find that you are past
- the contents of B67, you have overflowed the segment.
-
- B67 also points to the stack segment linkage control
- area, which is what we are really interested in. */
-
- stkl = CRAY_STACKSEG_END ();
- ssptr = (struct stack_segment_linkage *) stkl;
-
- /* If one subtracts 'size' from the end of the segment,
- one has the address of the first word of the segment.
-
- If this is not the first segment, 'pseg' will be
- nonzero. */
-
- pseg = ssptr->sspseg;
- size = ssptr->sssize;
-
- this_segment = stkl - size;
-
- /* It is possible that calling this routine itself caused
- a stack overflow. Discard stack segments which do not
- contain the target address. */
-
- while (!(this_segment <= address && address <= stkl))
- {
-#ifdef DEBUG_I00AFUNC
- fprintf (stderr, "%011o %011o %011o\n", this_segment, address, stkl);
-#endif
- if (pseg == 0)
- break;
- stkl = stkl - pseg;
- ssptr = (struct stack_segment_linkage *) stkl;
- size = ssptr->sssize;
- pseg = ssptr->sspseg;
- this_segment = stkl - size;
- }
-
- result = address - this_segment;
-
- /* If you subtract pseg from the current end of the stack,
- you get the address of the previous stack segment's end.
- This seems a little convoluted to me, but I'll bet you save
- a cycle somewhere. */
-
- while (pseg != 0)
- {
-#ifdef DEBUG_I00AFUNC
- fprintf (stderr, "%011o %011o\n", pseg, size);
-#endif
- stkl = stkl - pseg;
- ssptr = (struct stack_segment_linkage *) stkl;
- size = ssptr->sssize;
- pseg = ssptr->sspseg;
- result += size;
- }
- return (result);
-}
-
-#endif /* not CRAY2 */
-#endif /* CRAY */
diff --git a/gcc-4.7/libiberty/argv.c b/gcc-4.7/libiberty/argv.c
deleted file mode 100644
index ca53f9149..000000000
--- a/gcc-4.7/libiberty/argv.c
+++ /dev/null
@@ -1,567 +0,0 @@
-/* Create and destroy argument vectors (argv's)
- Copyright (C) 1992, 2001, 2010 Free Software Foundation, Inc.
- Written by Fred Fish @ Cygnus Support
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-
-/* Create and destroy argument vectors. An argument vector is simply an
- array of string pointers, terminated by a NULL pointer. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-#include "safe-ctype.h"
-
-/* Routines imported from standard C runtime libraries. */
-
-#include <stddef.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-#ifndef EOS
-#define EOS '\0'
-#endif
-
-#define INITIAL_MAXARGC 8 /* Number of args + NULL in initial argv */
-
-
-/*
-
-@deftypefn Extension char** dupargv (char **@var{vector})
-
-Duplicate an argument vector. Simply scans through @var{vector},
-duplicating each argument until the terminating @code{NULL} is found.
-Returns a pointer to the argument vector if successful. Returns
-@code{NULL} if there is insufficient memory to complete building the
-argument vector.
-
-@end deftypefn
-
-*/
-
-char **
-dupargv (char **argv)
-{
- int argc;
- char **copy;
-
- if (argv == NULL)
- return NULL;
-
- /* the vector */
- for (argc = 0; argv[argc] != NULL; argc++);
- copy = (char **) malloc ((argc + 1) * sizeof (char *));
- if (copy == NULL)
- return NULL;
-
- /* the strings */
- for (argc = 0; argv[argc] != NULL; argc++)
- {
- int len = strlen (argv[argc]);
- copy[argc] = (char *) malloc (len + 1);
- if (copy[argc] == NULL)
- {
- freeargv (copy);
- return NULL;
- }
- strcpy (copy[argc], argv[argc]);
- }
- copy[argc] = NULL;
- return copy;
-}
-
-/*
-
-@deftypefn Extension void freeargv (char **@var{vector})
-
-Free an argument vector that was built using @code{buildargv}. Simply
-scans through @var{vector}, freeing the memory for each argument until
-the terminating @code{NULL} is found, and then frees @var{vector}
-itself.
-
-@end deftypefn
-
-*/
-
-void freeargv (char **vector)
-{
- register char **scan;
-
- if (vector != NULL)
- {
- for (scan = vector; *scan != NULL; scan++)
- {
- free (*scan);
- }
- free (vector);
- }
-}
-
-static void
-consume_whitespace (const char **input)
-{
- while (ISSPACE (**input))
- {
- (*input)++;
- }
-}
-
-static int
-only_whitespace (const char* input)
-{
- while (*input != EOS && ISSPACE (*input))
- input++;
-
- return (*input == EOS);
-}
-
-/*
-
-@deftypefn Extension char** buildargv (char *@var{sp})
-
-Given a pointer to a string, parse the string extracting fields
-separated by whitespace and optionally enclosed within either single
-or double quotes (which are stripped off), and build a vector of
-pointers to copies of the string for each field. The input string
-remains unchanged. The last element of the vector is followed by a
-@code{NULL} element.
-
-All of the memory for the pointer array and copies of the string
-is obtained from @code{malloc}. All of the memory can be returned to the
-system with the single function call @code{freeargv}, which takes the
-returned result of @code{buildargv}, as it's argument.
-
-Returns a pointer to the argument vector if successful. Returns
-@code{NULL} if @var{sp} is @code{NULL} or if there is insufficient
-memory to complete building the argument vector.
-
-If the input is a null string (as opposed to a @code{NULL} pointer),
-then buildarg returns an argument vector that has one arg, a null
-string.
-
-@end deftypefn
-
-The memory for the argv array is dynamically expanded as necessary.
-
-In order to provide a working buffer for extracting arguments into,
-with appropriate stripping of quotes and translation of backslash
-sequences, we allocate a working buffer at least as long as the input
-string. This ensures that we always have enough space in which to
-work, since the extracted arg is never larger than the input string.
-
-The argument vector is always kept terminated with a @code{NULL} arg
-pointer, so it can be passed to @code{freeargv} at any time, or
-returned, as appropriate.
-
-*/
-
-char **buildargv (const char *input)
-{
- char *arg;
- char *copybuf;
- int squote = 0;
- int dquote = 0;
- int bsquote = 0;
- int argc = 0;
- int maxargc = 0;
- char **argv = NULL;
- char **nargv;
-
- if (input != NULL)
- {
- copybuf = (char *) alloca (strlen (input) + 1);
- /* Is a do{}while to always execute the loop once. Always return an
- argv, even for null strings. See NOTES above, test case below. */
- do
- {
- /* Pick off argv[argc] */
- consume_whitespace (&input);
-
- if ((maxargc == 0) || (argc >= (maxargc - 1)))
- {
- /* argv needs initialization, or expansion */
- if (argv == NULL)
- {
- maxargc = INITIAL_MAXARGC;
- nargv = (char **) malloc (maxargc * sizeof (char *));
- }
- else
- {
- maxargc *= 2;
- nargv = (char **) realloc (argv, maxargc * sizeof (char *));
- }
- if (nargv == NULL)
- {
- if (argv != NULL)
- {
- freeargv (argv);
- argv = NULL;
- }
- break;
- }
- argv = nargv;
- argv[argc] = NULL;
- }
- /* Begin scanning arg */
- arg = copybuf;
- while (*input != EOS)
- {
- if (ISSPACE (*input) && !squote && !dquote && !bsquote)
- {
- break;
- }
- else
- {
- if (bsquote)
- {
- bsquote = 0;
- *arg++ = *input;
- }
- else if (*input == '\\')
- {
- bsquote = 1;
- }
- else if (squote)
- {
- if (*input == '\'')
- {
- squote = 0;
- }
- else
- {
- *arg++ = *input;
- }
- }
- else if (dquote)
- {
- if (*input == '"')
- {
- dquote = 0;
- }
- else
- {
- *arg++ = *input;
- }
- }
- else
- {
- if (*input == '\'')
- {
- squote = 1;
- }
- else if (*input == '"')
- {
- dquote = 1;
- }
- else
- {
- *arg++ = *input;
- }
- }
- input++;
- }
- }
- *arg = EOS;
- argv[argc] = strdup (copybuf);
- if (argv[argc] == NULL)
- {
- freeargv (argv);
- argv = NULL;
- break;
- }
- argc++;
- argv[argc] = NULL;
-
- consume_whitespace (&input);
- }
- while (*input != EOS);
- }
- return (argv);
-}
-
-/*
-
-@deftypefn Extension int writeargv (const char **@var{argv}, FILE *@var{file})
-
-Write each member of ARGV, handling all necessary quoting, to the file
-named by FILE, separated by whitespace. Return 0 on success, non-zero
-if an error occurred while writing to FILE.
-
-@end deftypefn
-
-*/
-
-int
-writeargv (char **argv, FILE *f)
-{
- int status = 0;
-
- if (f == NULL)
- return 1;
-
- while (*argv != NULL)
- {
- const char *arg = *argv;
-
- while (*arg != EOS)
- {
- char c = *arg;
-
- if (ISSPACE(c) || c == '\\' || c == '\'' || c == '"')
- if (EOF == fputc ('\\', f))
- {
- status = 1;
- goto done;
- }
-
- if (EOF == fputc (c, f))
- {
- status = 1;
- goto done;
- }
- arg++;
- }
-
- if (EOF == fputc ('\n', f))
- {
- status = 1;
- goto done;
- }
- argv++;
- }
-
- done:
- return status;
-}
-
-/*
-
-@deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp})
-
-The @var{argcp} and @code{argvp} arguments are pointers to the usual
-@code{argc} and @code{argv} arguments to @code{main}. This function
-looks for arguments that begin with the character @samp{@@}. Any such
-arguments are interpreted as ``response files''. The contents of the
-response file are interpreted as additional command line options. In
-particular, the file is separated into whitespace-separated strings;
-each such string is taken as a command-line option. The new options
-are inserted in place of the option naming the response file, and
-@code{*argcp} and @code{*argvp} will be updated. If the value of
-@code{*argvp} is modified by this function, then the new value has
-been dynamically allocated and can be deallocated by the caller with
-@code{freeargv}. However, most callers will simply call
-@code{expandargv} near the beginning of @code{main} and allow the
-operating system to free the memory when the program exits.
-
-@end deftypefn
-
-*/
-
-void
-expandargv (int *argcp, char ***argvp)
-{
- /* The argument we are currently processing. */
- int i = 0;
- /* Non-zero if ***argvp has been dynamically allocated. */
- int argv_dynamic = 0;
- /* Limit the number of response files that we parse in order
- to prevent infinite recursion. */
- unsigned int iteration_limit = 2000;
- /* Loop over the arguments, handling response files. We always skip
- ARGVP[0], as that is the name of the program being run. */
- while (++i < *argcp)
- {
- /* The name of the response file. */
- const char *filename;
- /* The response file. */
- FILE *f;
- /* An upper bound on the number of characters in the response
- file. */
- long pos;
- /* The number of characters in the response file, when actually
- read. */
- size_t len;
- /* A dynamically allocated buffer used to hold options read from a
- response file. */
- char *buffer;
- /* Dynamically allocated storage for the options read from the
- response file. */
- char **file_argv;
- /* The number of options read from the response file, if any. */
- size_t file_argc;
- /* We are only interested in options of the form "@file". */
- filename = (*argvp)[i];
- if (filename[0] != '@')
- continue;
- /* If we have iterated too many times then stop. */
- if (-- iteration_limit == 0)
- {
- fprintf (stderr, "%s: error: too many @-files encountered\n", (*argvp)[0]);
- xexit (1);
- }
- /* Read the contents of the file. */
- f = fopen (++filename, "r");
- if (!f)
- continue;
- if (fseek (f, 0L, SEEK_END) == -1)
- goto error;
- pos = ftell (f);
- if (pos == -1)
- goto error;
- if (fseek (f, 0L, SEEK_SET) == -1)
- goto error;
- buffer = (char *) xmalloc (pos * sizeof (char) + 1);
- len = fread (buffer, sizeof (char), pos, f);
- if (len != (size_t) pos
- /* On Windows, fread may return a value smaller than POS,
- due to CR/LF->CR translation when reading text files.
- That does not in-and-of itself indicate failure. */
- && ferror (f))
- goto error;
- /* Add a NUL terminator. */
- buffer[len] = '\0';
- /* If the file is empty or contains only whitespace, buildargv would
- return a single empty argument. In this context we want no arguments,
- instead. */
- if (only_whitespace (buffer))
- {
- file_argv = (char **) xmalloc (sizeof (char *));
- file_argv[0] = NULL;
- }
- else
- /* Parse the string. */
- file_argv = buildargv (buffer);
- /* If *ARGVP is not already dynamically allocated, copy it. */
- if (!argv_dynamic)
- {
- *argvp = dupargv (*argvp);
- if (!*argvp)
- {
- fputs ("\nout of memory\n", stderr);
- xexit (1);
- }
- }
- /* Count the number of arguments. */
- file_argc = 0;
- while (file_argv[file_argc])
- ++file_argc;
- /* Now, insert FILE_ARGV into ARGV. The "+1" below handles the
- NULL terminator at the end of ARGV. */
- *argvp = ((char **)
- xrealloc (*argvp,
- (*argcp + file_argc + 1) * sizeof (char *)));
- memmove (*argvp + i + file_argc, *argvp + i + 1,
- (*argcp - i) * sizeof (char *));
- memcpy (*argvp + i, file_argv, file_argc * sizeof (char *));
- /* The original option has been replaced by all the new
- options. */
- *argcp += file_argc - 1;
- /* Free up memory allocated to process the response file. We do
- not use freeargv because the individual options in FILE_ARGV
- are now in the main ARGV. */
- free (file_argv);
- free (buffer);
- /* Rescan all of the arguments just read to support response
- files that include other response files. */
- --i;
- error:
- /* We're all done with the file now. */
- fclose (f);
- }
-}
-
-/*
-
-@deftypefn Extension int countargv (char **@var{argv})
-
-Return the number of elements in @var{argv}.
-Returns zero if @var{argv} is NULL.
-
-@end deftypefn
-
-*/
-
-int
-countargv (char **argv)
-{
- int argc;
-
- if (argv == NULL)
- return 0;
- for (argc = 0; argv[argc] != NULL; argc++)
- continue;
- return argc;
-}
-
-#ifdef MAIN
-
-/* Simple little test driver. */
-
-static const char *const tests[] =
-{
- "a simple command line",
- "arg 'foo' is single quoted",
- "arg \"bar\" is double quoted",
- "arg \"foo bar\" has embedded whitespace",
- "arg 'Jack said \\'hi\\'' has single quotes",
- "arg 'Jack said \\\"hi\\\"' has double quotes",
- "a b c d e f g h i j k l m n o p q r s t u v w x y z 1 2 3 4 5 6 7 8 9",
-
- /* This should be expanded into only one argument. */
- "trailing-whitespace ",
-
- "",
- NULL
-};
-
-int
-main (void)
-{
- char **argv;
- const char *const *test;
- char **targs;
-
- for (test = tests; *test != NULL; test++)
- {
- printf ("buildargv(\"%s\")\n", *test);
- if ((argv = buildargv (*test)) == NULL)
- {
- printf ("failed!\n\n");
- }
- else
- {
- for (targs = argv; *targs != NULL; targs++)
- {
- printf ("\t\"%s\"\n", *targs);
- }
- printf ("\n");
- }
- freeargv (argv);
- }
-
- return 0;
-}
-
-#endif /* MAIN */
diff --git a/gcc-4.7/libiberty/asprintf.c b/gcc-4.7/libiberty/asprintf.c
deleted file mode 100644
index 3cf505266..000000000
--- a/gcc-4.7/libiberty/asprintf.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Like sprintf but provides a pointer to malloc'd storage, which must
- be freed by the caller.
- Copyright (C) 1997, 2003 Free Software Foundation, Inc.
- Contributed by Cygnus Solutions.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-
-#include <stdarg.h>
-
-/*
-
-@deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...)
-
-Like @code{sprintf}, but instead of passing a pointer to a buffer, you
-pass a pointer to a pointer. This function will compute the size of
-the buffer needed, allocate memory with @code{malloc}, and store a
-pointer to the allocated memory in @code{*@var{resptr}}. The value
-returned is the same as @code{sprintf} would return. If memory could
-not be allocated, minus one is returned and @code{NULL} is stored in
-@code{*@var{resptr}}.
-
-@end deftypefn
-
-*/
-
-int
-asprintf (char **buf, const char *fmt, ...)
-{
- int status;
- VA_OPEN (ap, fmt);
- VA_FIXEDARG (ap, char **, buf);
- VA_FIXEDARG (ap, const char *, fmt);
- status = vasprintf (buf, fmt, ap);
- VA_CLOSE (ap);
- return status;
-}
diff --git a/gcc-4.7/libiberty/at-file.texi b/gcc-4.7/libiberty/at-file.texi
deleted file mode 100644
index 080d1951d..000000000
--- a/gcc-4.7/libiberty/at-file.texi
+++ /dev/null
@@ -1,15 +0,0 @@
-@c This file is designed to be included in manuals that use
-@c expandargv.
-
-@item @@@var{file}
-Read command-line options from @var{file}. The options read are
-inserted in place of the original @@@var{file} option. If @var{file}
-does not exist, or cannot be read, then the option will be treated
-literally, and not removed.
-
-Options in @var{file} are separated by whitespace. A whitespace
-character may be included in an option by surrounding the entire
-option in either single or double quotes. Any character (including a
-backslash) may be included by prefixing the character to be included
-with a backslash. The @var{file} may itself contain additional
-@@@var{file} options; any such options will be processed recursively.
diff --git a/gcc-4.7/libiberty/atexit.c b/gcc-4.7/libiberty/atexit.c
deleted file mode 100644
index e091f0139..000000000
--- a/gcc-4.7/libiberty/atexit.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* Wrapper to implement ANSI C's atexit using SunOS's on_exit. */
-/* This function is in the public domain. --Mike Stump. */
-
-/*
-
-@deftypefn Supplemental int atexit (void (*@var{f})())
-
-Causes function @var{f} to be called at exit. Returns 0.
-
-@end deftypefn
-
-*/
-
-#include "config.h"
-
-#ifdef HAVE_ON_EXIT
-
-int
-atexit(void (*f)(void))
-{
- /* If the system doesn't provide a definition for atexit, use on_exit
- if the system provides that. */
- on_exit (f, 0);
- return 0;
-}
-
-#endif
diff --git a/gcc-4.7/libiberty/basename.c b/gcc-4.7/libiberty/basename.c
deleted file mode 100644
index 0f2c069f0..000000000
--- a/gcc-4.7/libiberty/basename.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Return the basename of a pathname.
- This file is in the public domain. */
-
-/*
-
-@deftypefn Supplemental char* basename (const char *@var{name})
-
-Returns a pointer to the last component of pathname @var{name}.
-Behavior is undefined if the pathname ends in a directory separator.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-#include "safe-ctype.h"
-
-#ifndef DIR_SEPARATOR
-#define DIR_SEPARATOR '/'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
- defined (__OS2__)
-#define HAVE_DOS_BASED_FILE_SYSTEM
-#ifndef DIR_SEPARATOR_2
-#define DIR_SEPARATOR_2 '\\'
-#endif
-#endif
-
-/* Define IS_DIR_SEPARATOR. */
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else /* DIR_SEPARATOR_2 */
-# define IS_DIR_SEPARATOR(ch) \
- (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif /* DIR_SEPARATOR_2 */
-
-char *
-basename (const char *name)
-{
- const char *base;
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- /* Skip over the disk name in MSDOS pathnames. */
- if (ISALPHA (name[0]) && name[1] == ':')
- name += 2;
-#endif
-
- for (base = name; *name; name++)
- {
- if (IS_DIR_SEPARATOR (*name))
- {
- base = name + 1;
- }
- }
- return (char *) base;
-}
-
diff --git a/gcc-4.7/libiberty/bcmp.c b/gcc-4.7/libiberty/bcmp.c
deleted file mode 100644
index c639f9895..000000000
--- a/gcc-4.7/libiberty/bcmp.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/* bcmp
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count})
-
-Compares the first @var{count} bytes of two areas of memory. Returns
-zero if they are the same, nonzero otherwise. Returns zero if
-@var{count} is zero. A nonzero result only indicates a difference,
-it does not indicate any sorting order (say, by having a positive
-result mean @var{x} sorts before @var{y}).
-
-@end deftypefn
-
-*/
-
-#include <stddef.h>
-
-extern int memcmp(const void *, const void *, size_t);
-
-int
-bcmp (const void *s1, const void *s2, size_t count)
-{
- return memcmp (s1, s2, count);
-}
-
diff --git a/gcc-4.7/libiberty/bcopy.c b/gcc-4.7/libiberty/bcopy.c
deleted file mode 100644
index f9b7a8acd..000000000
--- a/gcc-4.7/libiberty/bcopy.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/* bcopy -- copy memory regions of arbitary length
-
-@deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length})
-
-Copies @var{length} bytes from memory region @var{in} to region
-@var{out}. The use of @code{bcopy} is deprecated in new programs.
-
-@end deftypefn
-
-*/
-
-#include <stddef.h>
-
-void
-bcopy (const void *src, void *dest, size_t len)
-{
- if (dest < src)
- {
- const char *firsts = (const char *) src;
- char *firstd = (char *) dest;
- while (len--)
- *firstd++ = *firsts++;
- }
- else
- {
- const char *lasts = (const char *)src + (len-1);
- char *lastd = (char *)dest + (len-1);
- while (len--)
- *lastd-- = *lasts--;
- }
-}
diff --git a/gcc-4.7/libiberty/bsearch.c b/gcc-4.7/libiberty/bsearch.c
deleted file mode 100644
index 35fad1997..000000000
--- a/gcc-4.7/libiberty/bsearch.c
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Copyright (c) 1990 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. [rescinded 22 July 1999]
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
-
-@deftypefn Supplemental void* bsearch (const void *@var{key}, @
- const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, @
- int (*@var{compar})(const void *, const void *))
-
-Performs a search over an array of @var{nmemb} elements pointed to by
-@var{base} for a member that matches the object pointed to by @var{key}.
-The size of each member is specified by @var{size}. The array contents
-should be sorted in ascending order according to the @var{compar}
-comparison function. This routine should take two arguments pointing to
-the @var{key} and to an array member, in that order, and should return an
-integer less than, equal to, or greater than zero if the @var{key} object
-is respectively less than, matching, or greater than the array member.
-
-@end deftypefn
-
-*/
-
-#include "config.h"
-#include "ansidecl.h"
-#include <sys/types.h> /* size_t */
-#include <stdio.h>
-
-/*
- * Perform a binary search.
- *
- * The code below is a bit sneaky. After a comparison fails, we
- * divide the work in half by moving either left or right. If lim
- * is odd, moving left simply involves halving lim: e.g., when lim
- * is 5 we look at item 2, so we change lim to 2 so that we will
- * look at items 0 & 1. If lim is even, the same applies. If lim
- * is odd, moving right again involes halving lim, this time moving
- * the base up one item past p: e.g., when lim is 5 we change base
- * to item 3 and make lim 2 so that we will look at items 3 and 4.
- * If lim is even, however, we have to shrink it by one before
- * halving: e.g., when lim is 4, we still looked at item 2, so we
- * have to make lim 3, then halve, obtaining 1, so that we will only
- * look at item 3.
- */
-void *
-bsearch (register const void *key, const void *base0,
- size_t nmemb, register size_t size,
- register int (*compar)(const void *, const void *))
-{
- register const char *base = (const char *) base0;
- register int lim, cmp;
- register const void *p;
-
- for (lim = nmemb; lim != 0; lim >>= 1) {
- p = base + (lim >> 1) * size;
- cmp = (*compar)(key, p);
- if (cmp == 0)
- return (void *)p;
- if (cmp > 0) { /* key > p: move right */
- base = (const char *)p + size;
- lim--;
- } /* else move left */
- }
- return (NULL);
-}
diff --git a/gcc-4.7/libiberty/bzero.c b/gcc-4.7/libiberty/bzero.c
deleted file mode 100644
index 44ad73da4..000000000
--- a/gcc-4.7/libiberty/bzero.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/* Portable version of bzero for systems without it.
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental void bzero (char *@var{mem}, int @var{count})
-
-Zeros @var{count} bytes starting at @var{mem}. Use of this function
-is deprecated in favor of @code{memset}.
-
-@end deftypefn
-
-*/
-
-#include <stddef.h>
-
-extern void *memset(void *, int, size_t);
-
-void
-bzero (void *to, size_t count)
-{
- memset (to, 0, count);
-}
diff --git a/gcc-4.7/libiberty/calloc.c b/gcc-4.7/libiberty/calloc.c
deleted file mode 100644
index f4bd27b1c..000000000
--- a/gcc-4.7/libiberty/calloc.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* calloc -- allocate memory which has been initialized to zero.
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize})
-
-Uses @code{malloc} to allocate storage for @var{nelem} objects of
-@var{elsize} bytes each, then zeros the memory.
-
-@end deftypefn
-
-*/
-
-#include "ansidecl.h"
-#include <stddef.h>
-
-/* For systems with larger pointers than ints, this must be declared. */
-PTR malloc (size_t);
-void bzero (PTR, size_t);
-
-PTR
-calloc (size_t nelem, size_t elsize)
-{
- register PTR ptr;
-
- if (nelem == 0 || elsize == 0)
- nelem = elsize = 1;
-
- ptr = malloc (nelem * elsize);
- if (ptr) bzero (ptr, nelem * elsize);
-
- return ptr;
-}
diff --git a/gcc-4.7/libiberty/choose-temp.c b/gcc-4.7/libiberty/choose-temp.c
deleted file mode 100644
index 0a454cfa7..000000000
--- a/gcc-4.7/libiberty/choose-temp.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Utility to pick a temporary filename prefix.
- Copyright (C) 1996, 1997, 1998 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h> /* May get P_tmpdir. */
-#include <sys/types.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "libiberty.h"
-extern char *choose_tmpdir (void);
-
-/* Name of temporary file.
- mktemp requires 6 trailing X's. */
-#define TEMP_FILE "ccXXXXXX"
-#define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1)
-
-/*
-
-@deftypefn Extension char* choose_temp_base (void)
-
-Return a prefix for temporary file names or @code{NULL} if unable to
-find one. The current directory is chosen if all else fails so the
-program is exited if a temporary directory can't be found (@code{mktemp}
-fails). The buffer for the result is obtained with @code{xmalloc}.
-
-This function is provided for backwards compatibility only. Its use is
-not recommended.
-
-@end deftypefn
-
-*/
-
-char *
-choose_temp_base (void)
-{
- const char *base = choose_tmpdir ();
- char *temp_filename;
- int len;
-
- len = strlen (base);
- temp_filename = XNEWVEC (char, len + TEMP_FILE_LEN + 1);
- strcpy (temp_filename, base);
- strcpy (temp_filename + len, TEMP_FILE);
-
- if (mktemp (temp_filename) == 0)
- abort ();
- return temp_filename;
-}
diff --git a/gcc-4.7/libiberty/clock.c b/gcc-4.7/libiberty/clock.c
deleted file mode 100644
index 07d902e8a..000000000
--- a/gcc-4.7/libiberty/clock.c
+++ /dev/null
@@ -1,103 +0,0 @@
-/* ANSI-compatible clock function.
- Copyright (C) 1994, 1995, 1999 Free Software Foundation, Inc.
-
-This file is part of the libiberty library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
-
-@deftypefn Supplemental long clock (void)
-
-Returns an approximation of the CPU time used by the process as a
-@code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the
-number of seconds used.
-
-@end deftypefn
-
-*/
-
-#include "config.h"
-
-#ifdef HAVE_GETRUSAGE
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-
-#ifdef HAVE_TIMES
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#include <sys/times.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#ifdef _SC_CLK_TCK
-#define GNU_HZ sysconf(_SC_CLK_TCK)
-#else
-#ifdef HZ
-#define GNU_HZ HZ
-#else
-#ifdef CLOCKS_PER_SEC
-#define GNU_HZ CLOCKS_PER_SEC
-#endif
-#endif
-#endif
-
-/* FIXME: should be able to declare as clock_t. */
-
-long
-clock (void)
-{
-#ifdef HAVE_GETRUSAGE
- struct rusage rusage;
-
- getrusage (0, &rusage);
- return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec
- + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);
-#else
-#ifdef HAVE_TIMES
- struct tms tms;
-
- times (&tms);
- return (tms.tms_utime + tms.tms_stime) * (1000000 / GNU_HZ);
-#else
-#ifdef VMS
- struct
- {
- int proc_user_time;
- int proc_system_time;
- int child_user_time;
- int child_system_time;
- } vms_times;
-
- times (&vms_times);
- return (vms_times.proc_user_time + vms_times.proc_system_time) * 10000;
-#else
- /* A fallback, if nothing else available. */
- return 0;
-#endif /* VMS */
-#endif /* HAVE_TIMES */
-#endif /* HAVE_GETRUSAGE */
-}
-
diff --git a/gcc-4.7/libiberty/concat.c b/gcc-4.7/libiberty/concat.c
deleted file mode 100644
index 9779d5663..000000000
--- a/gcc-4.7/libiberty/concat.c
+++ /dev/null
@@ -1,234 +0,0 @@
-/* Concatenate variable number of strings.
- Copyright (C) 1991, 1994, 2001, 2011 Free Software Foundation, Inc.
- Written by Fred Fish @ Cygnus Support
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-
-/*
-
-@deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @
- @dots{}, @code{NULL})
-
-Concatenate zero or more of strings and return the result in freshly
-@code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is
-available. The argument list is terminated by the first @code{NULL}
-pointer encountered. Pointers to empty strings are ignored.
-
-@end deftypefn
-
-NOTES
-
- This function uses xmalloc() which is expected to be a front end
- function to malloc() that deals with low memory situations. In
- typical use, if malloc() returns NULL then xmalloc() diverts to an
- error handler routine which never returns, and thus xmalloc will
- never return a NULL pointer. If the client application wishes to
- deal with low memory situations itself, it should supply an xmalloc
- that just directly invokes malloc and blindly returns whatever
- malloc returns.
-
-*/
-
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-#include <sys/types.h> /* size_t */
-
-#include <stdarg.h>
-
-# if HAVE_STRING_H
-# include <string.h>
-# else
-# if HAVE_STRINGS_H
-# include <strings.h>
-# endif
-# endif
-
-#if HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-static inline unsigned long vconcat_length (const char *, va_list);
-static inline unsigned long
-vconcat_length (const char *first, va_list args)
-{
- unsigned long length = 0;
- const char *arg;
-
- for (arg = first; arg ; arg = va_arg (args, const char *))
- length += strlen (arg);
-
- return length;
-}
-
-static inline char *
-vconcat_copy (char *dst, const char *first, va_list args)
-{
- char *end = dst;
- const char *arg;
-
- for (arg = first; arg ; arg = va_arg (args, const char *))
- {
- unsigned long length = strlen (arg);
- memcpy (end, arg, length);
- end += length;
- }
- *end = '\000';
-
- return dst;
-}
-
-/* @undocumented concat_length */
-
-unsigned long
-concat_length (const char *first, ...)
-{
- unsigned long length;
-
- VA_OPEN (args, first);
- VA_FIXEDARG (args, const char *, first);
- length = vconcat_length (first, args);
- VA_CLOSE (args);
-
- return length;
-}
-
-/* @undocumented concat_copy */
-
-char *
-concat_copy (char *dst, const char *first, ...)
-{
- char *save_dst;
-
- VA_OPEN (args, first);
- VA_FIXEDARG (args, char *, dst);
- VA_FIXEDARG (args, const char *, first);
- vconcat_copy (dst, first, args);
- save_dst = dst; /* With K&R C, dst goes out of scope here. */
- VA_CLOSE (args);
-
- return save_dst;
-}
-
-#ifdef __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-char *libiberty_concat_ptr;
-#ifdef __cplusplus
-}
-#endif /* __cplusplus */
-
-/* @undocumented concat_copy2 */
-
-char *
-concat_copy2 (const char *first, ...)
-{
- VA_OPEN (args, first);
- VA_FIXEDARG (args, const char *, first);
- vconcat_copy (libiberty_concat_ptr, first, args);
- VA_CLOSE (args);
-
- return libiberty_concat_ptr;
-}
-
-char *
-concat (const char *first, ...)
-{
- char *newstr;
-
- /* First compute the size of the result and get sufficient memory. */
- VA_OPEN (args, first);
- VA_FIXEDARG (args, const char *, first);
- newstr = XNEWVEC (char, vconcat_length (first, args) + 1);
- VA_CLOSE (args);
-
- /* Now copy the individual pieces to the result string. */
- VA_OPEN (args, first);
- VA_FIXEDARG (args, const char *, first);
- vconcat_copy (newstr, first, args);
- VA_CLOSE (args);
-
- return newstr;
-}
-
-/*
-
-@deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @
- @dots{}, @code{NULL})
-
-Same as @code{concat}, except that if @var{optr} is not @code{NULL} it
-is freed after the string is created. This is intended to be useful
-when you're extending an existing string or building up a string in a
-loop:
-
-@example
- str = reconcat (str, "pre-", str, NULL);
-@end example
-
-@end deftypefn
-
-*/
-
-char *
-reconcat (char *optr, const char *first, ...)
-{
- char *newstr;
-
- /* First compute the size of the result and get sufficient memory. */
- VA_OPEN (args, first);
- VA_FIXEDARG (args, char *, optr);
- VA_FIXEDARG (args, const char *, first);
- newstr = XNEWVEC (char, vconcat_length (first, args) + 1);
- VA_CLOSE (args);
-
- /* Now copy the individual pieces to the result string. */
- VA_OPEN (args, first);
- VA_FIXEDARG (args, char *, optr);
- VA_FIXEDARG (args, const char *, first);
- vconcat_copy (newstr, first, args);
- if (optr) /* Done before VA_CLOSE so optr stays in scope for K&R C. */
- free (optr);
- VA_CLOSE (args);
-
- return newstr;
-}
-
-#ifdef MAIN
-#define NULLP (char *)0
-
-/* Simple little test driver. */
-
-#include <stdio.h>
-
-int
-main (void)
-{
- printf ("\"\" = \"%s\"\n", concat (NULLP));
- printf ("\"a\" = \"%s\"\n", concat ("a", NULLP));
- printf ("\"ab\" = \"%s\"\n", concat ("a", "b", NULLP));
- printf ("\"abc\" = \"%s\"\n", concat ("a", "b", "c", NULLP));
- printf ("\"abcd\" = \"%s\"\n", concat ("ab", "cd", NULLP));
- printf ("\"abcde\" = \"%s\"\n", concat ("ab", "c", "de", NULLP));
- printf ("\"abcdef\" = \"%s\"\n", concat ("", "a", "", "bcd", "ef", NULLP));
- return 0;
-}
-
-#endif
diff --git a/gcc-4.7/libiberty/config.h-vms b/gcc-4.7/libiberty/config.h-vms
deleted file mode 100644
index d923ecb3c..000000000
--- a/gcc-4.7/libiberty/config.h-vms
+++ /dev/null
@@ -1,14 +0,0 @@
-/* This is -*- C -*- */
-#define HAVE_STDLIB_H 1
-#define HAVE_UNISTD_H 1
-#define HAVE_STRING_H 1
-#define HAVE_SYS_STAT_H 1
-#define HAVE_SYS_TIME_H 1
-
-/* intptr_t is defined in inttypes.h! */
-#define intptr_t __int64
-
-/* Cheat: use vms builtin alloca. */
-#ifdef __DECC
-#define C_alloca(x) __ALLOCA(x)
-#endif
diff --git a/gcc-4.7/libiberty/config.in b/gcc-4.7/libiberty/config.in
deleted file mode 100644
index 17c4c2e44..000000000
--- a/gcc-4.7/libiberty/config.in
+++ /dev/null
@@ -1,496 +0,0 @@
-/* config.in. Generated from configure.ac by autoheader. */
-
-/* Define if building universal (internal helper macro) */
-#undef AC_APPLE_UNIVERSAL_BUILD
-
-/* Define to one of _getb67, GETB67, getb67 for Cray-2 and Cray-YMP systems.
- This function is required for alloca.c support on those systems. */
-#undef CRAY_STACKSEG_END
-
-/* Define to 1 if you have the <alloca.h> header file. */
-#undef HAVE_ALLOCA_H
-
-/* Define to 1 if you have the `asprintf' function. */
-#undef HAVE_ASPRINTF
-
-/* Define to 1 if you have the `atexit' function. */
-#undef HAVE_ATEXIT
-
-/* Define to 1 if you have the `basename' function. */
-#undef HAVE_BASENAME
-
-/* Define to 1 if you have the `bcmp' function. */
-#undef HAVE_BCMP
-
-/* Define to 1 if you have the `bcopy' function. */
-#undef HAVE_BCOPY
-
-/* Define to 1 if you have the `bsearch' function. */
-#undef HAVE_BSEARCH
-
-/* Define to 1 if you have the `bzero' function. */
-#undef HAVE_BZERO
-
-/* Define to 1 if you have the `calloc' function. */
-#undef HAVE_CALLOC
-
-/* Define to 1 if you have the `canonicalize_file_name' function. */
-#undef HAVE_CANONICALIZE_FILE_NAME
-
-/* Define to 1 if you have the `clock' function. */
-#undef HAVE_CLOCK
-
-/* Define to 1 if you have the declaration of `asprintf', and to 0 if you
- don't. */
-#undef HAVE_DECL_ASPRINTF
-
-/* Define to 1 if you have the declaration of `basename(char *)', and to 0 if
- you don't. */
-#undef HAVE_DECL_BASENAME
-
-/* Define to 1 if you have the declaration of `calloc', and to 0 if you don't.
- */
-#undef HAVE_DECL_CALLOC
-
-/* Define to 1 if you have the declaration of `ffs', and to 0 if you don't. */
-#undef HAVE_DECL_FFS
-
-/* Define to 1 if you have the declaration of `getenv', and to 0 if you don't.
- */
-#undef HAVE_DECL_GETENV
-
-/* Define to 1 if you have the declaration of `getopt', and to 0 if you don't.
- */
-#undef HAVE_DECL_GETOPT
-
-/* Define to 1 if you have the declaration of `malloc', and to 0 if you don't.
- */
-#undef HAVE_DECL_MALLOC
-
-/* Define to 1 if you have the declaration of `realloc', and to 0 if you
- don't. */
-#undef HAVE_DECL_REALLOC
-
-/* Define to 1 if you have the declaration of `sbrk', and to 0 if you don't.
- */
-#undef HAVE_DECL_SBRK
-
-/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
- don't. */
-#undef HAVE_DECL_SNPRINTF
-
-/* Define to 1 if you have the declaration of `strverscmp', and to 0 if you
- don't. */
-#undef HAVE_DECL_STRVERSCMP
-
-/* Define to 1 if you have the declaration of `vasprintf', and to 0 if you
- don't. */
-#undef HAVE_DECL_VASPRINTF
-
-/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
- don't. */
-#undef HAVE_DECL_VSNPRINTF
-
-/* Define to 1 if you have the `dup3' function. */
-#undef HAVE_DUP3
-
-/* Define to 1 if you have the <fcntl.h> header file. */
-#undef HAVE_FCNTL_H
-
-/* Define to 1 if you have the `ffs' function. */
-#undef HAVE_FFS
-
-/* Define to 1 if you have the `fork' function. */
-#undef HAVE_FORK
-
-/* Define to 1 if you have the `getcwd' function. */
-#undef HAVE_GETCWD
-
-/* Define to 1 if you have the `getpagesize' function. */
-#undef HAVE_GETPAGESIZE
-
-/* Define to 1 if you have the `getrlimit' function. */
-#undef HAVE_GETRLIMIT
-
-/* Define to 1 if you have the `getrusage' function. */
-#undef HAVE_GETRUSAGE
-
-/* Define to 1 if you have the `getsysinfo' function. */
-#undef HAVE_GETSYSINFO
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#undef HAVE_GETTIMEOFDAY
-
-/* Define to 1 if you have the `index' function. */
-#undef HAVE_INDEX
-
-/* Define to 1 if you have the `insque' function. */
-#undef HAVE_INSQUE
-
-/* Define to 1 if the system has the type `intptr_t'. */
-#undef HAVE_INTPTR_T
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the <limits.h> header file. */
-#undef HAVE_LIMITS_H
-
-/* Define to 1 if you have the <machine/hal_sysinfo.h> header file. */
-#undef HAVE_MACHINE_HAL_SYSINFO_H
-
-/* Define to 1 if you have the <malloc.h> header file. */
-#undef HAVE_MALLOC_H
-
-/* Define to 1 if you have the `memchr' function. */
-#undef HAVE_MEMCHR
-
-/* Define to 1 if you have the `memcmp' function. */
-#undef HAVE_MEMCMP
-
-/* Define to 1 if you have the `memcpy' function. */
-#undef HAVE_MEMCPY
-
-/* Define to 1 if you have the `memmem' function. */
-#undef HAVE_MEMMEM
-
-/* Define to 1 if you have the `memmove' function. */
-#undef HAVE_MEMMOVE
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if you have the `memset' function. */
-#undef HAVE_MEMSET
-
-/* Define to 1 if you have the `mkstemps' function. */
-#undef HAVE_MKSTEMPS
-
-/* Define to 1 if you have a working `mmap' system call. */
-#undef HAVE_MMAP
-
-/* Define to 1 if you have the `on_exit' function. */
-#undef HAVE_ON_EXIT
-
-/* Define to 1 if you have the <process.h> header file. */
-#undef HAVE_PROCESS_H
-
-/* Define to 1 if you have the `psignal' function. */
-#undef HAVE_PSIGNAL
-
-/* Define to 1 if you have the `pstat_getdynamic' function. */
-#undef HAVE_PSTAT_GETDYNAMIC
-
-/* Define to 1 if you have the `pstat_getstatic' function. */
-#undef HAVE_PSTAT_GETSTATIC
-
-/* Define to 1 if you have the `putenv' function. */
-#undef HAVE_PUTENV
-
-/* Define to 1 if you have the `random' function. */
-#undef HAVE_RANDOM
-
-/* Define to 1 if you have the `realpath' function. */
-#undef HAVE_REALPATH
-
-/* Define to 1 if you have the `rename' function. */
-#undef HAVE_RENAME
-
-/* Define to 1 if you have the `rindex' function. */
-#undef HAVE_RINDEX
-
-/* Define to 1 if you have the `sbrk' function. */
-#undef HAVE_SBRK
-
-/* Define to 1 if you have the `setenv' function. */
-#undef HAVE_SETENV
-
-/* Define to 1 if you have the `setproctitle' function. */
-#undef HAVE_SETPROCTITLE
-
-/* Define to 1 if you have the `setrlimit' function. */
-#undef HAVE_SETRLIMIT
-
-/* Define to 1 if you have the `sigsetmask' function. */
-#undef HAVE_SIGSETMASK
-
-/* Define to 1 if you have the `snprintf' function. */
-#undef HAVE_SNPRINTF
-
-/* Define to 1 if you have the `spawnve' function. */
-#undef HAVE_SPAWNVE
-
-/* Define to 1 if you have the `spawnvpe' function. */
-#undef HAVE_SPAWNVPE
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdio_ext.h> header file. */
-#undef HAVE_STDIO_EXT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the `stpcpy' function. */
-#undef HAVE_STPCPY
-
-/* Define to 1 if you have the `stpncpy' function. */
-#undef HAVE_STPNCPY
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#undef HAVE_STRCASECMP
-
-/* Define to 1 if you have the `strchr' function. */
-#undef HAVE_STRCHR
-
-/* Define to 1 if you have the `strdup' function. */
-#undef HAVE_STRDUP
-
-/* Define to 1 if you have the `strerror' function. */
-#undef HAVE_STRERROR
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the `strncasecmp' function. */
-#undef HAVE_STRNCASECMP
-
-/* Define to 1 if you have the `strndup' function. */
-#undef HAVE_STRNDUP
-
-/* Define to 1 if you have the `strrchr' function. */
-#undef HAVE_STRRCHR
-
-/* Define to 1 if you have the `strsignal' function. */
-#undef HAVE_STRSIGNAL
-
-/* Define to 1 if you have the `strstr' function. */
-#undef HAVE_STRSTR
-
-/* Define to 1 if you have the `strtod' function. */
-#undef HAVE_STRTOD
-
-/* Define to 1 if you have the `strtol' function. */
-#undef HAVE_STRTOL
-
-/* Define to 1 if you have the `strtoul' function. */
-#undef HAVE_STRTOUL
-
-/* Define to 1 if you have the `strverscmp' function. */
-#undef HAVE_STRVERSCMP
-
-/* Define to 1 if you have the `sysconf' function. */
-#undef HAVE_SYSCONF
-
-/* Define to 1 if you have the `sysctl' function. */
-#undef HAVE_SYSCTL
-
-/* Define to 1 if you have the `sysmp' function. */
-#undef HAVE_SYSMP
-
-/* Define if you have the sys_errlist variable. */
-#undef HAVE_SYS_ERRLIST
-
-/* Define to 1 if you have the <sys/file.h> header file. */
-#undef HAVE_SYS_FILE_H
-
-/* Define to 1 if you have the <sys/mman.h> header file. */
-#undef HAVE_SYS_MMAN_H
-
-/* Define if you have the sys_nerr variable. */
-#undef HAVE_SYS_NERR
-
-/* Define to 1 if you have the <sys/param.h> header file. */
-#undef HAVE_SYS_PARAM_H
-
-/* Define to 1 if you have the <sys/prctl.h> header file. */
-#undef HAVE_SYS_PRCTL_H
-
-/* Define to 1 if you have the <sys/pstat.h> header file. */
-#undef HAVE_SYS_PSTAT_H
-
-/* Define to 1 if you have the <sys/resource.h> header file. */
-#undef HAVE_SYS_RESOURCE_H
-
-/* Define if you have the sys_siglist variable. */
-#undef HAVE_SYS_SIGLIST
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/sysctl.h> header file. */
-#undef HAVE_SYS_SYSCTL_H
-
-/* Define to 1 if you have the <sys/sysinfo.h> header file. */
-#undef HAVE_SYS_SYSINFO_H
-
-/* Define to 1 if you have the <sys/sysmp.h> header file. */
-#undef HAVE_SYS_SYSMP_H
-
-/* Define to 1 if you have the <sys/systemcfg.h> header file. */
-#undef HAVE_SYS_SYSTEMCFG_H
-
-/* Define to 1 if you have the <sys/table.h> header file. */
-#undef HAVE_SYS_TABLE_H
-
-/* Define to 1 if you have the <sys/time.h> header file. */
-#undef HAVE_SYS_TIME_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */
-#undef HAVE_SYS_WAIT_H
-
-/* Define to 1 if you have the `table' function. */
-#undef HAVE_TABLE
-
-/* Define to 1 if you have the `times' function. */
-#undef HAVE_TIMES
-
-/* Define to 1 if you have the <time.h> header file. */
-#undef HAVE_TIME_H
-
-/* Define to 1 if you have the `tmpnam' function. */
-#undef HAVE_TMPNAM
-
-/* Define if you have the \`uintptr_t' type. */
-#undef HAVE_UINTPTR_T
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if you have the `vasprintf' function. */
-#undef HAVE_VASPRINTF
-
-/* Define to 1 if you have the `vfork' function. */
-#undef HAVE_VFORK
-
-/* Define to 1 if you have the <vfork.h> header file. */
-#undef HAVE_VFORK_H
-
-/* Define to 1 if you have the `vfprintf' function. */
-#undef HAVE_VFPRINTF
-
-/* Define to 1 if you have the `vprintf' function. */
-#undef HAVE_VPRINTF
-
-/* Define to 1 if you have the `vsprintf' function. */
-#undef HAVE_VSPRINTF
-
-/* Define to 1 if you have the `wait3' function. */
-#undef HAVE_WAIT3
-
-/* Define to 1 if you have the `wait4' function. */
-#undef HAVE_WAIT4
-
-/* Define to 1 if you have the `waitpid' function. */
-#undef HAVE_WAITPID
-
-/* Define to 1 if `fork' works. */
-#undef HAVE_WORKING_FORK
-
-/* Define to 1 if `vfork' works. */
-#undef HAVE_WORKING_VFORK
-
-/* Define to 1 if you have the `_doprnt' function. */
-#undef HAVE__DOPRNT
-
-/* Define if you have the _system_configuration variable. */
-#undef HAVE__SYSTEM_CONFIGURATION
-
-/* Define to 1 if you have the `__fsetlocking' function. */
-#undef HAVE___FSETLOCKING
-
-/* Define if canonicalize_file_name is not declared in system header files. */
-#undef NEED_DECLARATION_CANONICALIZE_FILE_NAME
-
-/* Define if errno must be declared even when <errno.h> is included. */
-#undef NEED_DECLARATION_ERRNO
-
-/* Define to 1 if your C compiler doesn't accept -c and -o together. */
-#undef NO_MINUS_C_MINUS_O
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* The size of `int', as computed by sizeof. */
-#undef SIZEOF_INT
-
-/* Define if you know the direction of stack growth for your system; otherwise
- it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows
- toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown */
-#undef STACK_DIRECTION
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
-#undef TIME_WITH_SYS_TIME
-
-/* Define to an unsigned 64-bit type available in the compiler. */
-#undef UNSIGNED_64BIT_TYPE
-
-/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
- significant byte first (like Motorola and SPARC, unlike Intel). */
-#if defined AC_APPLE_UNIVERSAL_BUILD
-# if defined __BIG_ENDIAN__
-# define WORDS_BIGENDIAN 1
-# endif
-#else
-# ifndef WORDS_BIGENDIAN
-# undef WORDS_BIGENDIAN
-# endif
-#endif
-
-/* Number of bits in a file offset, on hosts where this is settable. */
-#undef _FILE_OFFSET_BITS
-
-/* Define for large files, on AIX-style hosts. */
-#undef _LARGE_FILES
-
-/* Define to empty if `const' does not conform to ANSI C. */
-#undef const
-
-/* Define to `__inline__' or `__inline' if that's what the C compiler
- calls it, or to nothing if 'inline' is not supported under any name. */
-#ifndef __cplusplus
-#undef inline
-#endif
-
-/* Define to the type of a signed integer type wide enough to hold a pointer,
- if such a type exists, and if the system does not define it. */
-#undef intptr_t
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef pid_t
-
-/* Define to `int' if <sys/types.h> does not define. */
-#undef ssize_t
-
-/* Define to the type of an unsigned integer type wide enough to hold a
- pointer, if such a type exists, and if the system does not define it. */
-#undef uintptr_t
-
-/* Define as `fork' if `vfork' does not work. */
-#undef vfork
diff --git a/gcc-4.7/libiberty/config/mh-aix b/gcc-4.7/libiberty/config/mh-aix
deleted file mode 100644
index 6b645058f..000000000
--- a/gcc-4.7/libiberty/config/mh-aix
+++ /dev/null
@@ -1,9 +0,0 @@
-# This file is only needed by AIX 3.1.
-HDEFINES = -D__IEEE_BIG_ENDIAN
-
-# Most releases of AIX 3.1 include an incorrect internal version of copysign
-# in libc.a for use by some libc public functions including modf. The public
-# version of copysign in libm.a is usable. For the sake of libg++ (which
-# uses modf), we add copysign here. Supposedly, this problem is fixed in AIX
-# 3.1.8 and above, including all releases of AIX 3.2.
-EXTRA_OFILES = copysign.o
diff --git a/gcc-4.7/libiberty/config/mh-cxux7 b/gcc-4.7/libiberty/config/mh-cxux7
deleted file mode 100644
index a924b0853..000000000
--- a/gcc-4.7/libiberty/config/mh-cxux7
+++ /dev/null
@@ -1 +0,0 @@
-HDEFINES = -DHARRIS_FLOAT_FORMAT
diff --git a/gcc-4.7/libiberty/config/mh-fbsd21 b/gcc-4.7/libiberty/config/mh-fbsd21
deleted file mode 100644
index 1375a780b..000000000
--- a/gcc-4.7/libiberty/config/mh-fbsd21
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_OFILES=vasprintf.o
diff --git a/gcc-4.7/libiberty/config/mh-openedition b/gcc-4.7/libiberty/config/mh-openedition
deleted file mode 100644
index 8de8ed16c..000000000
--- a/gcc-4.7/libiberty/config/mh-openedition
+++ /dev/null
@@ -1,3 +0,0 @@
-HDEFINES = -D_ALL_SOURCE -DLE370
-CC=c89
-
diff --git a/gcc-4.7/libiberty/config/mh-windows b/gcc-4.7/libiberty/config/mh-windows
deleted file mode 100644
index 3ff5f794e..000000000
--- a/gcc-4.7/libiberty/config/mh-windows
+++ /dev/null
@@ -1 +0,0 @@
-EXTRA_OFILES=asprintf.o strcasecmp.o strncasecmp.o vasprintf.o
diff --git a/gcc-4.7/libiberty/configure b/gcc-4.7/libiberty/configure
deleted file mode 100755
index 6e98352f3..000000000
--- a/gcc-4.7/libiberty/configure
+++ /dev/null
@@ -1,8272 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.64.
-#
-# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
-# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software
-# Foundation, Inc.
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-if test "x$CONFIG_SHELL" = x; then
- as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '\${1+\"\$@\"}'='\"\$@\"'
- setopt NO_GLOB_SUBST
-else
- case \`(set -o) 2>/dev/null\` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-"
- as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
- exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1"
- as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
- as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
- eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
- test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
- if (eval "$as_required") 2>/dev/null; then :
- as_have_required=yes
-else
- as_have_required=no
-fi
- if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- as_found=:
- case $as_dir in #(
- /*)
- for as_base in sh bash ksh sh5; do
- # Try only shells that exist, to save several forks.
- as_shell=$as_dir/$as_base
- if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
- CONFIG_SHELL=$as_shell as_have_required=yes
- if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
- break 2
-fi
-fi
- done;;
- esac
- as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
- { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
- CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
- if test "x$CONFIG_SHELL" != x; then :
- # We cannot yet assume a decent shell, so we have to provide a
- # neutralization value for shells without unset; and this also
- # works around shells that cannot unset nonexistent variables.
- BASH_ENV=/dev/null
- ENV=/dev/null
- (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
- export CONFIG_SHELL
- exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
-fi
-
- if test x$as_have_required = xno; then :
- $as_echo "$0: This script requires a shell more modern than all"
- $as_echo "$0: the shells that I found on your system."
- if test x${ZSH_VERSION+set} = xset ; then
- $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
- $as_echo "$0: be upgraded to zsh 4.3.4 or later."
- else
- $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
- fi
- exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$?; test $as_status -eq 0 && as_status=1
- if test "$3"; then
- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
- fi
- $as_echo "$as_me: error: $1" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
- as_lineno_1=$LINENO as_lineno_1a=$LINENO
- as_lineno_2=$LINENO as_lineno_2a=$LINENO
- eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
- test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
- # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
- sed -n '
- p
- /[$]LINENO/=
- ' <$as_myself |
- sed '
- s/[$]LINENO.*/&-/
- t lineno
- b
- :lineno
- N
- :loop
- s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
- t loop
- s/-\n.*//
- ' >$as_me.lineno &&
- chmod +x "$as_me.lineno" ||
- { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
- # Don't try to exec as it changes $[0], causing all sort of problems
- # (the dirname of $[0] is not the place where we might find the
- # original and so on. Autoconf is especially sensitive to this).
- . "./$as_me.lineno"
- # Exit status is that of the last command.
- exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in #(
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 7<&0 </dev/null 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME=
-PACKAGE_TARNAME=
-PACKAGE_VERSION=
-PACKAGE_STRING=
-PACKAGE_BUGREPORT=
-PACKAGE_URL=
-
-ac_unique_file="xmalloc.c"
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-# include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-# include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-ac_subst_vars='LTLIBOBJS
-INSTALL_DEST
-pexecute
-target_header_dir
-CHECK
-LIBOBJS
-PICFLAG
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-EGREP
-GREP
-OUTPUT_OPTION
-NO_MINUS_C_MINUS_O
-ac_libiberty_warn_cflags
-CPP
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-RANLIB
-AR
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-HAVE_PERL
-PERL
-BUILD_INFO
-MAKEINFO
-NOTMAINT
-MAINT
-libiberty_topdir
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files='host_makefile_frag'
-ac_user_opts='
-enable_option_checking
-with_target_subdir
-with_build_subdir
-with_cross_host
-with_newlib
-enable_maintainer_mode
-enable_multilib
-enable_largefile
-enable_install_libiberty
-'
- ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
- # If the previous option needs an argument, assign it.
- if test -n "$ac_prev"; then
- eval $ac_prev=\$ac_option
- ac_prev=
- continue
- fi
-
- case $ac_option in
- *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
- *) ac_optarg=yes ;;
- esac
-
- # Accept the important Cygnus configure options, so we can diagnose typos.
-
- case $ac_dashdash$ac_option in
- --)
- ac_dashdash=yes ;;
-
- -bindir | --bindir | --bindi | --bind | --bin | --bi)
- ac_prev=bindir ;;
- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
- bindir=$ac_optarg ;;
-
- -build | --build | --buil | --bui | --bu)
- ac_prev=build_alias ;;
- -build=* | --build=* | --buil=* | --bui=* | --bu=*)
- build_alias=$ac_optarg ;;
-
- -cache-file | --cache-file | --cache-fil | --cache-fi \
- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
- ac_prev=cache_file ;;
- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
- cache_file=$ac_optarg ;;
-
- --config-cache | -C)
- cache_file=config.cache ;;
-
- -datadir | --datadir | --datadi | --datad)
- ac_prev=datadir ;;
- -datadir=* | --datadir=* | --datadi=* | --datad=*)
- datadir=$ac_optarg ;;
-
- -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
- | --dataroo | --dataro | --datar)
- ac_prev=datarootdir ;;
- -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
- | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
- datarootdir=$ac_optarg ;;
-
- -disable-* | --disable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=no ;;
-
- -docdir | --docdir | --docdi | --doc | --do)
- ac_prev=docdir ;;
- -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
- docdir=$ac_optarg ;;
-
- -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
- ac_prev=dvidir ;;
- -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
- dvidir=$ac_optarg ;;
-
- -enable-* | --enable-*)
- ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error "invalid feature name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"enable_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval enable_$ac_useropt=\$ac_optarg ;;
-
- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
- | --exec | --exe | --ex)
- ac_prev=exec_prefix ;;
- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
- | --exec=* | --exe=* | --ex=*)
- exec_prefix=$ac_optarg ;;
-
- -gas | --gas | --ga | --g)
- # Obsolete; use --with-gas.
- with_gas=yes ;;
-
- -help | --help | --hel | --he | -h)
- ac_init_help=long ;;
- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
- ac_init_help=recursive ;;
- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
- ac_init_help=short ;;
-
- -host | --host | --hos | --ho)
- ac_prev=host_alias ;;
- -host=* | --host=* | --hos=* | --ho=*)
- host_alias=$ac_optarg ;;
-
- -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
- ac_prev=htmldir ;;
- -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
- | --ht=*)
- htmldir=$ac_optarg ;;
-
- -includedir | --includedir | --includedi | --included | --include \
- | --includ | --inclu | --incl | --inc)
- ac_prev=includedir ;;
- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
- | --includ=* | --inclu=* | --incl=* | --inc=*)
- includedir=$ac_optarg ;;
-
- -infodir | --infodir | --infodi | --infod | --info | --inf)
- ac_prev=infodir ;;
- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
- infodir=$ac_optarg ;;
-
- -libdir | --libdir | --libdi | --libd)
- ac_prev=libdir ;;
- -libdir=* | --libdir=* | --libdi=* | --libd=*)
- libdir=$ac_optarg ;;
-
- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
- | --libexe | --libex | --libe)
- ac_prev=libexecdir ;;
- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
- | --libexe=* | --libex=* | --libe=*)
- libexecdir=$ac_optarg ;;
-
- -localedir | --localedir | --localedi | --localed | --locale)
- ac_prev=localedir ;;
- -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
- localedir=$ac_optarg ;;
-
- -localstatedir | --localstatedir | --localstatedi | --localstated \
- | --localstate | --localstat | --localsta | --localst | --locals)
- ac_prev=localstatedir ;;
- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
- | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
- localstatedir=$ac_optarg ;;
-
- -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
- ac_prev=mandir ;;
- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
- mandir=$ac_optarg ;;
-
- -nfp | --nfp | --nf)
- # Obsolete; use --without-fp.
- with_fp=no ;;
-
- -no-create | --no-create | --no-creat | --no-crea | --no-cre \
- | --no-cr | --no-c | -n)
- no_create=yes ;;
-
- -no-recursion | --no-recursion | --no-recursio | --no-recursi \
- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
- no_recursion=yes ;;
-
- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
- | --oldin | --oldi | --old | --ol | --o)
- ac_prev=oldincludedir ;;
- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
- oldincludedir=$ac_optarg ;;
-
- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
- ac_prev=prefix ;;
- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
- prefix=$ac_optarg ;;
-
- -program-prefix | --program-prefix | --program-prefi | --program-pref \
- | --program-pre | --program-pr | --program-p)
- ac_prev=program_prefix ;;
- -program-prefix=* | --program-prefix=* | --program-prefi=* \
- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
- program_prefix=$ac_optarg ;;
-
- -program-suffix | --program-suffix | --program-suffi | --program-suff \
- | --program-suf | --program-su | --program-s)
- ac_prev=program_suffix ;;
- -program-suffix=* | --program-suffix=* | --program-suffi=* \
- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
- program_suffix=$ac_optarg ;;
-
- -program-transform-name | --program-transform-name \
- | --program-transform-nam | --program-transform-na \
- | --program-transform-n | --program-transform- \
- | --program-transform | --program-transfor \
- | --program-transfo | --program-transf \
- | --program-trans | --program-tran \
- | --progr-tra | --program-tr | --program-t)
- ac_prev=program_transform_name ;;
- -program-transform-name=* | --program-transform-name=* \
- | --program-transform-nam=* | --program-transform-na=* \
- | --program-transform-n=* | --program-transform-=* \
- | --program-transform=* | --program-transfor=* \
- | --program-transfo=* | --program-transf=* \
- | --program-trans=* | --program-tran=* \
- | --progr-tra=* | --program-tr=* | --program-t=*)
- program_transform_name=$ac_optarg ;;
-
- -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
- ac_prev=pdfdir ;;
- -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
- pdfdir=$ac_optarg ;;
-
- -psdir | --psdir | --psdi | --psd | --ps)
- ac_prev=psdir ;;
- -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
- psdir=$ac_optarg ;;
-
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- silent=yes ;;
-
- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
- ac_prev=sbindir ;;
- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
- | --sbi=* | --sb=*)
- sbindir=$ac_optarg ;;
-
- -sharedstatedir | --sharedstatedir | --sharedstatedi \
- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
- | --sharedst | --shareds | --shared | --share | --shar \
- | --sha | --sh)
- ac_prev=sharedstatedir ;;
- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
- | --sha=* | --sh=*)
- sharedstatedir=$ac_optarg ;;
-
- -site | --site | --sit)
- ac_prev=site ;;
- -site=* | --site=* | --sit=*)
- site=$ac_optarg ;;
-
- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
- ac_prev=srcdir ;;
- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
- srcdir=$ac_optarg ;;
-
- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
- | --syscon | --sysco | --sysc | --sys | --sy)
- ac_prev=sysconfdir ;;
- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
- sysconfdir=$ac_optarg ;;
-
- -target | --target | --targe | --targ | --tar | --ta | --t)
- ac_prev=target_alias ;;
- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
- target_alias=$ac_optarg ;;
-
- -v | -verbose | --verbose | --verbos | --verbo | --verb)
- verbose=yes ;;
-
- -version | --version | --versio | --versi | --vers | -V)
- ac_init_version=: ;;
-
- -with-* | --with-*)
- ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=\$ac_optarg ;;
-
- -without-* | --without-*)
- ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
- # Reject names that are not valid shell variable names.
- expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
- as_fn_error "invalid package name: $ac_useropt"
- ac_useropt_orig=$ac_useropt
- ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
- case $ac_user_opts in
- *"
-"with_$ac_useropt"
-"*) ;;
- *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
- ac_unrecognized_sep=', ';;
- esac
- eval with_$ac_useropt=no ;;
-
- --x)
- # Obsolete; use --with-x.
- with_x=yes ;;
-
- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
- | --x-incl | --x-inc | --x-in | --x-i)
- ac_prev=x_includes ;;
- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
- x_includes=$ac_optarg ;;
-
- -x-libraries | --x-libraries | --x-librarie | --x-librari \
- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
- ac_prev=x_libraries ;;
- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
- x_libraries=$ac_optarg ;;
-
- -*) as_fn_error "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information."
- ;;
-
- *=*)
- ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
- # Reject names that are not valid shell variable names.
- case $ac_envvar in #(
- '' | [0-9]* | *[!_$as_cr_alnum]* )
- as_fn_error "invalid variable name: \`$ac_envvar'" ;;
- esac
- eval $ac_envvar=\$ac_optarg
- export $ac_envvar ;;
-
- *)
- # FIXME: should be removed in autoconf 3.0.
- $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
- $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
- ;;
-
- esac
-done
-
-if test -n "$ac_prev"; then
- ac_option=--`echo $ac_prev | sed 's/_/-/g'`
- as_fn_error "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
- case $enable_option_checking in
- no) ;;
- fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
- *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
- esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
- datadir sysconfdir sharedstatedir localstatedir includedir \
- oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
- libdir localedir mandir
-do
- eval ac_val=\$$ac_var
- # Remove trailing slashes.
- case $ac_val in
- */ )
- ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
- eval $ac_var=\$ac_val;;
- esac
- # Be sure to have absolute directory names.
- case $ac_val in
- [\\/$]* | ?:[\\/]* ) continue;;
- NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
- esac
- as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
- if test "x$build_alias" = x; then
- cross_compiling=maybe
- $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
- If a cross compiler is detected then cross compile mode will be used." >&2
- elif test "x$build_alias" != "x$host_alias"; then
- cross_compiling=yes
- fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
- as_fn_error "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
- as_fn_error "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
- ac_srcdir_defaulted=yes
- # Try the directory containing this script, then the parent directory.
- ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_myself" : 'X\(//\)[^/]' \| \
- X"$as_myself" : 'X\(//\)$' \| \
- X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- srcdir=$ac_confdir
- if test ! -r "$srcdir/$ac_unique_file"; then
- srcdir=..
- fi
-else
- ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
- test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
- as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
- cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
- pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
- srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
- eval ac_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_env_${ac_var}_value=\$${ac_var}
- eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
- eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
- # Omit some internal or obsolete options to make the list less imposing.
- # This message is too long to be a string in the A/UX 3.1 sh.
- cat <<_ACEOF
-\`configure' configures this package to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE. See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
- -h, --help display this help and exit
- --help=short display options specific to this package
- --help=recursive display the short help of all the included packages
- -V, --version display version information and exit
- -q, --quiet, --silent do not print \`checking...' messages
- --cache-file=FILE cache test results in FILE [disabled]
- -C, --config-cache alias for \`--cache-file=config.cache'
- -n, --no-create do not create output files
- --srcdir=DIR find the sources in DIR [configure dir or \`..']
-
-Installation directories:
- --prefix=PREFIX install architecture-independent files in PREFIX
- [$ac_default_prefix]
- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
- [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
- --bindir=DIR user executables [EPREFIX/bin]
- --sbindir=DIR system admin executables [EPREFIX/sbin]
- --libexecdir=DIR program executables [EPREFIX/libexec]
- --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
- --localstatedir=DIR modifiable single-machine data [PREFIX/var]
- --libdir=DIR object code libraries [EPREFIX/lib]
- --includedir=DIR C header files [PREFIX/include]
- --oldincludedir=DIR C header files for non-gcc [/usr/include]
- --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
- --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
- --infodir=DIR info documentation [DATAROOTDIR/info]
- --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
- --mandir=DIR man documentation [DATAROOTDIR/man]
- --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE]
- --htmldir=DIR html documentation [DOCDIR]
- --dvidir=DIR dvi documentation [DOCDIR]
- --pdfdir=DIR pdf documentation [DOCDIR]
- --psdir=DIR ps documentation [DOCDIR]
-_ACEOF
-
- cat <<\_ACEOF
-
-System types:
- --build=BUILD configure for building on BUILD [guessed]
- --host=HOST cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-
- cat <<\_ACEOF
-
-Optional Features:
- --disable-option-checking ignore unrecognized --enable/--with options
- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
- --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
- --enable-maintainer-mode
- enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer
- --enable-multilib build many library versions (default)
- --disable-largefile omit support for large files
- --enable-install-libiberty Install headers for end users
-
-Optional Packages:
- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
- --with-target-subdir=SUBDIR Configuring in a subdirectory for target
- --with-build-subdir=SUBDIR Configuring in a subdirectory for build
- --with-cross-host=HOST Configuring with a cross compiler
- --with-newlib Configuring with newlib
-
-Some influential environment variables:
- CC C compiler command
- CFLAGS C compiler flags
- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
- nonstandard directory <lib dir>
- LIBS libraries to pass to the linker, e.g. -l<library>
- CPPFLAGS C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
- you have headers in a nonstandard directory <include dir>
- CPP C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
- # If there are subdirs, report their specific --help.
- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
- test -d "$ac_dir" ||
- { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
- continue
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
- cd "$ac_dir" || { ac_status=$?; continue; }
- # Check for guested configure.
- if test -f "$ac_srcdir/configure.gnu"; then
- echo &&
- $SHELL "$ac_srcdir/configure.gnu" --help=recursive
- elif test -f "$ac_srcdir/configure"; then
- echo &&
- $SHELL "$ac_srcdir/configure" --help=recursive
- else
- $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
- fi || ac_status=$?
- cd "$ac_pwd" || { ac_status=$?; break; }
- done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
- cat <<\_ACEOF
-configure
-generated by GNU Autoconf 2.64
-
-Copyright (C) 2009 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
- exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext
- if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest.$ac_objext; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
- return $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } >/dev/null && {
- test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
- test ! -s conftest.err
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
- return $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then :
- ac_retval=0
-else
- $as_echo "$as_me: program exited with status $ac_status" >&5
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=$ac_status
-fi
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
- return $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_preproc LINENO HEADER VAR
-# ----------------------------------------------
-# Tests whether HEADER is present, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_preproc ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f conftest.err conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_header_preproc
-
-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
-# --------------------------------------------
-# Tries to find the compile-time value of EXPR in a program that includes
-# INCLUDES, setting VAR accordingly. Returns whether the value could be
-# computed
-ac_fn_c_compute_int ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- if test "$cross_compiling" = yes; then
- # Depending upon the size, compute the lo and hi bounds.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_lo=0 ac_mid=0
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=$ac_mid; break
-else
- as_fn_arith $ac_mid + 1 && ac_lo=$as_val
- if test $ac_lo -le $ac_mid; then
- ac_lo= ac_hi=
- break
- fi
- as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=-1 ac_mid=-1
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_lo=$ac_mid; break
-else
- as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
- if test $ac_mid -le $ac_hi; then
- ac_lo= ac_hi=
- break
- fi
- as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- done
-else
- ac_lo= ac_hi=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
- as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_hi=$ac_mid
-else
- as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in #((
-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
-'') ac_retval=1 ;;
-esac
- else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
- FILE *f = fopen ("conftest.val", "w");
- if (! f)
- return 1;
- if (($2) < 0)
- {
- long int i = longval ();
- if (i != ($2))
- return 1;
- fprintf (f, "%ld", i);
- }
- else
- {
- unsigned long int i = ulongval ();
- if (i != ($2))
- return 1;
- fprintf (f, "%lu", i);
- }
- /* Do not output a trailing newline, as this causes \r\n confusion
- on some platforms. */
- return ferror (f) || fclose (f) != 0;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
- ac_retval=1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-rm -f conftest.val
-
- fi
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
- return $ac_retval
-
-} # ac_fn_c_compute_int
-
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- eval "$3=no"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof ($2))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
- return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_type
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- rm -f conftest.$ac_objext conftest$ac_exeext
- if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- grep -v '^ *+' conftest.err >conftest.er1
- cat conftest.er1 >&5
- mv -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } && {
- test -z "$ac_c_werror_flag" ||
- test ! -s conftest.err
- } && test -s conftest$ac_exeext && {
- test "$cross_compiling" = yes ||
- $as_test_x conftest$ac_exeext
- }; then :
- ac_retval=0
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
- ac_retval=1
-fi
- # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
- # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
- # interfere with the next link command; also delete a directory that is
- # left behind by Apple's compiler. We do this before executing the actions.
- rm -rf conftest.dSYM conftest_ipa8_conftest.oo
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
- return $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- if test x$gcc_no_link = xyes; then
- as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
-fi
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
- For example, HP-UX 11i <limits.h> declares gettimeofday. */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
- which can conflict with char $2 (); below.
- Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- <limits.h> exists even on freestanding compilers. */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* 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_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_func
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR
-# ------------------------------------
-# Tests whether SYMBOL is declared, setting cache variable VAR accordingly.
-ac_fn_c_check_decl ()
-{
- as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- as_decl_name=`echo $2|sed 's/ *(.*//'`
- as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
- (void) $as_decl_use;
-#else
- (void) $as_decl_name;
-#endif
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$3=yes"
-else
- eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
-
-} # ac_fn_c_check_decl
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by $as_me, which was
-generated by GNU Autoconf 2.64. Invocation command line was
-
- $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
-
-/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
-/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
-/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
-/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
-/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- $as_echo "PATH: $as_dir"
- done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
- for ac_arg
- do
- case $ac_arg in
- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil)
- continue ;;
- *\'*)
- ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- case $ac_pass in
- 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
- 2)
- as_fn_append ac_configure_args1 " '$ac_arg'"
- if test $ac_must_keep_next = true; then
- ac_must_keep_next=false # Got value, back to normal.
- else
- case $ac_arg in
- *=* | --config-cache | -C | -disable-* | --disable-* \
- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
- | -with-* | --with-* | -without-* | --without-* | --x)
- case "$ac_configure_args0 " in
- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
- esac
- ;;
- -* ) ac_must_keep_next=true ;;
- esac
- fi
- as_fn_append ac_configure_args " '$ac_arg'"
- ;;
- esac
- done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log. We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
- # Save into config.log some information that might help in debugging.
- {
- echo
-
- cat <<\_ASBOX
-## ---------------- ##
-## Cache variables. ##
-## ---------------- ##
-_ASBOX
- echo
- # The following way of writing the cache mishandles newlines in values,
-(
- for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
- (set) 2>&1 |
- case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- sed -n \
- "s/'\''/'\''\\\\'\'''\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
- ;; #(
- *)
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-)
- echo
-
- cat <<\_ASBOX
-## ----------------- ##
-## Output variables. ##
-## ----------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_vars
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
-
- if test -n "$ac_subst_files"; then
- cat <<\_ASBOX
-## ------------------- ##
-## File substitutions. ##
-## ------------------- ##
-_ASBOX
- echo
- for ac_var in $ac_subst_files
- do
- eval ac_val=\$$ac_var
- case $ac_val in
- *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
- esac
- $as_echo "$ac_var='\''$ac_val'\''"
- done | sort
- echo
- fi
-
- if test -s confdefs.h; then
- cat <<\_ASBOX
-## ----------- ##
-## confdefs.h. ##
-## ----------- ##
-_ASBOX
- echo
- cat confdefs.h
- echo
- fi
- test "$ac_signal" != 0 &&
- $as_echo "$as_me: caught signal $ac_signal"
- $as_echo "$as_me: exit $exit_status"
- } >&5
- rm -f core *.core core.conftest.* &&
- rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
- exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
- trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
- ac_site_file1=$CONFIG_SITE
-elif test "x$prefix" != xNONE; then
- ac_site_file1=$prefix/share/config.site
- ac_site_file2=$prefix/etc/config.site
-else
- ac_site_file1=$ac_default_prefix/share/config.site
- ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
- test "x$ac_site_file" = xNONE && continue
- if test -r "$ac_site_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
- sed 's/^/| /' "$ac_site_file" >&5
- . "$ac_site_file"
- fi
-done
-
-if test -r "$cache_file"; then
- # Some versions of bash will fail to source /dev/null (special
- # files actually), so we avoid doing that.
- if test -f "$cache_file"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
- case $cache_file in
- [\\/]* | ?:[\\/]* ) . "$cache_file";;
- *) . "./$cache_file";;
- esac
- fi
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
- >$cache_file
-fi
-
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
- eval ac_old_set=\$ac_cv_env_${ac_var}_set
- eval ac_new_set=\$ac_env_${ac_var}_set
- eval ac_old_val=\$ac_cv_env_${ac_var}_value
- eval ac_new_val=\$ac_env_${ac_var}_value
- case $ac_old_set,$ac_new_set in
- set,)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,set)
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
- ac_cache_corrupted=: ;;
- ,);;
- *)
- if test "x$ac_old_val" != "x$ac_new_val"; then
- # differences in whitespace do not lead to failure.
- ac_old_val_w=`echo x $ac_old_val`
- ac_new_val_w=`echo x $ac_new_val`
- if test "$ac_old_val_w" != "$ac_new_val_w"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
- ac_cache_corrupted=:
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
- eval $ac_var=\$ac_old_val
- fi
- { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
-$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
-$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
- fi;;
- esac
- # Pass precious variables to config.status.
- if test "$ac_new_set" = set; then
- case $ac_new_val in
- *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
- *) ac_arg=$ac_var=$ac_new_val ;;
- esac
- case " $ac_configure_args " in
- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
- *) as_fn_append ac_configure_args " '$ac_arg'" ;;
- esac
- fi
-done
-if $ac_cache_corrupted; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
- { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
- as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-
-
-
-
-
-# This works around the fact that libtool configuration may change LD
-# for this particular configuration, but some shells, instead of
-# keeping the changes in LD private, export them just because LD is
-# exported. We don't use libtool yet, but some day we might, so...
-ORIGINAL_LD_FOR_MULTILIBS=$LD
-
-
-# Check whether --with-target-subdir was given.
-if test "${with_target_subdir+set}" = set; then :
- withval=$with_target_subdir;
-fi
-
-
-# Check whether --with-build-subdir was given.
-if test "${with_build_subdir+set}" = set; then :
- withval=$with_build_subdir;
-fi
-
-
-# Check whether --with-cross-host was given.
-if test "${with_cross_host+set}" = set; then :
- withval=$with_cross_host;
-fi
-
-
-# Check whether --with-newlib was given.
-if test "${with_newlib+set}" = set; then :
- withval=$with_newlib;
-fi
-
-
-if test "${srcdir}" = "."; then
- if test -n "${with_build_subdir}"; then
- libiberty_topdir="${srcdir}/../.."
- with_target_subdir=
- elif test -z "${with_target_subdir}"; then
- libiberty_topdir="${srcdir}/.."
- else
- if test "${with_target_subdir}" != "."; then
- libiberty_topdir="${srcdir}/${with_multisrctop}../.."
- else
- libiberty_topdir="${srcdir}/${with_multisrctop}.."
- fi
- fi
-else
- libiberty_topdir="${srcdir}/.."
-fi
-
-ac_aux_dir=
-for ac_dir in $libiberty_topdir "$srcdir"/$libiberty_topdir; do
- for ac_t in install-sh install.sh shtool; do
- if test -f "$ac_dir/$ac_t"; then
- ac_aux_dir=$ac_dir
- ac_install_sh="$ac_aux_dir/$ac_t -c"
- break 2
- fi
- done
-done
-if test -z "$ac_aux_dir"; then
- as_fn_error "cannot find install-sh, install.sh, or shtool in $libiberty_topdir \"$srcdir\"/$libiberty_topdir" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to enable maintainer-specific portions of Makefiles" >&5
-$as_echo_n "checking whether to enable maintainer-specific portions of Makefiles... " >&6; }
- # Check whether --enable-maintainer-mode was given.
-if test "${enable_maintainer_mode+set}" = set; then :
- enableval=$enable_maintainer_mode; maintainer_mode=$enableval
-else
- maintainer_mode=no
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $maintainer_mode" >&5
-$as_echo "$maintainer_mode" >&6; }
-
-if test "$maintainer_mode" = "yes"; then
- MAINT=''
- NOTMAINT='#'
-else
- MAINT='#'
- NOTMAINT=''
-fi
-
-# Do we have a single-tree copy of texinfo? Even if we do, we can't
-# rely on it - libiberty is built before texinfo.
-# Extract the first word of "makeinfo", so it can be a program name with args.
-set dummy makeinfo; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_MAKEINFO+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$MAKEINFO"; then
- ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_MAKEINFO="makeinfo"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-MAKEINFO=$ac_cv_prog_MAKEINFO
-if test -n "$MAKEINFO"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5
-$as_echo "$MAKEINFO" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test "x$MAKEINFO" = "x"; then
- MAKEINFO="@echo makeinfo missing; true"
- BUILD_INFO=
-else
- BUILD_INFO=info
- case "$MAKEINFO" in
- */missing\ makeinfo*)
- BUILD_INFO=
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
-*** Makeinfo is missing. Info documentation will not be built." >&5
-$as_echo "$as_me: WARNING:
-*** Makeinfo is missing. Info documentation will not be built." >&2;}
- ;;
- *)
- case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in
- x*\ [1-3].* )
- MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true"
- BUILD_INFO=
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
-*** Makeinfo is too old. Info documentation will not be built." >&5
-$as_echo "$as_me: WARNING:
-*** Makeinfo is too old. Info documentation will not be built." >&2;}
- ;;
- esac
- ;;
- esac
-fi
-
-
-
-# Extract the first word of "perl", so it can be a program name with args.
-set dummy perl; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_PERL+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$PERL"; then
- ac_cv_prog_PERL="$PERL" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_PERL="perl"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-PERL=$ac_cv_prog_PERL
-if test -n "$PERL"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-if test x"$PERL" = x""; then
- HAVE_PERL='#'
-else
- HAVE_PERL=''
-fi
-
-
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
- as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if test "${ac_cv_build+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
- ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
- as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
- as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if test "${ac_cv_host+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test "x$host_alias" = x; then
- ac_cv_host=$ac_cv_build
-else
- ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
- as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_AR+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$AR"; then
- ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_AR="${ac_tool_prefix}ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
- ac_ct_AR=$AR
- # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_AR"; then
- ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_AR="ar"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_AR" = x; then
- AR=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- AR=$ac_ct_AR
- fi
-else
- AR="$ac_cv_prog_AR"
-fi
-
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_RANLIB+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$RANLIB"; then
- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
- ac_ct_RANLIB=$RANLIB
- # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_RANLIB"; then
- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_RANLIB="ranlib"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_RANLIB" = x; then
- RANLIB=":"
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- RANLIB=$ac_ct_RANLIB
- fi
-else
- RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-
-# Add --enable-multilib to configure.
-# Default to --enable-multilib
-# Check whether --enable-multilib was given.
-if test "${enable_multilib+set}" = set; then :
- enableval=$enable_multilib; case "$enableval" in
- yes) multilib=yes ;;
- no) multilib=no ;;
- *) as_fn_error "bad value $enableval for multilib option" "$LINENO" 5 ;;
- esac
-else
- multilib=yes
-fi
-
-
-# Even if the default multilib is not a cross compilation,
-# it may be that some of the other multilibs are.
-if test $cross_compiling = no && test $multilib = yes \
- && test "x${with_multisubdir}" != x ; then
- cross_compiling=maybe
-fi
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
- ac_ct_CC=$CC
- # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="gcc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-else
- CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="${ac_tool_prefix}cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- fi
-fi
-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
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
- ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
- ac_prog_rejected=yes
- continue
- fi
- ac_cv_prog_CC="cc"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
- # We found a bogon in the path, so make sure we never use it.
- set dummy $ac_cv_prog_CC
- shift
- if test $# != 0; then
- # We chose a different compiler from the bogus one.
- # However, it has the same basename, so the bogon will be chosen
- # first if we set CC to just the basename; use the full file name.
- shift
- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
- fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
- if test -n "$ac_tool_prefix"; then
- for ac_prog in cl.exe
- do
- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$CC"; then
- ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$CC" && break
- done
-fi
-if test -z "$CC"; then
- ac_ct_CC=$CC
- for ac_prog in cl.exe
-do
- # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -n "$ac_ct_CC"; then
- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
- ac_cv_prog_ac_ct_CC="$ac_prog"
- $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
- break 2
- fi
-done
- done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
- test -n "$ac_ct_CC" && break
-done
-
- if test "x$ac_ct_CC" = x; then
- CC=""
- else
- case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
- CC=$ac_ct_CC
- fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "no acceptable C compiler found in \$PATH
-See \`config.log' for more details." "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
- { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compiler $ac_option >&5") 2>conftest.err
- ac_status=$?
- if test -s conftest.err; then
- sed '10a\
-... rest of stderr output deleted ...
- 10q' conftest.err >conftest.er1
- cat conftest.er1 >&5
- rm -f conftest.er1 conftest.err
- fi
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-# FIXME: Cleanup?
-if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
- (eval $ac_link) 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- gcc_no_link=no
-else
- gcc_no_link=yes
-fi
-if test x$gcc_no_link = xyes; then
- # Setting cross_compile will disable run tests; it will
- # also disable AC_CHECK_FILE but that's generally
- # correct if we can't link.
- cross_compiling=yes
- EXEEXT=
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out conftest.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- * ) ac_rmfiles="$ac_rmfiles $ac_file";;
- esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link_default") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile. We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
- ;;
- [ab].out )
- # We found the default executable, but exeext='' is most
- # certainly right.
- break;;
- *.* )
- if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
- then :; else
- ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- fi
- # We set ac_cv_exeext here because the later test for it is not
- # safe: cross compilers may not add the suffix if given an `-o'
- # argument, so we may need to know it at that point already.
- # Even if this section looks crufty: it has the advantage of
- # actually working.
- break;;
- * )
- break;;
- esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
- ac_file=''
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-if test -z "$ac_file"; then :
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "C compiler cannot create executables
-See \`config.log' for more details." "$LINENO" 5; }; }
-fi
-ac_exeext=$ac_cv_exeext
-
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-# If not cross compiling, check that we can run a simple program.
-if test "$cross_compiling" != yes; then
- if { ac_try='./$ac_file'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- cross_compiling=no
- else
- if test "$cross_compiling" = maybe; then
- cross_compiling=yes
- else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details." "$LINENO" 5; }
- fi
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out conftest.out
-ac_clean_files=$ac_clean_files_save
-# Check that the compiler produces executables we can run. If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_link") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
- test -f "$ac_file" || continue
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
- break;;
- * ) break;;
- esac
-done
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details." "$LINENO" 5; }
-fi
-rm -f conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if test "${ac_cv_objext+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_compile") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; then :
- for ac_file in conftest.o conftest.obj conftest.*; do
- test -f "$ac_file" || continue;
- case $ac_file in
- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
- *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
- break;;
- esac
-done
-else
- $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details." "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if test "${ac_cv_c_compiler_gnu+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-#ifndef __GNUC__
- choke me
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_compiler_gnu=yes
-else
- ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
- GCC=yes
-else
- GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if test "${ac_cv_prog_cc_g+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_save_c_werror_flag=$ac_c_werror_flag
- ac_c_werror_flag=yes
- ac_cv_prog_cc_g=no
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-else
- CFLAGS=""
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
- ac_c_werror_flag=$ac_save_c_werror_flag
- CFLAGS="-g"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
- CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
- if test "$GCC" = yes; then
- CFLAGS="-g -O2"
- else
- CFLAGS="-g"
- fi
-else
- if test "$GCC" = yes; then
- CFLAGS="-O2"
- else
- CFLAGS=
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if test "${ac_cv_prog_cc_c89+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdarg.h>
-#include <stdio.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
- char **p;
- int i;
-{
- return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
- char *s;
- va_list v;
- va_start (v,p);
- s = g (p, va_arg (v,int));
- va_end (v);
- return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
- function prototypes and stuff, but not '\xHH' hex character constants.
- These don't provoke an error unfortunately, instead are silently treated
- as 'x'. The following induces an error, until -std is added to get
- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
- array size at least. It's necessary to write '\x00'==0 to get something
- that's true only with -std. */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
- inside strings and character constants. */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
- ;
- return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
- -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
- CC="$ac_save_CC $ac_arg"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
- test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
- x)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
- xno)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
- *)
- CC="$CC $ac_cv_prog_cc_c89"
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# Check whether --enable-largefile was given.
-if test "${enable_largefile+set}" = set; then :
- enableval=$enable_largefile;
-fi
-
-if test "$enable_largefile" != no; then
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5
-$as_echo_n "checking for special C compiler options needed for large files... " >&6; }
-if test "${ac_cv_sys_largefile_CC+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_sys_largefile_CC=no
- if test "$GCC" != yes; then
- ac_save_CC=$CC
- while :; do
- # IRIX 6.2 and later do not support large files by default,
- # so use the C compiler's -n32 option if that helps.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
- if ac_fn_c_try_compile "$LINENO"; then :
- break
-fi
-rm -f core conftest.err conftest.$ac_objext
- CC="$CC -n32"
- if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sys_largefile_CC=' -n32'; break
-fi
-rm -f core conftest.err conftest.$ac_objext
- break
- done
- CC=$ac_save_CC
- rm -f conftest.$ac_ext
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5
-$as_echo "$ac_cv_sys_largefile_CC" >&6; }
- if test "$ac_cv_sys_largefile_CC" != no; then
- CC=$CC$ac_cv_sys_largefile_CC
- fi
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5
-$as_echo_n "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; }
-if test "${ac_cv_sys_file_offset_bits+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sys_file_offset_bits=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#define _FILE_OFFSET_BITS 64
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sys_file_offset_bits=64; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cv_sys_file_offset_bits=unknown
- break
-done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5
-$as_echo "$ac_cv_sys_file_offset_bits" >&6; }
-case $ac_cv_sys_file_offset_bits in #(
- no | unknown) ;;
- *)
-cat >>confdefs.h <<_ACEOF
-#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits
-_ACEOF
-;;
-esac
-rm -rf conftest*
- if test $ac_cv_sys_file_offset_bits = unknown; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5
-$as_echo_n "checking for _LARGE_FILES value needed for large files... " >&6; }
-if test "${ac_cv_sys_large_files+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- while :; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sys_large_files=no; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#define _LARGE_FILES 1
-#include <sys/types.h>
- /* Check that off_t can represent 2**63 - 1 correctly.
- We can't simply define LARGE_OFF_T to be 9223372036854775807,
- since some C++ compilers masquerading as C compilers
- incorrectly reject 9223372036854775807. */
-#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62))
- int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721
- && LARGE_OFF_T % 2147483647 == 1)
- ? 1 : -1];
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_sys_large_files=1; break
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- ac_cv_sys_large_files=unknown
- break
-done
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5
-$as_echo "$ac_cv_sys_large_files" >&6; }
-case $ac_cv_sys_large_files in #(
- no | unknown) ;;
- *)
-cat >>confdefs.h <<_ACEOF
-#define _LARGE_FILES $ac_cv_sys_large_files
-_ACEOF
-;;
-esac
-rm -rf conftest*
- fi
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
- CPP=
-fi
-if test -z "$CPP"; then
- if test "${ac_cv_prog_CPP+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- # Double quotes because CPP needs to be expanded
- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
- do
- ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
- break
-fi
-
- done
- ac_cv_prog_CPP=$CPP
-
-fi
- CPP=$ac_cv_prog_CPP
-else
- ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
- # Use a header file that comes with gcc, so configuring glibc
- # with a fresh cross-compiler works.
- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
- # <limits.h> exists even on freestanding compilers.
- # On the NeXT, cc -E runs the code through the compiler's parser,
- # not just through cpp. "Syntax error" is here to catch this case.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
- Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
- # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.$ac_ext
-
- # OK, works on sane cases. Now check whether nonexistent headers
- # can be detected and how.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
- # Broken: success on invalid input.
-continue
-else
- # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details." "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-ac_c_preproc_warn_flag=yes
-
-ac_libiberty_warn_cflags=
-save_CFLAGS="$CFLAGS"
-for real_option in -W -Wall -Wwrite-strings -Wc++-compat \
- -Wstrict-prototypes; do
- # Do the check with the no- prefix removed since gcc silently
- # accepts any -Wno-* option on purpose
- case $real_option in
- -Wno-*) option=-W`expr x$real_option : 'x-Wno-\(.*\)'` ;;
- *) option=$real_option ;;
- esac
- as_acx_Woption=`$as_echo "acx_cv_prog_cc_warning_$option" | $as_tr_sh`
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports $option" >&5
-$as_echo_n "checking whether $CC supports $option... " >&6; }
-if { as_var=$as_acx_Woption; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- CFLAGS="$option"
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- eval "$as_acx_Woption=yes"
-else
- eval "$as_acx_Woption=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-eval ac_res=\$$as_acx_Woption
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
- if test `eval 'as_val=${'$as_acx_Woption'};$as_echo "$as_val"'` = yes; then :
- ac_libiberty_warn_cflags="$ac_libiberty_warn_cflags${ac_libiberty_warn_cflags:+ }$real_option"
-fi
- done
-CFLAGS="$save_CFLAGS"
-
-# Do the check with the no- prefix removed from the warning options
-# since gcc silently accepts any -Wno-* option on purpose
-if test "$GCC" = yes; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC supports -pedantic " >&5
-$as_echo_n "checking whether $CC supports -pedantic ... " >&6; }
-if test "${acx_cv_prog_cc_pedantic_+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- save_CFLAGS="$CFLAGS"
-CFLAGS="-pedantic "
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- acx_cv_prog_cc_pedantic_=yes
-else
- acx_cv_prog_cc_pedantic_=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-CFLAGS="$save_CFLAGS"
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $acx_cv_prog_cc_pedantic_" >&5
-$as_echo "$acx_cv_prog_cc_pedantic_" >&6; }
-if test $acx_cv_prog_cc_pedantic_ = yes; then :
- ac_libiberty_warn_cflags="$ac_libiberty_warn_cflags${ac_libiberty_warn_cflags:+ }-pedantic "
-fi
-
-fi
-
-
-if test "x$CC" != xcc; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC and cc understand -c and -o together" >&5
-$as_echo_n "checking whether $CC and cc understand -c and -o together... " >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether cc understands -c and -o together" >&5
-$as_echo_n "checking whether cc understands -c and -o together... " >&6; }
-fi
-set dummy $CC; ac_cc=`$as_echo "$2" |
- sed 's/[^a-zA-Z0-9_]/_/g;s/^[0-9]/_/'`
-if { as_var=ac_cv_prog_cc_${ac_cc}_c_o; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-# Make sure it works both with $CC and with simple cc.
-# 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 -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
-rm -f conftest2.*
-if { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } &&
- test -f conftest2.$ac_objext && { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; };
-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.$ac_ext >&5'
- { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; }; }; then
- ac_try='cc -c conftest.$ac_ext -o conftest2.$ac_objext >&5'
- rm -f conftest2.*
- if { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; } &&
- test -f conftest2.$ac_objext && { { case "(($ac_try" in
- *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
- *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
- (eval "$ac_try") 2>&5
- ac_status=$?
- $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
- test $ac_status = 0; };
- then
- # cc works too.
- :
- else
- # cc exists but doesn't like -o.
- eval ac_cv_prog_cc_${ac_cc}_c_o=no
- fi
- fi
- fi
-else
- eval ac_cv_prog_cc_${ac_cc}_c_o=no
-fi
-rm -f core conftest*
-
-fi
-if eval test \$ac_cv_prog_cc_${ac_cc}_c_o = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-
-$as_echo "#define NO_MINUS_C_MINUS_O 1" >>confdefs.h
-
-fi
-
-# autoconf is lame and doesn't give us any substitution variable for this.
-if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
- NO_MINUS_C_MINUS_O=yes
-else
- OUTPUT_OPTION='-o $@'
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5
-$as_echo_n "checking for an ANSI C-conforming const... " >&6; }
-if test "${ac_cv_c_const+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-int
-main ()
-{
-/* FIXME: Include the comments suggested by Paul. */
-#ifndef __cplusplus
- /* Ultrix mips cc rejects this. */
- typedef int charset[2];
- const charset cs;
- /* SunOS 4.1.1 cc rejects this. */
- char const *const *pcpcc;
- char **ppc;
- /* NEC SVR4.0.2 mips cc rejects this. */
- struct point {int x, y;};
- static struct point const zero = {0,0};
- /* AIX XL C 1.02.0.0 rejects this.
- It does not let you subtract one const X* pointer from another in
- an arm of an if-expression whose if-part is not a constant
- expression */
- const char *g = "string";
- pcpcc = &g + (g ? g-g : 0);
- /* HPUX 7.0 cc rejects these. */
- ++pcpcc;
- ppc = (char**) pcpcc;
- pcpcc = (char const *const *) ppc;
- { /* SCO 3.2v4 cc rejects this. */
- char *t;
- char const *s = 0 ? (char *) 0 : (char const *) 0;
-
- *t++ = 0;
- if (s) return 0;
- }
- { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */
- int x[] = {25, 17};
- const int *foo = &x[0];
- ++foo;
- }
- { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
- typedef const int *iptr;
- iptr p = 0;
- ++p;
- }
- { /* AIX XL C 1.02.0.0 rejects this saying
- "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
- struct s { int j; const int *ap[3]; };
- struct s *b; b->j = 5;
- }
- { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
- const int foo = 10;
- if (!foo) return 0;
- }
- return !cs[0] && !zero.x;
-#endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_const=yes
-else
- ac_cv_c_const=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5
-$as_echo "$ac_cv_c_const" >&6; }
-if test $ac_cv_c_const = no; then
-
-$as_echo "#define const /**/" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
-$as_echo_n "checking for inline... " >&6; }
-if test "${ac_cv_c_inline+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_inline=no
-for ac_kw in inline __inline__ __inline; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __cplusplus
-typedef int foo_t;
-static $ac_kw foo_t static_foo () {return 0; }
-$ac_kw foo_t foo () {return 0; }
-#endif
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_inline=$ac_kw
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test "$ac_cv_c_inline" != no && break
-done
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
-$as_echo "$ac_cv_c_inline" >&6; }
-
-case $ac_cv_c_inline in
- inline | yes) ;;
- *)
- case $ac_cv_c_inline in
- no) ac_val=;;
- *) ac_val=$ac_cv_c_inline;;
- esac
- cat >>confdefs.h <<_ACEOF
-#ifndef __cplusplus
-#define inline $ac_val
-#endif
-_ACEOF
- ;;
-esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if test "${ac_cv_path_GREP+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test -z "$GREP"; then
- ac_path_GREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in grep ggrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
-# Check for GNU ac_path_GREP and select it if it is found.
- # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'GREP' >> "conftest.nl"
- "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_GREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_GREP="$ac_path_GREP"
- ac_path_GREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_GREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_GREP"; then
- as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if test "${ac_cv_path_EGREP+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
- then ac_cv_path_EGREP="$GREP -E"
- else
- if test -z "$EGREP"; then
- ac_path_EGREP_found=false
- # Loop through the user's path and test for each of PROGNAME-LIST
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- for ac_prog in egrep; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
- { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
- # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
- ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
- ac_count=0
- $as_echo_n 0123456789 >"conftest.in"
- while :
- do
- cat "conftest.in" "conftest.in" >"conftest.tmp"
- mv "conftest.tmp" "conftest.in"
- cp "conftest.in" "conftest.nl"
- $as_echo 'EGREP' >> "conftest.nl"
- "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
- diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
- as_fn_arith $ac_count + 1 && ac_count=$as_val
- if test $ac_count -gt ${ac_path_EGREP_max-0}; then
- # Best one so far, save it but keep looking for a better one
- ac_cv_path_EGREP="$ac_path_EGREP"
- ac_path_EGREP_max=$ac_count
- fi
- # 10*(2^10) chars as input seems more than enough
- test $ac_count -gt 10 && break
- done
- rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
- $ac_path_EGREP_found && break 3
- done
- done
- done
-IFS=$as_save_IFS
- if test -z "$ac_cv_path_EGREP"; then
- as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
- fi
-else
- ac_cv_path_EGREP=$EGREP
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if test "${ac_cv_header_stdc+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_stdc=yes
-else
- ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
- # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "free" >/dev/null 2>&1; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
- if test "$cross_compiling" = yes; then :
- :
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
- (('a' <= (c) && (c) <= 'i') \
- || ('j' <= (c) && (c) <= 'r') \
- || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
- int i;
- for (i = 0; i < 256; i++)
- if (XOR (islower (i), ISLOWER (i))
- || toupper (i) != TOUPPER (i))
- return 2;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
- ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
- inttypes.h stdint.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_preproc "$LINENO" "$ac_header" "$as_ac_Header"
-eval as_val=\$$as_ac_Header
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
-$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
-if test "${ac_cv_c_bigendian+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_cv_c_bigendian=unknown
- # See if we're dealing with a universal compiler.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifndef __APPLE_CC__
- not a universal capable compiler
- #endif
- typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
- # Check for potential -arch flags. It is not universal unless
- # there are at least two -arch flags with different values.
- ac_arch=
- ac_prev=
- for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
- if test -n "$ac_prev"; then
- case $ac_word in
- i?86 | x86_64 | ppc | ppc64)
- if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
- ac_arch=$ac_word
- else
- ac_cv_c_bigendian=universal
- break
- fi
- ;;
- esac
- ac_prev=
- elif test "x$ac_word" = "x-arch"; then
- ac_prev=arch
- fi
- done
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- if test $ac_cv_c_bigendian = unknown; then
- # See if sys/param.h defines the BYTE_ORDER macro.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-
-int
-main ()
-{
-#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
- && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
- && LITTLE_ENDIAN)
- bogus endian macros
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
- #include <sys/param.h>
-
-int
-main ()
-{
-#if BYTE_ORDER != BIG_ENDIAN
- not big endian
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
-else
- ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
-
-int
-main ()
-{
-#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
- bogus endian macros
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- # It does; now see whether it defined to _BIG_ENDIAN or not.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <limits.h>
-
-int
-main ()
-{
-#ifndef _BIG_ENDIAN
- not big endian
- #endif
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_c_bigendian=yes
-else
- ac_cv_c_bigendian=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- fi
- if test $ac_cv_c_bigendian = unknown; then
- # Compile a test program.
- if test "$cross_compiling" = yes; then :
- # Try to guess by grepping values from an object file.
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-short int ascii_mm[] =
- { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
- short int ascii_ii[] =
- { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
- int use_ascii (int i) {
- return ascii_mm[i] + ascii_ii[i];
- }
- short int ebcdic_ii[] =
- { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
- short int ebcdic_mm[] =
- { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
- int use_ebcdic (int i) {
- return ebcdic_mm[i] + ebcdic_ii[i];
- }
- extern int foo;
-
-int
-main ()
-{
-return use_ascii (foo) == use_ebcdic (foo);
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
- ac_cv_c_bigendian=yes
- fi
- if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
- if test "$ac_cv_c_bigendian" = unknown; then
- ac_cv_c_bigendian=no
- else
- # finding both strings is unlikely to happen, but who knows?
- ac_cv_c_bigendian=unknown
- fi
- fi
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-
- /* Are we little or big endian? From Harbison&Steele. */
- union
- {
- long int l;
- char c[sizeof (long int)];
- } u;
- u.l = 1;
- return u.c[sizeof (long int) - 1] == 1;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_c_bigendian=no
-else
- ac_cv_c_bigendian=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
-$as_echo "$ac_cv_c_bigendian" >&6; }
- case $ac_cv_c_bigendian in #(
- yes)
- $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
-;; #(
- no)
- ;; #(
- universal)
-
-$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
-
- ;; #(
- *)
- as_fn_error "unknown endianness
- presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
- esac
-
-
-
-
-ac_config_headers="$ac_config_headers config.h:config.in"
-
-
-
-# Find a good install program. We prefer a C program (faster),
-# so one script is as good as another. But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if test "${ac_cv_path_install+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
- ./ | .// | /[cC]/* | \
- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
- ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
- /usr/ucb/* ) ;;
- *)
- # OSF1 and SCO ODT 3.0 have their own names for install.
- # Don't use installbsd from OSF since it installs stuff as root
- # by default.
- for ac_prog in ginstall scoinst install; do
- for ac_exec_ext in '' $ac_executable_extensions; do
- if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
- if test $ac_prog = install &&
- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # AIX install. It has an incompatible calling convention.
- :
- elif test $ac_prog = install &&
- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
- # program-specific install script used by HP pwplus--don't use.
- :
- else
- rm -rf conftest.one conftest.two conftest.dir
- echo one > conftest.one
- echo two > conftest.two
- mkdir conftest.dir
- if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
- test -s conftest.one && test -s conftest.two &&
- test -s conftest.dir/conftest.one &&
- test -s conftest.dir/conftest.two
- then
- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
- break 3
- fi
- fi
- fi
- done
- done
- ;;
-esac
-
- done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
- if test "${ac_cv_path_install+set}" = set; then
- INSTALL=$ac_cv_path_install
- else
- # As a last resort, use the slow shell script. Don't cache a
- # value for INSTALL within a source directory, because that will
- # break other packages using the cache if that directory is
- # removed, or if the value is a relative name.
- INSTALL=$ac_install_sh
- fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-
-# Don't build the shared library for build.
-if [ -n "${with_build_subdir}" ]; then
- enable_shared=no
-fi
-
-frag=
-case "${host}" in
- rs6000-ibm-aix3.1 | rs6000-ibm-aix)
- frag=mh-aix ;;
- *-*-cxux7*) frag=mh-cxux7 ;;
- *-*-freebsd2.1.*) frag=mh-fbsd21 ;;
- *-*-freebsd2.2.[012]) frag=mh-fbsd21 ;;
- i370-*-opened*) frag=mh-openedition ;;
- i[34567]86-*-windows*) frag=mh-windows ;;
-esac
-
-if [ -n "${frag}" ]; then
- frag=${libiberty_topdir}/libiberty/config/$frag
-fi
-
-
-
-
-
-case "${host}" in
- # PIC is the default on some targets or must not be used.
- *-*-darwin*)
- # PIC is the default on this platform
- # Common symbols not allowed in MH_DYLIB files
- PICFLAG=-fno-common
- ;;
- alpha*-dec-osf5*)
- # PIC is the default.
- ;;
- hppa*64*-*-hpux*)
- # PIC is the default for 64-bit PA HP-UX.
- ;;
- i[34567]86-*-cygwin* | i[34567]86-*-mingw* | x86_64-*-mingw*)
- ;;
- i[34567]86-*-interix[3-9]*)
- # Interix 3.x gcc -fpic/-fPIC options generate broken code.
- # Instead, we relocate shared libraries at runtime.
- ;;
- i[34567]86-*-nto-qnx*)
- # QNX uses GNU C++, but need to define -shared option too, otherwise
- # it will coredump.
- PICFLAG='-fPIC -shared'
- ;;
- i[34567]86-pc-msdosdjgpp*)
- # DJGPP does not support shared libraries at all.
- ;;
- ia64*-*-hpux*)
- # On IA64 HP-UX, PIC is the default but the pic flag
- # sets the default TLS model and affects inlining.
- PICFLAG=-fPIC
- ;;
- mips-sgi-irix6*)
- # PIC is the default.
- ;;
- rs6000-ibm-aix* | powerpc-ibm-aix*)
- # All AIX code is PIC.
- ;;
-
- # Some targets support both -fPIC and -fpic, but prefer the latter.
- # FIXME: Why?
- i[34567]86-*-* | x86_64-*-*)
- PICFLAG=-fpic
- ;;
- m68k-*-*)
- PICFLAG=-fpic
- ;;
- # FIXME: Override -fPIC default in libgcc only?
- sh-*-linux* | sh[2346lbe]*-*-linux*)
- PICFLAG=-fpic
- ;;
- # FIXME: Simplify to sh*-*-netbsd*?
- sh-*-netbsdelf* | shl*-*-netbsdelf* | sh5-*-netbsd* | sh5l*-*-netbsd* | \
- sh64-*-netbsd* | sh64l*-*-netbsd*)
- PICFLAG=-fpic
- ;;
- # Default to -fPIC unless specified otherwise.
- *)
- PICFLAG=-fPIC
- ;;
-esac
-
-# If the user explicitly uses -fpic/-fPIC, keep that.
-case "${CFLAGS}" in
- *-fpic*)
- PICFLAG=-fpic
- ;;
- *-fPIC*)
- PICFLAG=-fPIC
- ;;
-esac
-
-
-# If they didn't specify --enable-shared, don't generate shared libs.
-case "${enable_shared}" in
- yes) shared=yes ;;
- no) shared=no ;;
- "") shared=no ;;
- *) shared=yes ;;
-esac
-if [ "${shared}" != "yes" ]; then
- PICFLAG=
-fi
-
-
-echo "# Warning: this fragment is automatically generated" > temp-frag
-
-if [ -n "${frag}" ] && [ -f "${frag}" ]; then
- echo "Appending ${frag} to xhost-mkfrag"
- echo "# Following fragment copied from ${frag}" >> temp-frag
- cat ${frag} >> temp-frag
-fi
-
-# record if we want to build shared libs.
-if [ "${shared}" = "yes" ]; then
- echo enable_shared = yes >> temp-frag
-else
- echo enable_shared = no >> temp-frag
-fi
-
-frag=xhost-mkfrag
-${CONFIG_SHELL-/bin/sh} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag
-
-host_makefile_frag=${frag}
-
-
-# It's OK to check for header files. Although the compiler may not be
-# able to link anything, it had better be able to at least compile
-# something.
-for ac_header in sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h sys/prctl.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_preproc "$LINENO" "$ac_header" "$as_ac_Header"
-eval as_val=\$$as_ac_Header
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for sys/wait.h that is POSIX.1 compatible" >&5
-$as_echo_n "checking for sys/wait.h that is POSIX.1 compatible... " >&6; }
-if test "${ac_cv_header_sys_wait_h+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/wait.h>
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(stat_val) ((unsigned int) (stat_val) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(stat_val) (((stat_val) & 255) == 0)
-#endif
-
-int
-main ()
-{
- int s;
- wait (&s);
- s = WIFEXITED (s) ? WEXITSTATUS (s) : 1;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_sys_wait_h=yes
-else
- ac_cv_header_sys_wait_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_sys_wait_h" >&5
-$as_echo "$ac_cv_header_sys_wait_h" >&6; }
-if test $ac_cv_header_sys_wait_h = yes; then
-
-$as_echo "#define HAVE_SYS_WAIT_H 1" >>confdefs.h
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5
-$as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; }
-if test "${ac_cv_header_time+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/types.h>
-#include <sys/time.h>
-#include <time.h>
-
-int
-main ()
-{
-if ((struct tm *) 0)
-return 0;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- ac_cv_header_time=yes
-else
- ac_cv_header_time=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5
-$as_echo "$ac_cv_header_time" >&6; }
-if test $ac_cv_header_time = yes; then
-
-$as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h
-
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether errno must be declared" >&5
-$as_echo_n "checking whether errno must be declared... " >&6; }
-if test "${libiberty_cv_declare_errno+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <errno.h>
-int
-main ()
-{
-int x = errno;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- libiberty_cv_declare_errno=no
-else
- libiberty_cv_declare_errno=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libiberty_cv_declare_errno" >&5
-$as_echo "$libiberty_cv_declare_errno" >&6; }
-if test $libiberty_cv_declare_errno = yes
-then
-$as_echo "#define NEED_DECLARATION_ERRNO 1" >>confdefs.h
-
-fi
-
-
-# Determine the size of an int for struct fibnode.
-# The cast to long int works around a bug in the HP C Compiler
-# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
-# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
-# This bug is HP SR number 8606223364.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of int" >&5
-$as_echo_n "checking size of int... " >&6; }
-if test "${ac_cv_sizeof_int+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (int))" "ac_cv_sizeof_int" "$ac_includes_default"; then :
-
-else
- if test "$ac_cv_type_int" = yes; then
- { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-{ as_fn_set_status 77
-as_fn_error "cannot compute sizeof (int)
-See \`config.log' for more details." "$LINENO" 5; }; }
- else
- ac_cv_sizeof_int=0
- fi
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_int" >&5
-$as_echo "$ac_cv_sizeof_int" >&6; }
-
-
-
-cat >>confdefs.h <<_ACEOF
-#define SIZEOF_INT $ac_cv_sizeof_int
-_ACEOF
-
-
-
-# Look for a 64-bit type.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a 64-bit type" >&5
-$as_echo_n "checking for a 64-bit type... " >&6; }
-if test "${liberty_cv_uint64+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-int
-main ()
-{
-extern uint64_t foo;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- liberty_cv_uint64=uint64_t
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifndef CHAR_BIT
-#define CHAR_BIT 8
-#endif
-int
-main ()
-{
-extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- liberty_cv_uint64="unsigned long"
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifndef CHAR_BIT
-#define CHAR_BIT 8
-#endif
-int
-main ()
-{
-extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- liberty_cv_uint64="unsigned long long"
-else
- liberty_cv_uint64=none
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $liberty_cv_uint64" >&5
-$as_echo "$liberty_cv_uint64" >&6; }
-if test "$liberty_cv_uint64" != none; then
-
-cat >>confdefs.h <<_ACEOF
-#define UNSIGNED_64BIT_TYPE $liberty_cv_uint64
-_ACEOF
-
-fi
-
-
- ac_fn_c_check_type "$LINENO" "intptr_t" "ac_cv_type_intptr_t" "$ac_includes_default"
-if test "x$ac_cv_type_intptr_t" = x""yes; then :
-
-$as_echo "#define HAVE_INTPTR_T 1" >>confdefs.h
-
-else
- for ac_type in 'int' 'long int' 'long long int'; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-cat >>confdefs.h <<_ACEOF
-#define intptr_t $ac_type
-_ACEOF
-
- ac_type=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test -z "$ac_type" && break
- done
-fi
-
-
-
- ac_fn_c_check_type "$LINENO" "uintptr_t" "ac_cv_type_uintptr_t" "$ac_includes_default"
-if test "x$ac_cv_type_uintptr_t" = x""yes; then :
-
-$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h
-
-else
- for ac_type in 'unsigned int' 'unsigned long int' \
- 'unsigned long long int'; do
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-static int test_array [1 - 2 * !(sizeof (void *) <= sizeof ($ac_type))];
-test_array [0] = 0
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-cat >>confdefs.h <<_ACEOF
-#define uintptr_t $ac_type
-_ACEOF
-
- ac_type=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
- test -z "$ac_type" && break
- done
-fi
-
-
-ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
-if test "x$ac_cv_type_ssize_t" = x""yes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define ssize_t int
-_ACEOF
-
-fi
-
-
-# Given the above check, we always have uintptr_t or a fallback
-# definition. So define HAVE_UINTPTR_T in case any imported code
-# relies on it.
-
-$as_echo "#define HAVE_UINTPTR_T 1" >>confdefs.h
-
-
-ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
-if test "x$ac_cv_type_pid_t" = x""yes; then :
-
-else
-
-cat >>confdefs.h <<_ACEOF
-#define pid_t int
-_ACEOF
-
-fi
-
-
-# This is the list of functions which libiberty will provide if they
-# are not available on the host.
-
-funcs="asprintf"
-funcs="$funcs atexit"
-funcs="$funcs basename"
-funcs="$funcs bcmp"
-funcs="$funcs bcopy"
-funcs="$funcs bsearch"
-funcs="$funcs bzero"
-funcs="$funcs calloc"
-funcs="$funcs clock"
-funcs="$funcs ffs"
-funcs="$funcs getcwd"
-funcs="$funcs getpagesize"
-funcs="$funcs gettimeofday"
-funcs="$funcs index"
-funcs="$funcs insque"
-funcs="$funcs memchr"
-funcs="$funcs memcmp"
-funcs="$funcs memcpy"
-funcs="$funcs memmem"
-funcs="$funcs memmove"
-funcs="$funcs mempcpy"
-funcs="$funcs memset"
-funcs="$funcs mkstemps"
-funcs="$funcs putenv"
-funcs="$funcs random"
-funcs="$funcs rename"
-funcs="$funcs rindex"
-funcs="$funcs setenv"
-funcs="$funcs snprintf"
-funcs="$funcs sigsetmask"
-funcs="$funcs stpcpy"
-funcs="$funcs stpncpy"
-funcs="$funcs strcasecmp"
-funcs="$funcs strchr"
-funcs="$funcs strdup"
-funcs="$funcs strncasecmp"
-funcs="$funcs strndup"
-funcs="$funcs strrchr"
-funcs="$funcs strstr"
-funcs="$funcs strtod"
-funcs="$funcs strtol"
-funcs="$funcs strtoul"
-funcs="$funcs strverscmp"
-funcs="$funcs tmpnam"
-funcs="$funcs vasprintf"
-funcs="$funcs vfprintf"
-funcs="$funcs vprintf"
-funcs="$funcs vsnprintf"
-funcs="$funcs vsprintf"
-funcs="$funcs waitpid"
-funcs="$funcs setproctitle"
-
-# Also in the old function.def file: alloca, vfork, getopt.
-
-vars="sys_errlist sys_nerr sys_siglist"
-
-checkfuncs="__fsetlocking canonicalize_file_name dup3 getrlimit getrusage \
- getsysinfo gettimeofday on_exit psignal pstat_getdynamic pstat_getstatic \
- realpath setrlimit sbrk spawnve spawnvpe strerror strsignal sysconf sysctl \
- sysmp table times wait3 wait4"
-
-# These are neither executed nor required, but they help keep
-# autoheader happy without adding a bunch of text to acconfig.h.
-if test "x" = "y"; then
- for ac_func in asprintf atexit \
- basename bcmp bcopy bsearch bzero \
- calloc canonicalize_file_name clock \
- dup3 \
- ffs __fsetlocking \
- getcwd getpagesize getrlimit getrusage getsysinfo gettimeofday \
- index insque \
- memchr memcmp memcpy memmem memmove memset mkstemps \
- on_exit \
- psignal pstat_getdynamic pstat_getstatic putenv \
- random realpath rename rindex \
- sbrk setenv setproctitle setrlimit sigsetmask snprintf spawnve spawnvpe \
- stpcpy stpncpy strcasecmp strchr strdup \
- strerror strncasecmp strndup strrchr strsignal strstr strtod strtol \
- strtoul strverscmp sysconf sysctl sysmp \
- table times tmpnam \
- vasprintf vfprintf vprintf vsprintf \
- wait3 wait4 waitpid
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- ac_fn_c_check_decl "$LINENO" "basename(char *)" "ac_cv_have_decl_basename_char_p_" "$ac_includes_default"
-if test "x$ac_cv_have_decl_basename_char_p_" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_BASENAME $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default"
-if test "x$ac_cv_have_decl_ffs" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FFS $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_asprintf" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ASPRINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_vasprintf" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_VASPRINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_snprintf" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SNPRINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_vsnprintf" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_VSNPRINTF $ac_have_decl
-_ACEOF
-
-
-$as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h
-
-
-$as_echo "#define HAVE_SYS_NERR 1" >>confdefs.h
-
-
-$as_echo "#define HAVE_SYS_SIGLIST 1" >>confdefs.h
-
-fi
-
-# For each of these functions, if the host does not provide the
-# function we want to put FN.o in LIBOBJS, and if the host does
-# provide the function, we want to define HAVE_FN in config.h.
-
-setobjs=
-CHECK=
-target_header_dir=
-if test -n "${with_target_subdir}"; then
-
- # We are being configured as a target library. AC_REPLACE_FUNCS
- # may not work correctly, because the compiler may not be able to
- # link executables. Note that we may still be being configured
- # native.
-
- # If we are being configured for newlib, we know which functions
- # newlib provide and which ones we will be expected to provide.
-
- if test "x${with_newlib}" = "xyes"; then
- case " $LIBOBJS " in
- *" asprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS asprintf.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" basename.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS basename.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" insque.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS insque.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" random.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS random.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" strdup.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS strdup.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" vasprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext"
- ;;
-esac
-
-
- for f in $funcs; do
- case "$f" in
- asprintf | basename | insque | random | strdup | vasprintf)
- ;;
- *)
- n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >>confdefs.h <<_ACEOF
-#define $n 1
-_ACEOF
-
- ;;
- esac
- done
-
- # newlib doesnt provide any of the variables in $vars, so we
- # dont have to check them here.
-
- # Of the functions in $checkfuncs, newlib only has strerror.
- $as_echo "#define HAVE_STRERROR 1" >>confdefs.h
-
-
- setobjs=yes
-
- fi
-
- # If we are being configured for Mingw, we know which functions
- # Mingw provides and which ones we will be expected to provide.
-
- case "${host}" in
- *-*-mingw*)
- case " $LIBOBJS " in
- *" asprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS asprintf.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" basename.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS basename.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" bcmp.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS bcmp.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" bcopy.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS bcopy.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" bzero.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS bzero.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" clock.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS clock.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" ffs.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS ffs.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" getpagesize.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS getpagesize.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" index.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS index.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" insque.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS insque.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" mempcpy.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS mempcpy.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" mkstemps.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS mkstemps.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" random.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS random.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" rindex.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS rindex.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" sigsetmask.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS sigsetmask.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" stpcpy.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS stpcpy.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" stpncpy.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS stpncpy.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" strndup.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS strndup.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" strverscmp.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS strverscmp.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" vasprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" waitpid.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS waitpid.$ac_objext"
- ;;
-esac
-
-
- for f in $funcs; do
- case "$f" in
- asprintf | basename | bcmp | bcopy | bzero | clock | ffs | getpagesize | index | insque | mempcpy | mkstemps | random | rindex | sigsetmask | stpcpy | stpncpy | strdup | strndup | strverscmp | vasprintf | waitpid)
- ;;
- *)
- n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >>confdefs.h <<_ACEOF
-#define $n 1
-_ACEOF
-
- ;;
- esac
- done
-
- # Mingw doesnt provide any of the variables in $vars, so we
- # dont have to check them here.
-
- # Of the functions in $checkfuncs, Mingw only has strerror.
- $as_echo "#define HAVE_STRERROR 1" >>confdefs.h
-
-
- setobjs=yes
- ;;
-
- *-*-msdosdjgpp)
- case " $LIBOBJS " in
- *" vasprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" vsnprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS vsnprintf.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" snprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" asprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS asprintf.$ac_objext"
- ;;
-esac
-
-
- for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \
- getcwd getpagesize getrusage gettimeofday \
- index insque memchr memcmp memcpy memmove memset psignal \
- putenv random rename rindex sbrk setenv stpcpy strcasecmp \
- strchr strdup strerror strncasecmp strrchr strstr strtod \
- strtol strtoul sysconf times tmpnam vfprintf vprintf \
- vsprintf waitpid
- do
- n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >>confdefs.h <<_ACEOF
-#define $n 1
-_ACEOF
-
- done
-
-
- setobjs=yes
- ;;
-
- esac
-
- # We may wish to install the target headers somewhere.
- # Check whether --enable-install-libiberty was given.
-if test "${enable_install_libiberty+set}" = set; then :
- enableval=$enable_install_libiberty; enable_install_libiberty=$enableval
-else
- enable_install_libiberty=no
-fi
-
- # Option parsed, now set things appropriately.
- case x"$enable_install_libiberty" in
- xyes|x)
- target_header_dir=libiberty
- ;;
- xno)
- target_header_dir=
- ;;
- *)
- # This could be sanity-checked in various ways...
- target_header_dir="${enable_install_libiberty}"
- ;;
- esac
-
-
-else
-
- # Not a target library, so we set things up to run the test suite.
- CHECK=really-check
-
-fi
-
-
-
-
-case "${host}" in
- *-*-cygwin* | *-*-mingw*)
- $as_echo "#define HAVE_SYS_ERRLIST 1" >>confdefs.h
-
- $as_echo "#define HAVE_SYS_NERR 1" >>confdefs.h
-
- ;;
-esac
-
-if test -z "${setobjs}"; then
- case "${host}" in
-
- *-*-vxworks*)
- # Handle VxWorks configuration specially, since on VxWorks the
- # libraries are actually on the target board, not in the file
- # system.
- case " $LIBOBJS " in
- *" basename.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS basename.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" getpagesize.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS getpagesize.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" insque.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS insque.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" random.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS random.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" strcasecmp.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS strcasecmp.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" strncasecmp.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS strncasecmp.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" strdup.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS strdup.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" vfork.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS vfork.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" waitpid.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS waitpid.$ac_objext"
- ;;
-esac
-
- case " $LIBOBJS " in
- *" vasprintf.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS vasprintf.$ac_objext"
- ;;
-esac
-
- for f in $funcs; do
- case "$f" in
- basename | getpagesize | insque | random | strcasecmp)
- ;;
- strncasecmp | strdup | vfork | waitpid | vasprintf)
- ;;
- *)
- n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >>confdefs.h <<_ACEOF
-#define $n 1
-_ACEOF
-
- ;;
- esac
- done
-
- # VxWorks doesn't provide any of the variables in $vars, so we
- # don't have to check them here.
-
- # Of the functions in $checkfuncs, VxWorks only has strerror.
- $as_echo "#define HAVE_STRERROR 1" >>confdefs.h
-
-
- setobjs=yes
- ;;
-
- esac
-fi
-
-if test -z "${setobjs}"; then
-
- case "${host}" in
-
- *-*-mingw32*)
- # Under mingw32, sys_nerr and sys_errlist exist, but they are
- # macros, so the test below won't find them.
- libiberty_cv_var_sys_nerr=yes
- libiberty_cv_var_sys_errlist=yes
- ;;
-
- *-*-msdosdjgpp*)
- # vfork and fork are stubs.
- ac_cv_func_vfork_works=no
- ;;
-
- *-*-uwin*)
- # Under some versions of uwin, vfork is notoriously buggy and the test
- # can hang configure; on other versions, vfork exists just as a stub.
- # FIXME: This should be removed once vfork in uwin's runtime is fixed.
- ac_cv_func_vfork_works=no
- # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are
- # macros (actually, these are imported from a DLL, but the end effect
- # is the same), so the test below won't find them.
- libiberty_cv_var_sys_nerr=yes
- libiberty_cv_var_sys_errlist=yes
- ;;
-
- *-*-*vms*)
- # Under VMS, vfork works very different than on Unix. The standard test
- # won't work, and it isn't easily adaptable. It makes more sense to
- # just force it.
- ac_cv_func_vfork_works=yes
- ;;
-
- esac
-
- # We haven't set the list of objects yet. Use the standard autoconf
- # tests. This will only work if the compiler works.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing strerror" >&5
-$as_echo_n "checking for library containing strerror... " >&6; }
-if test "${ac_cv_search_strerror+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- ac_func_search_save_LIBS=$LIBS
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char strerror ();
-int
-main ()
-{
-return strerror ();
- ;
- return 0;
-}
-_ACEOF
-for ac_lib in '' cposix; do
- if test -z "$ac_lib"; then
- ac_res="none required"
- else
- ac_res=-l$ac_lib
- LIBS="-l$ac_lib $ac_func_search_save_LIBS"
- fi
- if test x$gcc_no_link = xyes; then
- as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
-fi
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_search_strerror=$ac_res
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext
- if test "${ac_cv_search_strerror+set}" = set; then :
- break
-fi
-done
-if test "${ac_cv_search_strerror+set}" = set; then :
-
-else
- ac_cv_search_strerror=no
-fi
-rm conftest.$ac_ext
-LIBS=$ac_func_search_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_strerror" >&5
-$as_echo "$ac_cv_search_strerror" >&6; }
-ac_res=$ac_cv_search_strerror
-if test "$ac_res" != no; then :
- test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
-
-fi
-
- for ac_func in $funcs
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-else
- case " $LIBOBJS " in
- *" $ac_func.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
- ;;
-esac
-
-fi
-done
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether alloca needs Cray hooks" >&5
-$as_echo_n "checking whether alloca needs Cray hooks... " >&6; }
-if test "${ac_cv_os_cray+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#if defined(CRAY) && ! defined(CRAY2)
-webecray
-#else
-wenotbecray
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
- $EGREP "webecray" >/dev/null 2>&1; then :
- ac_cv_os_cray=yes
-else
- ac_cv_os_cray=no
-fi
-rm -f conftest*
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
-$as_echo "$ac_cv_os_cray" >&6; }
-if test $ac_cv_os_cray = yes; then
- for ac_func in _getb67 GETB67 getb67; do
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
- if test "x$as_val" = x""yes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define CRAY_STACKSEG_END $ac_func
-_ACEOF
- break
-fi
-
- done
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
-$as_echo_n "checking stack direction for C alloca... " >&6; }
-if test "${ac_cv_c_stack_direction+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_c_stack_direction=0
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-find_stack_direction ()
-{
- static char *addr = 0;
- auto char dummy;
- if (addr == 0)
- {
- addr = &dummy;
- return find_stack_direction ();
- }
- else
- return (&dummy > addr) ? 1 : -1;
-}
-main ()
-{
- exit (find_stack_direction() < 0);
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_c_stack_direction=1
-else
- ac_cv_c_stack_direction=-1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
-$as_echo "$ac_cv_c_stack_direction" >&6; }
-
-cat >>confdefs.h <<_ACEOF
-#define STACK_DIRECTION $ac_cv_c_stack_direction
-_ACEOF
-
-
- for ac_header in vfork.h
-do :
- ac_fn_c_check_header_preproc "$LINENO" "vfork.h" "ac_cv_header_vfork_h"
-if test "x$ac_cv_header_vfork_h" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_VFORK_H 1
-_ACEOF
-
-fi
-done
-
-for ac_func in fork vfork
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-if test "x$ac_cv_func_fork" = xyes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
-$as_echo_n "checking for working fork... " >&6; }
-if test "${ac_cv_func_fork_works+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_fork_works=cross
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-int
-main ()
-{
-
- /* By Ruediger Kuhlmann. */
- return fork () < 0;
-
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_fork_works=yes
-else
- ac_cv_func_fork_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
-$as_echo "$ac_cv_func_fork_works" >&6; }
-
-else
- ac_cv_func_fork_works=$ac_cv_func_fork
-fi
-if test "x$ac_cv_func_fork_works" = xcross; then
- case $host in
- *-*-amigaos* | *-*-msdosdjgpp*)
- # Override, as these systems have only a dummy fork() stub
- ac_cv_func_fork_works=no
- ;;
- *)
- ac_cv_func_fork_works=yes
- ;;
- esac
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
-fi
-ac_cv_func_vfork_works=$ac_cv_func_vfork
-if test "x$ac_cv_func_vfork" = xyes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
-$as_echo_n "checking for working vfork... " >&6; }
-if test "${ac_cv_func_vfork_works+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_vfork_works=cross
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-/* Thanks to Paul Eggert for this test. */
-$ac_includes_default
-#include <sys/wait.h>
-#ifdef HAVE_VFORK_H
-# include <vfork.h>
-#endif
-/* On some sparc systems, changes by the child to local and incoming
- argument registers are propagated back to the parent. The compiler
- is told about this with #include <vfork.h>, but some compilers
- (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a
- static variable whose address is put into a register that is
- clobbered by the vfork. */
-static void
-#ifdef __cplusplus
-sparc_address_test (int arg)
-# else
-sparc_address_test (arg) int arg;
-#endif
-{
- static pid_t child;
- if (!child) {
- child = vfork ();
- if (child < 0) {
- perror ("vfork");
- _exit(2);
- }
- if (!child) {
- arg = getpid();
- write(-1, "", 0);
- _exit (arg);
- }
- }
-}
-
-int
-main ()
-{
- pid_t parent = getpid ();
- pid_t child;
-
- sparc_address_test (0);
-
- child = vfork ();
-
- if (child == 0) {
- /* Here is another test for sparc vfork register problems. This
- test uses lots of local variables, at least as many local
- variables as main has allocated so far including compiler
- temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris
- 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should
- reuse the register of parent for one of the local variables,
- since it will think that parent can't possibly be used any more
- in this routine. Assigning to the local variable will thus
- munge parent in the parent process. */
- pid_t
- p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
- p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
- /* Convince the compiler that p..p7 are live; otherwise, it might
- use the same hardware register for all 8 local variables. */
- if (p != p1 || p != p2 || p != p3 || p != p4
- || p != p5 || p != p6 || p != p7)
- _exit(1);
-
- /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
- from child file descriptors. If the child closes a descriptor
- before it execs or exits, this munges the parent's descriptor
- as well. Test for this by closing stdout in the child. */
- _exit(close(fileno(stdout)) != 0);
- } else {
- int status;
- struct stat st;
-
- while (wait(&status) != child)
- ;
- return (
- /* Was there some problem with vforking? */
- child < 0
-
- /* Did the child fail? (This shouldn't happen.) */
- || status
-
- /* Did the vfork/compiler bug occur? */
- || parent != getpid()
-
- /* Did the file descriptor bug occur? */
- || fstat(fileno(stdout), &st) != 0
- );
- }
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_vfork_works=yes
-else
- ac_cv_func_vfork_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
-$as_echo "$ac_cv_func_vfork_works" >&6; }
-
-fi;
-if test "x$ac_cv_func_fork_works" = xcross; then
- ac_cv_func_vfork_works=$ac_cv_func_vfork
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
-$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
-fi
-
-if test "x$ac_cv_func_vfork_works" = xyes; then
-
-$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
-
-else
-
-$as_echo "#define vfork fork" >>confdefs.h
-
-fi
-if test "x$ac_cv_func_fork_works" = xyes; then
-
-$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
-
-fi
-
- if test $ac_cv_func_vfork_works = no; then
- case " $LIBOBJS " in
- *" vfork.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS vfork.$ac_objext"
- ;;
-esac
-
- fi
- # We only need _doprnt if we might use it to implement v*printf.
- if test $ac_cv_func_vprintf != yes \
- || test $ac_cv_func_vfprintf != yes \
- || test $ac_cv_func_vsprintf != yes; then
- for ac_func in _doprnt
-do :
- ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
-if test "x$ac_cv_func__doprnt" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__DOPRNT 1
-_ACEOF
-
-else
- case " $LIBOBJS " in
- *" $ac_func.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS $ac_func.$ac_objext"
- ;;
-esac
-
-fi
-done
-
-
- else
- for ac_func in _doprnt
-do :
- ac_fn_c_check_func "$LINENO" "_doprnt" "ac_cv_func__doprnt"
-if test "x$ac_cv_func__doprnt" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE__DOPRNT 1
-_ACEOF
-
-fi
-done
-
- fi
-
- for v in $vars; do
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $v" >&5
-$as_echo_n "checking for $v... " >&6; }
- if { as_var=libiberty_cv_var_$v; eval "test \"\${$as_var+set}\" = set"; }; then :
- $as_echo_n "(cached) " >&6
-else
- if test x$gcc_no_link = xyes; then
- as_fn_error "Link tests are not allowed after GCC_NO_EXECUTABLES." "$LINENO" 5
-fi
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-int *p;
-int
-main ()
-{
-extern int $v []; p = $v;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- eval "libiberty_cv_var_$v=yes"
-else
- eval "libiberty_cv_var_$v=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-fi
-
- if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- cat >>confdefs.h <<_ACEOF
-#define $n 1
-_ACEOF
-
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
- done
-
- # special check for _system_configuration because AIX <4.3.2 do not
- # contain the `physmem' member.
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for external symbol _system_configuration" >&5
-$as_echo_n "checking for external symbol _system_configuration... " >&6; }
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-#include <sys/systemcfg.h>
-int
-main ()
-{
-double x = _system_configuration.physmem;
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-
-$as_echo "#define HAVE__SYSTEM_CONFIGURATION 1" >>confdefs.h
-
-else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
- for ac_func in $checkfuncs
-do :
- as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-eval as_val=\$$as_ac_var
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
- ac_fn_c_check_decl "$LINENO" "basename(char *)" "ac_cv_have_decl_basename_char_p_" "$ac_includes_default"
-if test "x$ac_cv_have_decl_basename_char_p_" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_BASENAME $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "ffs" "ac_cv_have_decl_ffs" "$ac_includes_default"
-if test "x$ac_cv_have_decl_ffs" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_FFS $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "asprintf" "ac_cv_have_decl_asprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_asprintf" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_ASPRINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "vasprintf" "ac_cv_have_decl_vasprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_vasprintf" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_VASPRINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_snprintf" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SNPRINTF $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default"
-if test "x$ac_cv_have_decl_vsnprintf" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_VSNPRINTF $ac_have_decl
-_ACEOF
-
- ac_fn_c_check_decl "$LINENO" "calloc" "ac_cv_have_decl_calloc" "$ac_includes_default"
-if test "x$ac_cv_have_decl_calloc" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_CALLOC $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default"
-if test "x$ac_cv_have_decl_getenv" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETENV $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "getopt" "ac_cv_have_decl_getopt" "$ac_includes_default"
-if test "x$ac_cv_have_decl_getopt" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETOPT $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "malloc" "ac_cv_have_decl_malloc" "$ac_includes_default"
-if test "x$ac_cv_have_decl_malloc" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_MALLOC $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "realloc" "ac_cv_have_decl_realloc" "$ac_includes_default"
-if test "x$ac_cv_have_decl_realloc" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_REALLOC $ac_have_decl
-_ACEOF
-ac_fn_c_check_decl "$LINENO" "sbrk" "ac_cv_have_decl_sbrk" "$ac_includes_default"
-if test "x$ac_cv_have_decl_sbrk" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_SBRK $ac_have_decl
-_ACEOF
-
- ac_fn_c_check_decl "$LINENO" "strverscmp" "ac_cv_have_decl_strverscmp" "$ac_includes_default"
-if test "x$ac_cv_have_decl_strverscmp" = x""yes; then :
- ac_have_decl=1
-else
- ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_STRVERSCMP $ac_have_decl
-_ACEOF
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether canonicalize_file_name must be declared" >&5
-$as_echo_n "checking whether canonicalize_file_name must be declared... " >&6; }
-if test "${libiberty_cv_decl_needed_canonicalize_file_name+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-#include "confdefs.h"
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-int
-main ()
-{
-char *(*pfn) = (char *(*)) canonicalize_file_name
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
- libiberty_cv_decl_needed_canonicalize_file_name=no
-else
- libiberty_cv_decl_needed_canonicalize_file_name=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libiberty_cv_decl_needed_canonicalize_file_name" >&5
-$as_echo "$libiberty_cv_decl_needed_canonicalize_file_name" >&6; }
-if test $libiberty_cv_decl_needed_canonicalize_file_name = yes; then
-
-$as_echo "#define NEED_DECLARATION_CANONICALIZE_FILE_NAME 1" >>confdefs.h
-
-fi
-
-fi
-
-# Figure out which version of pexecute to use.
-case "${host}" in
- *-*-mingw* | *-*-winnt*) pexecute=pex-win32 ;;
- *-*-msdosdjgpp*) pexecute=pex-djgpp ;;
- *-*-msdos*) pexecute=pex-msdos ;;
- *) pexecute=pex-unix ;;
-esac
-
-
-if test x$gcc_no_link = xyes; then
- if test "x${ac_cv_func_mmap_fixed_mapped+set}" != xset; then
- ac_cv_func_mmap_fixed_mapped=no
- fi
-fi
-if test "x${ac_cv_func_mmap_fixed_mapped}" != xno; then
- for ac_header in stdlib.h unistd.h
-do :
- as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_preproc "$LINENO" "$ac_header" "$as_ac_Header"
-eval as_val=\$$as_ac_Header
- if test "x$as_val" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-for ac_func in getpagesize
-do :
- ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize"
-if test "x$ac_cv_func_getpagesize" = x""yes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_GETPAGESIZE 1
-_ACEOF
-
-fi
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5
-$as_echo_n "checking for working mmap... " >&6; }
-if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_mmap_fixed_mapped=no
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-$ac_includes_default
-/* malloc might have been renamed as rpl_malloc. */
-#undef malloc
-
-/* Thanks to Mike Haertel and Jim Avera for this test.
- Here is a matrix of mmap possibilities:
- mmap private not fixed
- mmap private fixed at somewhere currently unmapped
- mmap private fixed at somewhere already mapped
- mmap shared not fixed
- mmap shared fixed at somewhere currently unmapped
- mmap shared fixed at somewhere already mapped
- For private mappings, we should verify that changes cannot be read()
- back from the file, nor mmap's back from the file at a different
- address. (There have been systems where private was not correctly
- implemented like the infamous i386 svr4.0, and systems where the
- VM page cache was not coherent with the file system buffer cache
- like early versions of FreeBSD and possibly contemporary NetBSD.)
- For shared mappings, we should conversely verify that changes get
- propagated back to all the places they're supposed to be.
-
- Grep wants private fixed already mapped.
- The main things grep needs to know about mmap are:
- * does it exist and is it safe to write into the mmap'd area
- * how to use it (BSD variants) */
-
-#include <fcntl.h>
-#include <sys/mman.h>
-
-#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
-char *malloc ();
-#endif
-
-/* This mess was copied from the GNU getpagesize.h. */
-#ifndef HAVE_GETPAGESIZE
-/* Assume that all systems that can run configure have sys/param.h. */
-# ifndef HAVE_SYS_PARAM_H
-# define HAVE_SYS_PARAM_H 1
-# endif
-
-# ifdef _SC_PAGESIZE
-# define getpagesize() sysconf(_SC_PAGESIZE)
-# else /* no _SC_PAGESIZE */
-# ifdef HAVE_SYS_PARAM_H
-# include <sys/param.h>
-# ifdef EXEC_PAGESIZE
-# define getpagesize() EXEC_PAGESIZE
-# else /* no EXEC_PAGESIZE */
-# ifdef NBPG
-# define getpagesize() NBPG * CLSIZE
-# ifndef CLSIZE
-# define CLSIZE 1
-# endif /* no CLSIZE */
-# else /* no NBPG */
-# ifdef NBPC
-# define getpagesize() NBPC
-# else /* no NBPC */
-# ifdef PAGESIZE
-# define getpagesize() PAGESIZE
-# endif /* PAGESIZE */
-# endif /* no NBPC */
-# endif /* no NBPG */
-# endif /* no EXEC_PAGESIZE */
-# else /* no HAVE_SYS_PARAM_H */
-# define getpagesize() 8192 /* punt totally */
-# endif /* no HAVE_SYS_PARAM_H */
-# endif /* no _SC_PAGESIZE */
-
-#endif /* no HAVE_GETPAGESIZE */
-
-int
-main ()
-{
- char *data, *data2, *data3;
- int i, pagesize;
- int fd;
-
- pagesize = getpagesize ();
-
- /* First, make a file with some known garbage in it. */
- data = (char *) malloc (pagesize);
- if (!data)
- return 1;
- for (i = 0; i < pagesize; ++i)
- *(data + i) = rand ();
- umask (0);
- fd = creat ("conftest.mmap", 0600);
- if (fd < 0)
- return 1;
- if (write (fd, data, pagesize) != pagesize)
- return 1;
- close (fd);
-
- /* Next, try to mmap the file at a fixed address which already has
- something else allocated at it. If we can, also make sure that
- we see the same garbage. */
- fd = open ("conftest.mmap", O_RDWR);
- if (fd < 0)
- return 1;
- data2 = (char *) malloc (2 * pagesize);
- if (!data2)
- return 1;
- data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
- if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_FIXED, fd, 0L))
- return 1;
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data2 + i))
- return 1;
-
- /* Finally, make sure that changes to the mapped area do not
- percolate back to the file as seen by read(). (This is a bug on
- some variants of i386 svr4.0.) */
- for (i = 0; i < pagesize; ++i)
- *(data2 + i) = *(data2 + i) + 1;
- data3 = (char *) malloc (pagesize);
- if (!data3)
- return 1;
- if (read (fd, data3, pagesize) != pagesize)
- return 1;
- for (i = 0; i < pagesize; ++i)
- if (*(data + i) != *(data3 + i))
- return 1;
- close (fd);
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_mmap_fixed_mapped=yes
-else
- ac_cv_func_mmap_fixed_mapped=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5
-$as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; }
-if test $ac_cv_func_mmap_fixed_mapped = yes; then
-
-$as_echo "#define HAVE_MMAP 1" >>confdefs.h
-
-fi
-rm -f conftest.mmap
-
-fi
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strncmp" >&5
-$as_echo_n "checking for working strncmp... " >&6; }
-if test "${ac_cv_func_strncmp_works+set}" = set; then :
- $as_echo_n "(cached) " >&6
-else
- if test "$cross_compiling" = yes; then :
- ac_cv_func_strncmp_works=yes
-else
- cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Test by Jim Wilson and Kaveh Ghazi.
- Check whether strncmp reads past the end of its string parameters. */
-#include <sys/types.h>
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-
-#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
-#endif
-
-#ifndef MAP_ANON
-#ifdef MAP_ANONYMOUS
-#define MAP_ANON MAP_ANONYMOUS
-#else
-#define MAP_ANON MAP_FILE
-#endif
-#endif
-
-#ifndef MAP_FILE
-#define MAP_FILE 0
-#endif
-#ifndef O_RDONLY
-#define O_RDONLY 0
-#endif
-
-#define MAP_LEN 0x10000
-
-main ()
-{
-#if defined(HAVE_MMAP) || defined(HAVE_MMAP_ANYWHERE)
- char *p;
- int dev_zero;
-
- dev_zero = open ("/dev/zero", O_RDONLY);
- if (dev_zero < 0)
- exit (1);
-
- p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_PRIVATE, dev_zero, 0);
- if (p == (char *)-1)
- p = (char *) mmap (0, MAP_LEN, PROT_READ|PROT_WRITE,
- MAP_ANON|MAP_PRIVATE, -1, 0);
- if (p == (char *)-1)
- exit (2);
- else
- {
- char *string = "__si_type_info";
- char *q = (char *) p + MAP_LEN - strlen (string) - 2;
- char *r = (char *) p + 0xe;
-
- strcpy (q, string);
- strcpy (r, string);
- strncmp (r, q, 14);
- }
-#endif /* HAVE_MMAP || HAVE_MMAP_ANYWHERE */
- exit (0);
-}
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
- ac_cv_func_strncmp_works=yes
-else
- ac_cv_func_strncmp_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
- conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-rm -f core core.* *.core
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strncmp_works" >&5
-$as_echo "$ac_cv_func_strncmp_works" >&6; }
-if test $ac_cv_func_strncmp_works = no ; then
- case " $LIBOBJS " in
- *" strncmp.$ac_objext "* ) ;;
- *) LIBOBJS="$LIBOBJS strncmp.$ac_objext"
- ;;
-esac
-
-fi
-
-
-# Install a library built with a cross compiler in $(tooldir) rather
-# than $(libdir).
-if test -z "${with_cross_host}"; then
- INSTALL_DEST=libdir
-else
- INSTALL_DEST=tooldir
-fi
-
-
-
-L=""
-for l in x $LIBOBJS; do
- case $l in
- x) ;;
- *) L="$L ./$l" ;;
- esac
-done
-LIBOBJS="$L"
-
-
-
-
-
-# We need multilib support, but only if configuring for the target.
-ac_config_files="$ac_config_files Makefile testsuite/Makefile"
-
-ac_config_commands="$ac_config_commands default"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems. If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
- for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
- eval ac_val=\$$ac_var
- case $ac_val in #(
- *${as_nl}*)
- case $ac_var in #(
- *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
- esac
- case $ac_var in #(
- _ | IFS | as_nl) ;; #(
- BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
- *) { eval $ac_var=; unset $ac_var;} ;;
- esac ;;
- esac
- done
-
- (set) 2>&1 |
- case $as_nl`(ac_space=' '; set) 2>&1` in #(
- *${as_nl}ac_space=\ *)
- # `set' does not quote correctly, so add quotes: double-quote
- # substitution turns \\\\ into \\, and sed turns \\ into \.
- sed -n \
- "s/'/'\\\\''/g;
- s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
- ;; #(
- *)
- # `set' quotes correctly as required by POSIX, so do not add quotes.
- sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
- ;;
- esac |
- sort
-) |
- sed '
- /^ac_cv_env_/b end
- t clear
- :clear
- s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
- t end
- s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
- :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
- if test -w "$cache_file"; then
- test "x$cache_file" != "x/dev/null" &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
- cat confcache >$cache_file
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
- fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
- # 1. Remove the extension, and $U if already installed.
- ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
- ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
- # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
- # will be set to the directory where LIBOBJS objects are built.
- as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
- as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-
-
-: ${CONFIG_STATUS=./config.status}
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
- emulate sh
- NULLCMD=:
- # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
- # is contrary to our usage. Disable this feature.
- alias -g '${1+"$@"}'='"$@"'
- setopt NO_GLOB_SUBST
-else
- case `(set -o) 2>/dev/null` in #(
- *posix*) :
- set -o posix ;; #(
- *) :
- ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
- && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='print -r --'
- as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
- as_echo='printf %s\n'
- as_echo_n='printf %s'
-else
- if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
- as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
- as_echo_n='/usr/ucb/echo -n'
- else
- as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
- as_echo_n_body='eval
- arg=$1;
- case $arg in #(
- *"$as_nl"*)
- expr "X$arg" : "X\\(.*\\)$as_nl";
- arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
- esac;
- expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
- '
- export as_echo_n_body
- as_echo_n='sh -c $as_echo_n_body as_echo'
- fi
- export as_echo_body
- as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
- PATH_SEPARATOR=:
- (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
- (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
- PATH_SEPARATOR=';'
- }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order. Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" "" $as_nl"
-
-# Find who we are. Look in the path if we contain no directory separator.
-case $0 in #((
- *[\\/]* ) as_myself=$0 ;;
- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
- IFS=$as_save_IFS
- test -z "$as_dir" && as_dir=.
- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
- done
-IFS=$as_save_IFS
-
- ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
- as_myself=$0
-fi
-if test ! -f "$as_myself"; then
- $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
- exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there. '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
- && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error ERROR [LINENO LOG_FD]
-# ---------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with status $?, using 1 if that was 0.
-as_fn_error ()
-{
- as_status=$?; test $as_status -eq 0 && as_status=1
- if test "$3"; then
- as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
- $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
- fi
- $as_echo "$as_me: error: $1" >&2
- as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
- return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
- set +e
- as_fn_set_status $1
- exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
- { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
- eval 'as_fn_append ()
- {
- eval $1+=\$2
- }'
-else
- as_fn_append ()
- {
- eval $1=\$$1\$2
- }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
- eval 'as_fn_arith ()
- {
- as_val=$(( $* ))
- }'
-else
- as_fn_arith ()
- {
- as_val=`expr "$@" || test $? -eq 1`
- }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
- test "X`expr 00001 : '.*\(...\)'`" = X001; then
- as_expr=expr
-else
- as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
- as_basename=basename
-else
- as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
- as_dirname=dirname
-else
- as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
- X"$0" : 'X\(//\)$' \| \
- X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
- sed '/^.*\/\([^/][^/]*\)\/*$/{
- s//\1/
- q
- }
- /^X\/\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\/\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
- case `echo 'xy\c'` in
- *c*) ECHO_T=' ';; # ECHO_T is single tab character.
- xy) ECHO_C='\c';;
- *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
- ECHO_T=' ';;
- esac;;
-*)
- ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
- rm -f conf$$.dir/conf$$.file
-else
- rm -f conf$$.dir
- mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
- if ln -s conf$$.file conf$$ 2>/dev/null; then
- as_ln_s='ln -s'
- # ... but there are two gotchas:
- # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
- # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
- # In both cases, we have to default to `cp -p'.
- ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
- as_ln_s='cp -p'
- elif ln conf$$.file conf$$ 2>/dev/null; then
- as_ln_s=ln
- else
- as_ln_s='cp -p'
- fi
-else
- as_ln_s='cp -p'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
- case $as_dir in #(
- -*) as_dir=./$as_dir;;
- esac
- test -d "$as_dir" || eval $as_mkdir_p || {
- as_dirs=
- while :; do
- case $as_dir in #(
- *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
- *) as_qdir=$as_dir;;
- esac
- as_dirs="'$as_qdir' $as_dirs"
- as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$as_dir" : 'X\(//\)[^/]' \| \
- X"$as_dir" : 'X\(//\)$' \| \
- X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- test -d "$as_dir" && break
- done
- test -z "$as_dirs" || eval "mkdir $as_dirs"
- } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
- as_mkdir_p='mkdir -p "$as_dir"'
-else
- test -d ./-p && rmdir ./-p
- as_mkdir_p=false
-fi
-
-if test -x / >/dev/null 2>&1; then
- as_test_x='test -x'
-else
- if ls -dL / >/dev/null 2>&1; then
- as_ls_L_option=L
- else
- as_ls_L_option=
- fi
- as_test_x='
- eval sh -c '\''
- if test -d "$1"; then
- test -d "$1/.";
- else
- case $1 in #(
- -*)set "./$1";;
- esac;
- case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
- ???[sx]*):;;*)false;;esac;fi
- '\'' sh
- '
-fi
-as_executable_p=$as_test_x
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by $as_me, which was
-generated by GNU Autoconf 2.64. Invocation command line was
-
- CONFIG_FILES = $CONFIG_FILES
- CONFIG_HEADERS = $CONFIG_HEADERS
- CONFIG_LINKS = $CONFIG_LINKS
- CONFIG_COMMANDS = $CONFIG_COMMANDS
- $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration. Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
- -h, --help print this help, then exit
- -V, --version print version number and configuration settings, then exit
- -q, --quiet, --silent
- do not print progress messages
- -d, --debug don't remove temporary files
- --recheck update $as_me by reconfiguring in the same conditions
- --file=FILE[:TEMPLATE]
- instantiate the configuration file FILE
- --header=FILE[:TEMPLATE]
- instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_version="\\
-config.status
-configured by $0, generated by GNU Autoconf 2.64,
- with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
-
-Copyright (C) 2009 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
- case $1 in
- --*=*)
- ac_option=`expr "X$1" : 'X\([^=]*\)='`
- ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
- ac_shift=:
- ;;
- *)
- ac_option=$1
- ac_optarg=$2
- ac_shift=shift
- ;;
- esac
-
- case $ac_option in
- # Handling of the options.
- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
- ac_cs_recheck=: ;;
- --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
- $as_echo "$ac_cs_version"; exit ;;
- --debug | --debu | --deb | --de | --d | -d )
- debug=: ;;
- --file | --fil | --fi | --f )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append CONFIG_FILES " '$ac_optarg'"
- ac_need_defaults=false;;
- --header | --heade | --head | --hea )
- $ac_shift
- case $ac_optarg in
- *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
- esac
- as_fn_append CONFIG_HEADERS " '$ac_optarg'"
- ac_need_defaults=false;;
- --he | --h)
- # Conflict between --help and --header
- as_fn_error "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
- --help | --hel | -h )
- $as_echo "$ac_cs_usage"; exit ;;
- -q | -quiet | --quiet | --quie | --qui | --qu | --q \
- | -silent | --silent | --silen | --sile | --sil | --si | --s)
- ac_cs_silent=: ;;
-
- # This is an error.
- -*) as_fn_error "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
- *) as_fn_append ac_config_targets " $1"
- ac_need_defaults=false ;;
-
- esac
- shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
- exec 6>/dev/null
- ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
- set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
- shift
- \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
- CONFIG_SHELL='$SHELL'
- export CONFIG_SHELL
- exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
- echo
- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
- $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#
-# INIT-COMMANDS
-#
-srcdir=${srcdir}
-host=${host}
-target=${target}
-with_target_subdir=${with_target_subdir}
-with_multisubdir=${with_multisubdir}
-ac_configure_args="--enable-multilib ${ac_configure_args}"
-CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
-libiberty_topdir=${libiberty_topdir}
-
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
- case $ac_config_target in
- "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h:config.in" ;;
- "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
- "testsuite/Makefile") CONFIG_FILES="$CONFIG_FILES testsuite/Makefile" ;;
- "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
-
- *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
- esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used. Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
- test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience. Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
- tmp=
- trap 'exit_status=$?
- { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
-' 0
- trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
- tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
- test -n "$tmp" && test -d "$tmp"
-} ||
-{
- tmp=./conf$$-$RANDOM
- (umask 077 && mkdir "$tmp")
-} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-if $AWK 'BEGIN { getline <"/dev/null" }' </dev/null 2>/dev/null; then
- ac_cs_awk_getline=:
- ac_cs_awk_pipe_init=
- ac_cs_awk_read_file='
- while ((getline aline < (F[key])) > 0)
- print(aline)
- close(F[key])'
- ac_cs_awk_pipe_fini=
-else
- ac_cs_awk_getline=false
- ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\""
- ac_cs_awk_read_file='
- print "|#_!!_#|"
- print "cat " F[key] " &&"
- '$ac_cs_awk_pipe_init
- # The final `:' finishes the AND list.
- ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }'
-fi
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
- eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
- ac_cs_awk_cr='\r'
-else
- ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$tmp/subs1.awk" &&
-_ACEOF
-
-# Create commands to substitute file output variables.
-{
- echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" &&
- echo 'cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&' &&
- echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' &&
- echo "_ACAWK" &&
- echo "_ACEOF"
-} >conf$$files.sh &&
-. ./conf$$files.sh ||
- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-rm -f conf$$files.sh
-
-{
- echo "cat >conf$$subs.awk <<_ACEOF" &&
- echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
- echo "_ACEOF"
-} >conf$$subs.sh ||
- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
- . ./conf$$subs.sh ||
- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
-
- ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
- if test $ac_delim_n = $ac_delim_num; then
- break
- elif $ac_last_try; then
- as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\).*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\).*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
- N
- s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$tmp/subs1.awk" <<_ACAWK &&
- for (key in S) S_is_set[key] = 1
- FS = ""
- \$ac_cs_awk_pipe_init
-}
-{
- line = $ 0
- nfields = split(line, field, "@")
- substed = 0
- len = length(field[1])
- for (i = 2; i < nfields; i++) {
- key = field[i]
- keylen = length(key)
- if (S_is_set[key]) {
- value = S[key]
- line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
- len += length(value) + length(field[++i])
- substed = 1
- } else
- len += 1 + keylen
- }
- if (nfields == 3 && !substed) {
- key = field[2]
- if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) {
- \$ac_cs_awk_read_file
- next
- }
- }
- print line
-}
-\$ac_cs_awk_pipe_fini
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
- sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
- cat
-fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
- || as_fn_error "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove $(srcdir),
-# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
- ac_vpsub='/^[ ]*VPATH[ ]*=/{
-s/:*\$(srcdir):*/:/
-s/:*\${srcdir}:*/:/
-s/:*@srcdir@:*/:/
-s/^\([^=]*=[ ]*\):*/\1/
-s/:*$//
-s/^[^=]*=[ ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
- ac_t=`sed -n "/$ac_delim/p" confdefs.h`
- if test -z "$ac_t"; then
- break
- elif $ac_last_try; then
- as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
- else
- ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
- fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any. Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[ ]*#[ ]*define[ ][ ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- for (key in D) D_is_set[key] = 1
- FS = ""
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
- line = \$ 0
- split(line, arg, " ")
- if (arg[1] == "#") {
- defundef = arg[2]
- mac1 = arg[3]
- } else {
- defundef = substr(arg[1], 2)
- mac1 = arg[2]
- }
- split(mac1, mac2, "(") #)
- macro = mac2[1]
- prefix = substr(line, 1, index(line, defundef) - 1)
- if (D_is_set[macro]) {
- # Preserve the white space surrounding the "#".
- print prefix "define", macro P[macro] D[macro]
- next
- } else {
- # Replace #undef with comments. This is necessary, for example,
- # in the case of _POSIX_SOURCE, which is predefined and required
- # on some systems where configure will not decide to define it.
- if (defundef == "undef") {
- print "/*", prefix defundef, macro, "*/"
- next
- }
- }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
- as_fn_error "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
-shift
-for ac_tag
-do
- case $ac_tag in
- :[FHLC]) ac_mode=$ac_tag; continue;;
- esac
- case $ac_mode$ac_tag in
- :[FHL]*:*);;
- :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
- :[FH]-) ac_tag=-:-;;
- :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
- esac
- ac_save_IFS=$IFS
- IFS=:
- set x $ac_tag
- IFS=$ac_save_IFS
- shift
- ac_file=$1
- shift
-
- case $ac_mode in
- :L) ac_source=$1;;
- :[FH])
- ac_file_inputs=
- for ac_f
- do
- case $ac_f in
- -) ac_f="$tmp/stdin";;
- *) # Look for the file first in the build tree, then in the source tree
- # (if the path is not absolute). The absolute path cannot be DOS-style,
- # because $ac_f cannot contain `:'.
- test -f "$ac_f" ||
- case $ac_f in
- [\\/$]*) false;;
- *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
- esac ||
- as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
- esac
- case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
- as_fn_append ac_file_inputs " '$ac_f'"
- done
-
- # Let's still pretend it is `configure' which instantiates (i.e., don't
- # use $as_me), people would be surprised to read:
- # /* config.h. Generated by config.status. */
- configure_input='Generated from '`
- $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
- `' by configure.'
- if test x"$ac_file" != x-; then
- configure_input="$ac_file. $configure_input"
- { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
- fi
- # Neutralize special characters interpreted by sed in replacement strings.
- case $configure_input in #(
- *\&* | *\|* | *\\* )
- ac_sed_conf_input=`$as_echo "$configure_input" |
- sed 's/[\\\\&|]/\\\\&/g'`;; #(
- *) ac_sed_conf_input=$configure_input;;
- esac
-
- case $ac_tag in
- *:-:* | *:-) cat >"$tmp/stdin" \
- || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
- esac
- ;;
- esac
-
- ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
- X"$ac_file" : 'X\(//\)[^/]' \| \
- X"$ac_file" : 'X\(//\)$' \| \
- X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
- sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
- s//\1/
- q
- }
- /^X\(\/\/\)[^/].*/{
- s//\1/
- q
- }
- /^X\(\/\/\)$/{
- s//\1/
- q
- }
- /^X\(\/\).*/{
- s//\1/
- q
- }
- s/.*/./; q'`
- as_dir="$ac_dir"; as_fn_mkdir_p
- ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
- ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
- # A ".." for each directory in $ac_dir_suffix.
- ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
- case $ac_top_builddir_sub in
- "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
- *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
- esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
- .) # We are building in place.
- ac_srcdir=.
- ac_top_srcdir=$ac_top_builddir_sub
- ac_abs_top_srcdir=$ac_pwd ;;
- [\\/]* | ?:[\\/]* ) # Absolute name.
- ac_srcdir=$srcdir$ac_dir_suffix;
- ac_top_srcdir=$srcdir
- ac_abs_top_srcdir=$srcdir ;;
- *) # Relative name.
- ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
- ac_top_srcdir=$ac_top_build_prefix$srcdir
- ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
- case $ac_mode in
- :F)
- #
- # CONFIG_FILE
- #
-
- case $INSTALL in
- [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
- *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
- esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
- p
- q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
- ac_datarootdir_hack='
- s&@datadir@&$datadir&g
- s&@docdir@&$docdir&g
- s&@infodir@&$infodir&g
- s&@localedir@&$localedir&g
- s&@mandir@&$mandir&g
- s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" |
-if $ac_cs_awk_getline; then
- $AWK -f "$tmp/subs.awk"
-else
- $AWK -f "$tmp/subs.awk" | $SHELL
-fi >$tmp/out \
- || as_fn_error "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
- { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
- { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined. Please make sure it is defined." >&2;}
-
- rm -f "$tmp/stdin"
- case $ac_file in
- -) cat "$tmp/out" && rm -f "$tmp/out";;
- *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
- esac \
- || as_fn_error "could not create $ac_file" "$LINENO" 5
- ;;
- :H)
- #
- # CONFIG_HEADER
- #
- if test x"$ac_file" != x-; then
- {
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
- } >"$tmp/config.h" \
- || as_fn_error "could not create $ac_file" "$LINENO" 5
- if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
- else
- rm -f "$ac_file"
- mv "$tmp/config.h" "$ac_file" \
- || as_fn_error "could not create $ac_file" "$LINENO" 5
- fi
- else
- $as_echo "/* $configure_input */" \
- && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
- || as_fn_error "could not create -" "$LINENO" 5
- fi
- ;;
-
- :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
- esac
-
-
- case $ac_file$ac_mode in
- "default":C) test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
-if test -n "$CONFIG_FILES"; then
- if test -n "${with_target_subdir}"; then
- # FIXME: We shouldn't need to set ac_file
- ac_file=Makefile
- LD="${ORIGINAL_LD_FOR_MULTILIBS}"
- . ${libiberty_topdir}/config-ml.in
- fi
-fi ;;
-
- esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
- as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded. So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status. When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
- ac_cs_success=:
- ac_config_status_args=
- test "$silent" = yes &&
- ac_config_status_args="$ac_config_status_args --quiet"
- exec 5>/dev/null
- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
- exec 5>>config.log
- # Use ||, not &&, to avoid exiting from the if with $? = 1, which
- # would make configure fail if this is the last instruction.
- $ac_cs_success || as_fn_exit $?
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/gcc-4.7/libiberty/configure.ac b/gcc-4.7/libiberty/configure.ac
deleted file mode 100644
index 754b66a06..000000000
--- a/gcc-4.7/libiberty/configure.ac
+++ /dev/null
@@ -1,717 +0,0 @@
-dnl Process this file with autoconf to produce a configure script
-
-AC_PREREQ(2.64)
-AC_INIT
-AC_CONFIG_SRCDIR([xmalloc.c])
-
-# This works around the fact that libtool configuration may change LD
-# for this particular configuration, but some shells, instead of
-# keeping the changes in LD private, export them just because LD is
-# exported. We don't use libtool yet, but some day we might, so...
-ORIGINAL_LD_FOR_MULTILIBS=$LD
-
-dnl We use these options to decide which functions to include.
-AC_ARG_WITH(target-subdir,
-[ --with-target-subdir=SUBDIR Configuring in a subdirectory for target])
-AC_ARG_WITH(build-subdir,
-[ --with-build-subdir=SUBDIR Configuring in a subdirectory for build])
-AC_ARG_WITH(cross-host,
-[ --with-cross-host=HOST Configuring with a cross compiler])
-AC_ARG_WITH(newlib,
-[ --with-newlib Configuring with newlib])
-
-if test "${srcdir}" = "."; then
- if test -n "${with_build_subdir}"; then
- libiberty_topdir="${srcdir}/../.."
- with_target_subdir=
- elif test -z "${with_target_subdir}"; then
- libiberty_topdir="${srcdir}/.."
- else
- if test "${with_target_subdir}" != "."; then
- libiberty_topdir="${srcdir}/${with_multisrctop}../.."
- else
- libiberty_topdir="${srcdir}/${with_multisrctop}.."
- fi
- fi
-else
- libiberty_topdir="${srcdir}/.."
-fi
-AC_SUBST(libiberty_topdir)
-AC_CONFIG_AUX_DIR($libiberty_topdir)
-
-dnl Very limited version of automake's enable-maintainer-mode
-
-AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles])
- dnl maintainer-mode is disabled by default
- AC_ARG_ENABLE(maintainer-mode,
-[ --enable-maintainer-mode
- enable make rules and dependencies not useful
- (and sometimes confusing) to the casual installer],
- maintainer_mode=$enableval,
- maintainer_mode=no)
-
-AC_MSG_RESULT($maintainer_mode)
-
-if test "$maintainer_mode" = "yes"; then
- MAINT=''
- NOTMAINT='#'
-else
- MAINT='#'
- NOTMAINT=''
-fi
-AC_SUBST(MAINT)dnl
-AC_SUBST(NOTMAINT)dnl
-
-# Do we have a single-tree copy of texinfo? Even if we do, we can't
-# rely on it - libiberty is built before texinfo.
-AC_CHECK_PROG(MAKEINFO, makeinfo, makeinfo, )
-if test "x$MAKEINFO" = "x"; then
- MAKEINFO="@echo makeinfo missing; true"
- BUILD_INFO=
-else
- BUILD_INFO=info
- case "$MAKEINFO" in
- */missing\ makeinfo*)
- BUILD_INFO=
- AC_MSG_WARN([
-*** Makeinfo is missing. Info documentation will not be built.])
- ;;
- *)
- case x"`$MAKEINFO --version | grep 'GNU texinfo'`" in
- x*\ [[1-3]].* )
- MAKEINFO="@echo $MAKEINFO is too old, 4.0 or newer required; true"
- BUILD_INFO=
- AC_MSG_WARN([
-*** Makeinfo is too old. Info documentation will not be built.])
- ;;
- esac
- ;;
- esac
-fi
-AC_SUBST(MAKEINFO)
-AC_SUBST(BUILD_INFO)
-
-AC_CHECK_PROG(PERL, perl, perl, )
-if test x"$PERL" = x""; then
- HAVE_PERL='#'
-else
- HAVE_PERL=''
-fi
-AC_SUBST(HAVE_PERL)
-
-AC_CANONICAL_HOST
-
-dnl When we start using automake:
-dnl AM_INIT_AUTOMAKE(libiberty, 1.0)
-
-dnl These must be called before AM_PROG_LIBTOOL, because it may want
-dnl to call AC_CHECK_PROG.
-AC_CHECK_TOOL(AR, ar)
-AC_CHECK_TOOL(RANLIB, ranlib, :)
-
-dnl When switching to automake, replace the following with AM_ENABLE_MULTILIB.
-# Add --enable-multilib to configure.
-# Default to --enable-multilib
-AC_ARG_ENABLE(multilib,
-[ --enable-multilib build many library versions (default)],
-[case "$enableval" in
- yes) multilib=yes ;;
- no) multilib=no ;;
- *) AC_MSG_ERROR([bad value $enableval for multilib option]) ;;
- esac],
- [multilib=yes])
-
-# Even if the default multilib is not a cross compilation,
-# it may be that some of the other multilibs are.
-if test $cross_compiling = no && test $multilib = yes \
- && test "x${with_multisubdir}" != x ; then
- cross_compiling=maybe
-fi
-
-GCC_NO_EXECUTABLES
-AC_PROG_CC
-AC_SYS_LARGEFILE
-AC_PROG_CPP_WERROR
-
-ACX_PROG_CC_WARNING_OPTS([-W -Wall -Wwrite-strings -Wc++-compat \
- -Wstrict-prototypes], [ac_libiberty_warn_cflags])
-ACX_PROG_CC_WARNING_ALMOST_PEDANTIC([], [ac_libiberty_warn_cflags])
-
-AC_PROG_CC_C_O
-# autoconf is lame and doesn't give us any substitution variable for this.
-if eval "test \"`echo '$ac_cv_prog_cc_'${ac_cc}_c_o`\" = no"; then
- NO_MINUS_C_MINUS_O=yes
-else
- OUTPUT_OPTION='-o $@'
-fi
-AC_SUBST(NO_MINUS_C_MINUS_O)
-AC_SUBST(OUTPUT_OPTION)
-
-AC_C_CONST
-AC_C_INLINE
-AC_C_BIGENDIAN
-
-dnl When we start using libtool:
-dnl Default to a non shared library. This may be overridden by the
-dnl configure option --enable-shared.
-dnl AM_DISABLE_SHARED
-
-dnl When we start using libtool:
-dnl AM_PROG_LIBTOOL
-
-dnl When we start using automake:
-dnl AM_CONFIG_HEADER(config.h:config.in)
-AC_CONFIG_HEADER(config.h:config.in)
-
-dnl When we start using automake:
-dnl AM_MAINTAINER_MODE
-dnl AC_EXEEXT
-
-dnl When we start using automake:
-dnl AM_PROG_INSTALL
-AC_PROG_INSTALL
-
-# Don't build the shared library for build.
-if [[ -n "${with_build_subdir}" ]]; then
- enable_shared=no
-fi
-
-frag=
-case "${host}" in
- rs6000-ibm-aix3.1 | rs6000-ibm-aix)
- frag=mh-aix ;;
- *-*-cxux7*) frag=mh-cxux7 ;;
- *-*-freebsd2.1.*) frag=mh-fbsd21 ;;
- *-*-freebsd2.2.[[012]]) frag=mh-fbsd21 ;;
- i370-*-opened*) frag=mh-openedition ;;
- i[[34567]]86-*-windows*) frag=mh-windows ;;
-esac
-
-if [[ -n "${frag}" ]]; then
- frag=${libiberty_topdir}/libiberty/config/$frag
-fi
-
-GCC_PICFLAG
-
-# If they didn't specify --enable-shared, don't generate shared libs.
-case "${enable_shared}" in
- yes) shared=yes ;;
- no) shared=no ;;
- "") shared=no ;;
- *) shared=yes ;;
-esac
-if [[ "${shared}" != "yes" ]]; then
- PICFLAG=
-fi
-AC_SUBST(PICFLAG)
-
-echo "# Warning: this fragment is automatically generated" > temp-frag
-
-if [[ -n "${frag}" ]] && [[ -f "${frag}" ]]; then
- echo "Appending ${frag} to xhost-mkfrag"
- echo "# Following fragment copied from ${frag}" >> temp-frag
- cat ${frag} >> temp-frag
-fi
-
-# record if we want to build shared libs.
-if [[ "${shared}" = "yes" ]]; then
- echo enable_shared = yes >> temp-frag
-else
- echo enable_shared = no >> temp-frag
-fi
-
-frag=xhost-mkfrag
-${CONFIG_SHELL-/bin/sh} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag
-
-host_makefile_frag=${frag}
-AC_SUBST_FILE(host_makefile_frag)
-
-# It's OK to check for header files. Although the compiler may not be
-# able to link anything, it had better be able to at least compile
-# something.
-AC_CHECK_HEADERS(sys/file.h sys/param.h limits.h stdlib.h malloc.h string.h unistd.h strings.h sys/time.h time.h sys/resource.h sys/stat.h sys/mman.h fcntl.h alloca.h sys/pstat.h sys/sysmp.h sys/sysinfo.h machine/hal_sysinfo.h sys/table.h sys/sysctl.h sys/systemcfg.h stdint.h stdio_ext.h process.h sys/prctl.h)
-AC_HEADER_SYS_WAIT
-AC_HEADER_TIME
-
-libiberty_AC_DECLARE_ERRNO
-
-# Determine the size of an int for struct fibnode.
-AC_CHECK_SIZEOF([int])
-
-# Look for a 64-bit type.
-AC_MSG_CHECKING([for a 64-bit type])
-AC_CACHE_VAL(liberty_cv_uint64,
-[AC_TRY_COMPILE(
-[#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif],
-[extern uint64_t foo;],
-liberty_cv_uint64=uint64_t,
-[AC_TRY_COMPILE(
-[#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifndef CHAR_BIT
-#define CHAR_BIT 8
-#endif],
-[extern char foo[sizeof(long) * CHAR_BIT >= 64 ? 1 : -1];],
-liberty_cv_uint64="unsigned long",
-[AC_TRY_COMPILE(
-[#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifndef CHAR_BIT
-#define CHAR_BIT 8
-#endif],
-[extern char foo[sizeof(long long) * CHAR_BIT >= 64 ? 1 : -1];],
-liberty_cv_uint64="unsigned long long", liberty_cv_uint64=none)])])])
-AC_MSG_RESULT($liberty_cv_uint64)
-if test "$liberty_cv_uint64" != none; then
- AC_DEFINE_UNQUOTED(UNSIGNED_64BIT_TYPE, $liberty_cv_uint64,
- [Define to an unsigned 64-bit type available in the compiler.])
-fi
-
-AC_TYPE_INTPTR_T
-AC_TYPE_UINTPTR_T
-AC_TYPE_SSIZE_T
-
-# Given the above check, we always have uintptr_t or a fallback
-# definition. So define HAVE_UINTPTR_T in case any imported code
-# relies on it.
-AC_DEFINE(HAVE_UINTPTR_T, 1, [Define if you have the \`uintptr_t' type.])
-
-AC_TYPE_PID_T
-
-# This is the list of functions which libiberty will provide if they
-# are not available on the host.
-
-funcs="asprintf"
-funcs="$funcs atexit"
-funcs="$funcs basename"
-funcs="$funcs bcmp"
-funcs="$funcs bcopy"
-funcs="$funcs bsearch"
-funcs="$funcs bzero"
-funcs="$funcs calloc"
-funcs="$funcs clock"
-funcs="$funcs ffs"
-funcs="$funcs getcwd"
-funcs="$funcs getpagesize"
-funcs="$funcs gettimeofday"
-funcs="$funcs index"
-funcs="$funcs insque"
-funcs="$funcs memchr"
-funcs="$funcs memcmp"
-funcs="$funcs memcpy"
-funcs="$funcs memmem"
-funcs="$funcs memmove"
-funcs="$funcs mempcpy"
-funcs="$funcs memset"
-funcs="$funcs mkstemps"
-funcs="$funcs putenv"
-funcs="$funcs random"
-funcs="$funcs rename"
-funcs="$funcs rindex"
-funcs="$funcs setenv"
-funcs="$funcs snprintf"
-funcs="$funcs sigsetmask"
-funcs="$funcs stpcpy"
-funcs="$funcs stpncpy"
-funcs="$funcs strcasecmp"
-funcs="$funcs strchr"
-funcs="$funcs strdup"
-funcs="$funcs strncasecmp"
-funcs="$funcs strndup"
-funcs="$funcs strrchr"
-funcs="$funcs strstr"
-funcs="$funcs strtod"
-funcs="$funcs strtol"
-funcs="$funcs strtoul"
-funcs="$funcs strverscmp"
-funcs="$funcs tmpnam"
-funcs="$funcs vasprintf"
-funcs="$funcs vfprintf"
-funcs="$funcs vprintf"
-funcs="$funcs vsnprintf"
-funcs="$funcs vsprintf"
-funcs="$funcs waitpid"
-funcs="$funcs setproctitle"
-
-# Also in the old function.def file: alloca, vfork, getopt.
-
-vars="sys_errlist sys_nerr sys_siglist"
-
-checkfuncs="__fsetlocking canonicalize_file_name dup3 getrlimit getrusage \
- getsysinfo gettimeofday on_exit psignal pstat_getdynamic pstat_getstatic \
- realpath setrlimit sbrk spawnve spawnvpe strerror strsignal sysconf sysctl \
- sysmp table times wait3 wait4"
-
-# These are neither executed nor required, but they help keep
-# autoheader happy without adding a bunch of text to acconfig.h.
-if test "x" = "y"; then
- AC_CHECK_FUNCS(asprintf atexit \
- basename bcmp bcopy bsearch bzero \
- calloc canonicalize_file_name clock \
- dup3 \
- ffs __fsetlocking \
- getcwd getpagesize getrlimit getrusage getsysinfo gettimeofday \
- index insque \
- memchr memcmp memcpy memmem memmove memset mkstemps \
- on_exit \
- psignal pstat_getdynamic pstat_getstatic putenv \
- random realpath rename rindex \
- sbrk setenv setproctitle setrlimit sigsetmask snprintf spawnve spawnvpe \
- stpcpy stpncpy strcasecmp strchr strdup \
- strerror strncasecmp strndup strrchr strsignal strstr strtod strtol \
- strtoul strverscmp sysconf sysctl sysmp \
- table times tmpnam \
- vasprintf vfprintf vprintf vsprintf \
- wait3 wait4 waitpid)
- AC_CHECK_DECLS([basename(char *), ffs, asprintf, vasprintf, snprintf, vsnprintf])
- AC_DEFINE(HAVE_SYS_ERRLIST, 1, [Define if you have the sys_errlist variable.])
- AC_DEFINE(HAVE_SYS_NERR, 1, [Define if you have the sys_nerr variable.])
- AC_DEFINE(HAVE_SYS_SIGLIST, 1, [Define if you have the sys_siglist variable.])
-fi
-
-# For each of these functions, if the host does not provide the
-# function we want to put FN.o in LIBOBJS, and if the host does
-# provide the function, we want to define HAVE_FN in config.h.
-
-setobjs=
-CHECK=
-target_header_dir=
-if test -n "${with_target_subdir}"; then
-
- # We are being configured as a target library. AC_REPLACE_FUNCS
- # may not work correctly, because the compiler may not be able to
- # link executables. Note that we may still be being configured
- # native.
-
- # If we are being configured for newlib, we know which functions
- # newlib provide and which ones we will be expected to provide.
-
- if test "x${with_newlib}" = "xyes"; then
- AC_LIBOBJ([asprintf])
- AC_LIBOBJ([basename])
- AC_LIBOBJ([insque])
- AC_LIBOBJ([random])
- AC_LIBOBJ([strdup])
- AC_LIBOBJ([vasprintf])
-
- for f in $funcs; do
- case "$f" in
- asprintf | basename | insque | random | strdup | vasprintf)
- ;;
- *)
- n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- AC_DEFINE_UNQUOTED($n)
- ;;
- esac
- done
-
- # newlib doesnt provide any of the variables in $vars, so we
- # dont have to check them here.
-
- # Of the functions in $checkfuncs, newlib only has strerror.
- AC_DEFINE(HAVE_STRERROR)
-
- setobjs=yes
-
- fi
-
- # If we are being configured for Mingw, we know which functions
- # Mingw provides and which ones we will be expected to provide.
-
- case "${host}" in
- *-*-mingw*)
- AC_LIBOBJ([asprintf])
- AC_LIBOBJ([basename])
- AC_LIBOBJ([bcmp])
- AC_LIBOBJ([bcopy])
- AC_LIBOBJ([bzero])
- AC_LIBOBJ([clock])
- AC_LIBOBJ([ffs])
- AC_LIBOBJ([getpagesize])
- AC_LIBOBJ([index])
- AC_LIBOBJ([insque])
- AC_LIBOBJ([mempcpy])
- AC_LIBOBJ([mkstemps])
- AC_LIBOBJ([random])
- AC_LIBOBJ([rindex])
- AC_LIBOBJ([sigsetmask])
- AC_LIBOBJ([stpcpy])
- AC_LIBOBJ([stpncpy])
- AC_LIBOBJ([strndup])
- AC_LIBOBJ([strverscmp])
- AC_LIBOBJ([vasprintf])
- AC_LIBOBJ([waitpid])
-
- for f in $funcs; do
- case "$f" in
- asprintf | basename | bcmp | bcopy | bzero | clock | ffs | getpagesize | index | insque | mempcpy | mkstemps | random | rindex | sigsetmask | stpcpy | stpncpy | strdup | strndup | strverscmp | vasprintf | waitpid)
- ;;
- *)
- n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- AC_DEFINE_UNQUOTED($n)
- ;;
- esac
- done
-
- # Mingw doesnt provide any of the variables in $vars, so we
- # dont have to check them here.
-
- # Of the functions in $checkfuncs, Mingw only has strerror.
- AC_DEFINE(HAVE_STRERROR)
-
- setobjs=yes
- ;;
-
- *-*-msdosdjgpp)
- AC_LIBOBJ([vasprintf])
- AC_LIBOBJ([vsnprintf])
- AC_LIBOBJ([snprintf])
- AC_LIBOBJ([asprintf])
-
- for f in atexit basename bcmp bcopy bsearch bzero calloc clock ffs \
- getcwd getpagesize getrusage gettimeofday \
- index insque memchr memcmp memcpy memmove memset psignal \
- putenv random rename rindex sbrk setenv stpcpy strcasecmp \
- strchr strdup strerror strncasecmp strrchr strstr strtod \
- strtol strtoul sysconf times tmpnam vfprintf vprintf \
- vsprintf waitpid
- do
- n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- AC_DEFINE_UNQUOTED($n)
- done
-
-
- setobjs=yes
- ;;
-
- esac
-
- # We may wish to install the target headers somewhere.
- AC_ARG_ENABLE(install-libiberty,
- [ --enable-install-libiberty Install headers for end users],
- enable_install_libiberty=$enableval,
- enable_install_libiberty=no)dnl
-
- # Option parsed, now set things appropriately.
- case x"$enable_install_libiberty" in
- xyes|x)
- target_header_dir=libiberty
- ;;
- xno)
- target_header_dir=
- ;;
- *)
- # This could be sanity-checked in various ways...
- target_header_dir="${enable_install_libiberty}"
- ;;
- esac
-
-
-else
-
- # Not a target library, so we set things up to run the test suite.
- CHECK=really-check
-
-fi
-
-AC_SUBST(CHECK)
-AC_SUBST(target_header_dir)
-
-case "${host}" in
- *-*-cygwin* | *-*-mingw*)
- AC_DEFINE(HAVE_SYS_ERRLIST)
- AC_DEFINE(HAVE_SYS_NERR)
- ;;
-esac
-
-if test -z "${setobjs}"; then
- case "${host}" in
-
- *-*-vxworks*)
- # Handle VxWorks configuration specially, since on VxWorks the
- # libraries are actually on the target board, not in the file
- # system.
- AC_LIBOBJ([basename])
- AC_LIBOBJ([getpagesize])
- AC_LIBOBJ([insque])
- AC_LIBOBJ([random])
- AC_LIBOBJ([strcasecmp])
- AC_LIBOBJ([strncasecmp])
- AC_LIBOBJ([strdup])
- AC_LIBOBJ([vfork])
- AC_LIBOBJ([waitpid])
- AC_LIBOBJ([vasprintf])
- for f in $funcs; do
- case "$f" in
- basename | getpagesize | insque | random | strcasecmp)
- ;;
- strncasecmp | strdup | vfork | waitpid | vasprintf)
- ;;
- *)
- n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- AC_DEFINE_UNQUOTED($n)
- ;;
- esac
- done
-
- # VxWorks doesn't provide any of the variables in $vars, so we
- # don't have to check them here.
-
- # Of the functions in $checkfuncs, VxWorks only has strerror.
- AC_DEFINE(HAVE_STRERROR)
-
- setobjs=yes
- ;;
-
- esac
-fi
-
-if test -z "${setobjs}"; then
-
- case "${host}" in
-
- *-*-mingw32*)
- # Under mingw32, sys_nerr and sys_errlist exist, but they are
- # macros, so the test below won't find them.
- libiberty_cv_var_sys_nerr=yes
- libiberty_cv_var_sys_errlist=yes
- ;;
-
- *-*-msdosdjgpp*)
- # vfork and fork are stubs.
- ac_cv_func_vfork_works=no
- ;;
-
- *-*-uwin*)
- # Under some versions of uwin, vfork is notoriously buggy and the test
- # can hang configure; on other versions, vfork exists just as a stub.
- # FIXME: This should be removed once vfork in uwin's runtime is fixed.
- ac_cv_func_vfork_works=no
- # Under uwin 2.0+, sys_nerr and sys_errlist exist, but they are
- # macros (actually, these are imported from a DLL, but the end effect
- # is the same), so the test below won't find them.
- libiberty_cv_var_sys_nerr=yes
- libiberty_cv_var_sys_errlist=yes
- ;;
-
- *-*-*vms*)
- # Under VMS, vfork works very different than on Unix. The standard test
- # won't work, and it isn't easily adaptable. It makes more sense to
- # just force it.
- ac_cv_func_vfork_works=yes
- ;;
-
- esac
-
- # We haven't set the list of objects yet. Use the standard autoconf
- # tests. This will only work if the compiler works.
- AC_ISC_POSIX
- AC_REPLACE_FUNCS($funcs)
- libiberty_AC_FUNC_C_ALLOCA
- AC_FUNC_FORK
- if test $ac_cv_func_vfork_works = no; then
- AC_LIBOBJ([vfork])
- fi
- # We only need _doprnt if we might use it to implement v*printf.
- if test $ac_cv_func_vprintf != yes \
- || test $ac_cv_func_vfprintf != yes \
- || test $ac_cv_func_vsprintf != yes; then
- AC_REPLACE_FUNCS(_doprnt)
- else
- AC_CHECK_FUNCS(_doprnt)
- fi
-
- for v in $vars; do
- AC_MSG_CHECKING([for $v])
- AC_CACHE_VAL(libiberty_cv_var_$v,
- [AC_LINK_IFELSE([AC_LANG_PROGRAM([[int *p;]],[[extern int $v []; p = $v;]])],
- [eval "libiberty_cv_var_$v=yes"],
- [eval "libiberty_cv_var_$v=no"])])
- if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then
- AC_MSG_RESULT(yes)
- n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
- AC_DEFINE_UNQUOTED($n)
- else
- AC_MSG_RESULT(no)
- fi
- done
-
- # special check for _system_configuration because AIX <4.3.2 do not
- # contain the `physmem' member.
- AC_MSG_CHECKING([for external symbol _system_configuration])
- AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/systemcfg.h>]],
- [[double x = _system_configuration.physmem;]])],
- [AC_MSG_RESULT([yes])
- AC_DEFINE(HAVE__SYSTEM_CONFIGURATION, 1,
- [Define if you have the _system_configuration variable.])],
- [AC_MSG_RESULT([no])])
-
- AC_CHECK_FUNCS($checkfuncs)
- AC_CHECK_DECLS([basename(char *), ffs, asprintf, vasprintf, snprintf, vsnprintf])
- AC_CHECK_DECLS([calloc, getenv, getopt, malloc, realloc, sbrk])
- AC_CHECK_DECLS([strverscmp])
- libiberty_NEED_DECLARATION(canonicalize_file_name)
-fi
-
-# Figure out which version of pexecute to use.
-case "${host}" in
- *-*-mingw* | *-*-winnt*) pexecute=pex-win32 ;;
- *-*-msdosdjgpp*) pexecute=pex-djgpp ;;
- *-*-msdos*) pexecute=pex-msdos ;;
- *) pexecute=pex-unix ;;
-esac
-AC_SUBST(pexecute)
-
-libiberty_AC_FUNC_STRNCMP
-
-# Install a library built with a cross compiler in $(tooldir) rather
-# than $(libdir).
-if test -z "${with_cross_host}"; then
- INSTALL_DEST=libdir
-else
- INSTALL_DEST=tooldir
-fi
-AC_SUBST(INSTALL_DEST)
-
-m4_pattern_allow(LIBOBJS)
-L=""
-for l in x $LIBOBJS; do
- case $l in
- x) ;;
- *) L="$L ./$l" ;;
- esac
-done
-LIBOBJS="$L"
-
-dnl Required by html and install-html
-AC_SUBST(datarootdir)
-AC_SUBST(docdir)
-AC_SUBST(htmldir)
-
-# We need multilib support, but only if configuring for the target.
-AC_CONFIG_FILES([Makefile testsuite/Makefile])
-AC_CONFIG_COMMANDS([default],
- [[test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h
-if test -n "$CONFIG_FILES"; then
- if test -n "${with_target_subdir}"; then
- # FIXME: We shouldn't need to set ac_file
- ac_file=Makefile
- LD="${ORIGINAL_LD_FOR_MULTILIBS}"
- . ${libiberty_topdir}/config-ml.in
- fi
-fi]],
-[[srcdir=${srcdir}
-host=${host}
-target=${target}
-with_target_subdir=${with_target_subdir}
-with_multisubdir=${with_multisubdir}
-ac_configure_args="--enable-multilib ${ac_configure_args}"
-CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
-ORIGINAL_LD_FOR_MULTILIBS="${ORIGINAL_LD_FOR_MULTILIBS}"
-libiberty_topdir=${libiberty_topdir}
-]])
-AC_OUTPUT
diff --git a/gcc-4.7/libiberty/configure.com b/gcc-4.7/libiberty/configure.com
deleted file mode 100644
index 030182914..000000000
--- a/gcc-4.7/libiberty/configure.com
+++ /dev/null
@@ -1,38 +0,0 @@
-$!
-$! This file configures the libiberty library for use with openVMS.
-$!
-$! We do not use the configure script, since we do not have /bin/sh
-$! to execute it.
-$!
-$! Written by Tristan Gingold (gingold@adacore.com)
-$!
-$!
-$!
-$ copy config.h-vms config.h
-$!
-$ write sys$output "Generate libiberty build.com"
-$!
-$ create build.com
-$DECK
-$ FILES="getopt,obstack,xexit,xmalloc,hex,getopt1,cplus-dem,cp-demangle,"+-
- "cp-demint,asprintf,vasprintf,mkstemps,concat,getruntime,getpagesize,"+-
- "getpwd,xstrerror,xmemdup,xstrdup,xatexit,choose-temp,fnmatch,objalloc,"+-
- "safe-ctype,hashtab,lbasename,argv,lrealpath,make-temp-file,"+-
- "stpcpy,unlink-if-ordinary"
-$ OPT="/noopt/debug/warnings=disable=(missingreturn)"
-$ CFLAGS=OPT + "/include=([],[-.include])/name=(as_is,shortened)" +-
- "/define=(HAVE_CONFIG_H=1)" +-
- "/prefix=(all,exc=(""getopt"",""optarg"",""optopt"",""optind"",""opterr""))"
-$ write sys$output "CFLAGS=",CFLAGS
-$ NUM = 0
-$ LOOP:
-$ F = F$ELEMENT(NUM,",",FILES)
-$ IF F.EQS."," THEN GOTO END
-$ write sys$output "Compiling ", F, ".c"
-$ cc 'CFLAGS 'F.c
-$ NUM = NUM + 1
-$ GOTO LOOP
-$ END:
-$ purge
-$ lib/create libiberty 'FILES
-$EOD
diff --git a/gcc-4.7/libiberty/copying-lib.texi b/gcc-4.7/libiberty/copying-lib.texi
deleted file mode 100644
index 79e103878..000000000
--- a/gcc-4.7/libiberty/copying-lib.texi
+++ /dev/null
@@ -1,565 +0,0 @@
-@node Library Copying
-@appendixsec GNU LESSER GENERAL PUBLIC LICENSE
-
-@cindex LGPL, Lesser General Public License
-@center Version 2.1, February 1999
-
-@display
-Copyright @copyright{} 1991, 1999 Free Software Foundation, Inc.
-51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-
-[This is the first released version of the Lesser GPL. It also counts
-as the successor of the GNU Library Public License, version 2, hence the
-version number 2.1.]
-@end display
-
-@appendixsubsec Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-Licenses are intended to guarantee your freedom to share and change
-free software---to make sure the software is free for all its users.
-
- This license, the Lesser General Public License, applies to some
-specially designated software---typically libraries---of the Free
-Software Foundation and other authors who decide to use it. You can use
-it too, but we suggest you first think carefully about whether this
-license or the ordinary General Public License is the better strategy to
-use in any particular case, based on the explanations below.
-
- When we speak of free software, we are referring to freedom of use,
-not price. Our General Public Licenses are designed to make sure that
-you have the freedom to distribute copies of free software (and charge
-for this service if you wish); that you receive source code or can get
-it if you want it; that you can change the software and use pieces of it
-in new free programs; and that you are informed that you can do these
-things.
-
- To protect your rights, we need to make restrictions that forbid
-distributors to deny you these rights or to ask you to surrender these
-rights. These restrictions translate to certain responsibilities for
-you if you distribute copies of the library or if you modify it.
-
- For example, if you distribute copies of the library, whether gratis
-or for a fee, you must give the recipients all the rights that we gave
-you. You must make sure that they, too, receive or can get the source
-code. If you link other code with the library, you must provide
-complete object files to the recipients, so that they can relink them
-with the library after making changes to the library and recompiling
-it. And you must show them these terms so they know their rights.
-
- We protect your rights with a two-step method: (1) we copyright the
-library, and (2) we offer you this license, which gives you legal
-permission to copy, distribute and/or modify the library.
-
- To protect each distributor, we want to make it very clear that
-there is no warranty for the free library. Also, if the library is
-modified by someone else and passed on, the recipients should know
-that what they have is not the original version, so that the original
-author's reputation will not be affected by problems that might be
-introduced by others.
-
- Finally, software patents pose a constant threat to the existence of
-any free program. We wish to make sure that a company cannot
-effectively restrict the users of a free program by obtaining a
-restrictive license from a patent holder. Therefore, we insist that
-any patent license obtained for a version of the library must be
-consistent with the full freedom of use specified in this license.
-
- Most GNU software, including some libraries, is covered by the
-ordinary GNU General Public License. This license, the GNU Lesser
-General Public License, applies to certain designated libraries, and
-is quite different from the ordinary General Public License. We use
-this license for certain libraries in order to permit linking those
-libraries into non-free programs.
-
- When a program is linked with a library, whether statically or using
-a shared library, the combination of the two is legally speaking a
-combined work, a derivative of the original library. The ordinary
-General Public License therefore permits such linking only if the
-entire combination fits its criteria of freedom. The Lesser General
-Public License permits more lax criteria for linking other code with
-the library.
-
- We call this license the @dfn{Lesser} General Public License because it
-does @emph{Less} to protect the user's freedom than the ordinary General
-Public License. It also provides other free software developers Less
-of an advantage over competing non-free programs. These disadvantages
-are the reason we use the ordinary General Public License for many
-libraries. However, the Lesser license provides advantages in certain
-special circumstances.
-
- For example, on rare occasions, there may be a special need to
-encourage the widest possible use of a certain library, so that it becomes
-a de-facto standard. To achieve this, non-free programs must be
-allowed to use the library. A more frequent case is that a free
-library does the same job as widely used non-free libraries. In this
-case, there is little to gain by limiting the free library to free
-software only, so we use the Lesser General Public License.
-
- In other cases, permission to use a particular library in non-free
-programs enables a greater number of people to use a large body of
-free software. For example, permission to use the GNU C Library in
-non-free programs enables many more people to use the whole GNU
-operating system, as well as its variant, the GNU/Linux operating
-system.
-
- Although the Lesser General Public License is Less protective of the
-users' freedom, it does ensure that the user of a program that is
-linked with the Library has the freedom and the wherewithal to run
-that program using a modified version of the Library.
-
- The precise terms and conditions for copying, distribution and
-modification follow. Pay close attention to the difference between a
-``work based on the library'' and a ``work that uses the library''. The
-former contains code derived from the library, whereas the latter must
-be combined with the library in order to run.
-
-@iftex
-@appendixsubsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end iftex
-@ifinfo
-@center GNU LESSER GENERAL PUBLIC LICENSE
-@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end ifinfo
-
-@enumerate 0
-@item
-This License Agreement applies to any software library or other program
-which contains a notice placed by the copyright holder or other
-authorized party saying it may be distributed under the terms of this
-Lesser General Public License (also called ``this License''). Each
-licensee is addressed as ``you''.
-
- A ``library'' means a collection of software functions and/or data
-prepared so as to be conveniently linked with application programs
-(which use some of those functions and data) to form executables.
-
- The ``Library'', below, refers to any such software library or work
-which has been distributed under these terms. A ``work based on the
-Library'' means either the Library or any derivative work under
-copyright law: that is to say, a work containing the Library or a
-portion of it, either verbatim or with modifications and/or translated
-straightforwardly into another language. (Hereinafter, translation is
-included without limitation in the term ``modification''.)
-
- ``Source code'' for a work means the preferred form of the work for
-making modifications to it. For a library, complete source code means
-all the source code for all modules it contains, plus any associated
-interface definition files, plus the scripts used to control compilation
-and installation of the library.
-
- Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running a program using the Library is not restricted, and output from
-such a program is covered only if its contents constitute a work based
-on the Library (independent of the use of the Library in a tool for
-writing it). Whether that is true depends on what the Library does
-and what the program that uses the Library does.
-
-@item
-You may copy and distribute verbatim copies of the Library's
-complete source code as you receive it, in any medium, provided that
-you conspicuously and appropriately publish on each copy an
-appropriate copyright notice and disclaimer of warranty; keep intact
-all the notices that refer to this License and to the absence of any
-warranty; and distribute a copy of this License along with the
-Library.
-
- You may charge a fee for the physical act of transferring a copy,
-and you may at your option offer warranty protection in exchange for a
-fee.
-
-@item
-You may modify your copy or copies of the Library or any portion
-of it, thus forming a work based on the Library, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-@enumerate a
-@item
-The modified work must itself be a software library.
-
-@item
-You must cause the files modified to carry prominent notices
-stating that you changed the files and the date of any change.
-
-@item
-You must cause the whole of the work to be licensed at no
-charge to all third parties under the terms of this License.
-
-@item
-If a facility in the modified Library refers to a function or a
-table of data to be supplied by an application program that uses
-the facility, other than as an argument passed when the facility
-is invoked, then you must make a good faith effort to ensure that,
-in the event an application does not supply such function or
-table, the facility still operates, and performs whatever part of
-its purpose remains meaningful.
-
-(For example, a function in a library to compute square roots has
-a purpose that is entirely well-defined independent of the
-application. Therefore, Subsection 2d requires that any
-application-supplied function or table used by this function must
-be optional: if the application does not supply it, the square
-root function must still compute square roots.)
-@end enumerate
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Library,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Library, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote
-it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Library.
-
-In addition, mere aggregation of another work not based on the Library
-with the Library (or with a work based on the Library) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-@item
-You may opt to apply the terms of the ordinary GNU General Public
-License instead of this License to a given copy of the Library. To do
-this, you must alter all the notices that refer to this License, so
-that they refer to the ordinary GNU General Public License, version 2,
-instead of to this License. (If a newer version than version 2 of the
-ordinary GNU General Public License has appeared, then you can specify
-that version instead if you wish.) Do not make any other change in
-these notices.
-
- Once this change is made in a given copy, it is irreversible for
-that copy, so the ordinary GNU General Public License applies to all
-subsequent copies and derivative works made from that copy.
-
- This option is useful when you wish to copy part of the code of
-the Library into a program that is not a library.
-
-@item
-You may copy and distribute the Library (or a portion or
-derivative of it, under Section 2) in object code or executable form
-under the terms of Sections 1 and 2 above provided that you accompany
-it with the complete corresponding machine-readable source code, which
-must be distributed under the terms of Sections 1 and 2 above on a
-medium customarily used for software interchange.
-
- If distribution of object code is made by offering access to copy
-from a designated place, then offering equivalent access to copy the
-source code from the same place satisfies the requirement to
-distribute the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-@item
-A program that contains no derivative of any portion of the
-Library, but is designed to work with the Library by being compiled or
-linked with it, is called a ``work that uses the Library''. Such a
-work, in isolation, is not a derivative work of the Library, and
-therefore falls outside the scope of this License.
-
- However, linking a ``work that uses the Library'' with the Library
-creates an executable that is a derivative of the Library (because it
-contains portions of the Library), rather than a ``work that uses the
-library''. The executable is therefore covered by this License.
-Section 6 states terms for distribution of such executables.
-
- When a ``work that uses the Library'' uses material from a header file
-that is part of the Library, the object code for the work may be a
-derivative work of the Library even though the source code is not.
-Whether this is true is especially significant if the work can be
-linked without the Library, or if the work is itself a library. The
-threshold for this to be true is not precisely defined by law.
-
- If such an object file uses only numerical parameters, data
-structure layouts and accessors, and small macros and small inline
-functions (ten lines or less in length), then the use of the object
-file is unrestricted, regardless of whether it is legally a derivative
-work. (Executables containing this object code plus portions of the
-Library will still fall under Section 6.)
-
- Otherwise, if the work is a derivative of the Library, you may
-distribute the object code for the work under the terms of Section 6.
-Any executables containing that work also fall under Section 6,
-whether or not they are linked directly with the Library itself.
-
-@item
-As an exception to the Sections above, you may also combine or
-link a ``work that uses the Library'' with the Library to produce a
-work containing portions of the Library, and distribute that work
-under terms of your choice, provided that the terms permit
-modification of the work for the customer's own use and reverse
-engineering for debugging such modifications.
-
- You must give prominent notice with each copy of the work that the
-Library is used in it and that the Library and its use are covered by
-this License. You must supply a copy of this License. If the work
-during execution displays copyright notices, you must include the
-copyright notice for the Library among them, as well as a reference
-directing the user to the copy of this License. Also, you must do one
-of these things:
-
-@enumerate a
-@item
-Accompany the work with the complete corresponding
-machine-readable source code for the Library including whatever
-changes were used in the work (which must be distributed under
-Sections 1 and 2 above); and, if the work is an executable linked
-with the Library, with the complete machine-readable ``work that
-uses the Library'', as object code and/or source code, so that the
-user can modify the Library and then relink to produce a modified
-executable containing the modified Library. (It is understood
-that the user who changes the contents of definitions files in the
-Library will not necessarily be able to recompile the application
-to use the modified definitions.)
-
-@item
-Use a suitable shared library mechanism for linking with the Library. A
-suitable mechanism is one that (1) uses at run time a copy of the
-library already present on the user's computer system, rather than
-copying library functions into the executable, and (2) will operate
-properly with a modified version of the library, if the user installs
-one, as long as the modified version is interface-compatible with the
-version that the work was made with.
-
-@item
-Accompany the work with a written offer, valid for at
-least three years, to give the same user the materials
-specified in Subsection 6a, above, for a charge no more
-than the cost of performing this distribution.
-
-@item
-If distribution of the work is made by offering access to copy
-from a designated place, offer equivalent access to copy the above
-specified materials from the same place.
-
-@item
-Verify that the user has already received a copy of these
-materials or that you have already sent this user a copy.
-@end enumerate
-
- For an executable, the required form of the ``work that uses the
-Library'' must include any data and utility programs needed for
-reproducing the executable from it. However, as a special exception,
-the materials to be distributed need not include anything that is
-normally distributed (in either source or binary form) with the major
-components (compiler, kernel, and so on) of the operating system on
-which the executable runs, unless that component itself accompanies the
-executable.
-
- It may happen that this requirement contradicts the license
-restrictions of other proprietary libraries that do not normally
-accompany the operating system. Such a contradiction means you cannot
-use both them and the Library together in an executable that you
-distribute.
-
-@item
-You may place library facilities that are a work based on the
-Library side-by-side in a single library together with other library
-facilities not covered by this License, and distribute such a combined
-library, provided that the separate distribution of the work based on
-the Library and of the other library facilities is otherwise
-permitted, and provided that you do these two things:
-
-@enumerate a
-@item
-Accompany the combined library with a copy of the same work
-based on the Library, uncombined with any other library
-facilities. This must be distributed under the terms of the
-Sections above.
-
-@item
-Give prominent notice with the combined library of the fact
-that part of it is a work based on the Library, and explaining
-where to find the accompanying uncombined form of the same work.
-@end enumerate
-
-@item
-You may not copy, modify, sublicense, link with, or distribute
-the Library except as expressly provided under this License. Any
-attempt otherwise to copy, modify, sublicense, link with, or
-distribute the Library is void, and will automatically terminate your
-rights under this License. However, parties who have received copies,
-or rights, from you under this License will not have their licenses
-terminated so long as such parties remain in full compliance.
-
-@item
-You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Library or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Library (or any work based on the
-Library), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Library or works based on it.
-
-@item
-Each time you redistribute the Library (or any work based on the
-Library), the recipient automatically receives a license from the
-original licensor to copy, distribute, link with or modify the Library
-subject to these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties with
-this License.
-
-@item
-If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Library at all. For example, if a patent
-license would not permit royalty-free redistribution of the Library by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Library.
-
-If any portion of this section is held invalid or unenforceable under any
-particular circumstance, the balance of the section is intended to apply,
-and the section as a whole is intended to apply in other circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-@item
-If the distribution and/or use of the Library is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Library under this License may add
-an explicit geographical distribution limitation excluding those countries,
-so that distribution is permitted only in or among countries not thus
-excluded. In such case, this License incorporates the limitation as if
-written in the body of this License.
-
-@item
-The Free Software Foundation may publish revised and/or new
-versions of the Lesser General Public License from time to time.
-Such new versions will be similar in spirit to the present version,
-but may differ in detail to address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Library
-specifies a version number of this License which applies to it and
-``any later version'', you have the option of following the terms and
-conditions either of that version or of any later version published by
-the Free Software Foundation. If the Library does not specify a
-license version number, you may choose any version ever published by
-the Free Software Foundation.
-
-@item
-If you wish to incorporate parts of the Library into other free
-programs whose distribution conditions are incompatible with these,
-write to the author to ask for permission. For software which is
-copyrighted by the Free Software Foundation, write to the Free
-Software Foundation; we sometimes make exceptions for this. Our
-decision will be guided by the two goals of preserving the free status
-of all derivatives of our free software and of promoting the sharing
-and reuse of software generally.
-
-@iftex
-@heading NO WARRANTY
-@end iftex
-@ifinfo
-@center NO WARRANTY
-@end ifinfo
-
-@item
-BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
-WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
-EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
-OTHER PARTIES PROVIDE THE LIBRARY ``AS IS'' WITHOUT WARRANTY OF ANY
-KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
-LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
-THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
-
-@item
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
-WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
-AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
-FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
-CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
-LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
-RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
-FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
-SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
-DAMAGES.
-@end enumerate
-
-@iftex
-@heading END OF TERMS AND CONDITIONS
-@end iftex
-@ifinfo
-@center END OF TERMS AND CONDITIONS
-@end ifinfo
-
-@page
-@appendixsubsec How to Apply These Terms to Your New Libraries
-
- If you develop a new library, and you want it to be of the greatest
-possible use to the public, we recommend making it free software that
-everyone can redistribute and change. You can do so by permitting
-redistribution under these terms (or, alternatively, under the terms of the
-ordinary General Public License).
-
- To apply these terms, attach the following notices to the library. It is
-safest to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least the
-``copyright'' line and a pointer to where the full notice is found.
-
-@smallexample
-@var{one line to give the library's name and an idea of what it does.}
-Copyright (C) @var{year} @var{name of author}
-
-This library is free software; you can redistribute it and/or modify it
-under the terms of the GNU Lesser General Public License as published by
-the Free Software Foundation; either version 2.1 of the License, or (at
-your option) any later version.
-
-This library is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Lesser General Public License for more details.
-
-You should have received a copy of the GNU Lesser General Public
-License along with this library; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
-USA.
-@end smallexample
-
-Also add information on how to contact you by electronic and paper mail.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a ``copyright disclaimer'' for the library, if
-necessary. Here is a sample; alter the names:
-
-@smallexample
-Yoyodyne, Inc., hereby disclaims all copyright interest in the library
-`Frob' (a library for tweaking knobs) written by James Random Hacker.
-
-@var{signature of Ty Coon}, 1 April 1990
-Ty Coon, President of Vice
-@end smallexample
-
-That's all there is to it!
diff --git a/gcc-4.7/libiberty/copysign.c b/gcc-4.7/libiberty/copysign.c
deleted file mode 100644
index 6793f22e8..000000000
--- a/gcc-4.7/libiberty/copysign.c
+++ /dev/null
@@ -1,154 +0,0 @@
-#include <ansidecl.h>
-
-#ifdef __IEEE_BIG_ENDIAN
-
-typedef union
-{
- double value;
- struct
- {
- unsigned int sign : 1;
- unsigned int exponent: 11;
- unsigned int fraction0:4;
- unsigned int fraction1:16;
- unsigned int fraction2:16;
- unsigned int fraction3:16;
-
- } number;
- struct
- {
- unsigned int sign : 1;
- unsigned int exponent: 11;
- unsigned int quiet:1;
- unsigned int function0:3;
- unsigned int function1:16;
- unsigned int function2:16;
- unsigned int function3:16;
- } nan;
- struct
- {
- unsigned long msw;
- unsigned long lsw;
- } parts;
- long aslong[2];
-} __ieee_double_shape_type;
-
-#endif
-
-#ifdef __IEEE_LITTLE_ENDIAN
-
-typedef union
-{
- double value;
- struct
- {
-#ifdef __SMALL_BITFIELDS
- unsigned int fraction3:16;
- unsigned int fraction2:16;
- unsigned int fraction1:16;
- unsigned int fraction0: 4;
-#else
- unsigned int fraction1:32;
- unsigned int fraction0:20;
-#endif
- unsigned int exponent :11;
- unsigned int sign : 1;
- } number;
- struct
- {
-#ifdef __SMALL_BITFIELDS
- unsigned int function3:16;
- unsigned int function2:16;
- unsigned int function1:16;
- unsigned int function0:3;
-#else
- unsigned int function1:32;
- unsigned int function0:19;
-#endif
- unsigned int quiet:1;
- unsigned int exponent: 11;
- unsigned int sign : 1;
- } nan;
- struct
- {
- unsigned long lsw;
- unsigned long msw;
- } parts;
-
- long aslong[2];
-
-} __ieee_double_shape_type;
-
-#endif
-
-#ifdef __IEEE_BIG_ENDIAN
-typedef union
-{
- float value;
- struct
- {
- unsigned int sign : 1;
- unsigned int exponent: 8;
- unsigned int fraction0: 7;
- unsigned int fraction1: 16;
- } number;
- struct
- {
- unsigned int sign:1;
- unsigned int exponent:8;
- unsigned int quiet:1;
- unsigned int function0:6;
- unsigned int function1:16;
- } nan;
- long p1;
-
-} __ieee_float_shape_type;
-#endif
-
-#ifdef __IEEE_LITTLE_ENDIAN
-typedef union
-{
- float value;
- struct
- {
- unsigned int fraction0: 7;
- unsigned int fraction1: 16;
- unsigned int exponent: 8;
- unsigned int sign : 1;
- } number;
- struct
- {
- unsigned int function1:16;
- unsigned int function0:6;
- unsigned int quiet:1;
- unsigned int exponent:8;
- unsigned int sign:1;
- } nan;
- long p1;
-
-} __ieee_float_shape_type;
-#endif
-
-#if defined(__IEEE_BIG_ENDIAN) || defined(__IEEE_LITTLE_ENDIAN)
-
-double
-copysign (double x, double y)
-{
- __ieee_double_shape_type a,b;
- b.value = y;
- a.value = x;
- a.number.sign =b.number.sign;
- return a.value;
-}
-
-#else
-
-double
-copysign (double x, double y)
-{
- if ((x < 0 && y > 0) || (x > 0 && y < 0))
- return -x;
- return x;
-}
-
-#endif
diff --git a/gcc-4.7/libiberty/cp-demangle.c b/gcc-4.7/libiberty/cp-demangle.c
deleted file mode 100644
index d95b56c71..000000000
--- a/gcc-4.7/libiberty/cp-demangle.c
+++ /dev/null
@@ -1,5731 +0,0 @@
-/* Demangler for g++ V3 ABI.
- Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
- Free Software Foundation, Inc.
- Written by Ian Lance Taylor <ian@wasabisystems.com>.
-
- This file is part of the libiberty library, which is part of GCC.
-
- This file is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- In addition to the permissions in the GNU General Public License, the
- Free Software Foundation gives you unlimited permission to link the
- compiled version of this file into combinations with other programs,
- and to distribute those combinations without any restriction coming
- from the use of this file. (The General Public License restrictions
- do apply in other respects; for example, they cover modification of
- the file, and distribution when not linked into a combined
- executable.)
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-/* This code implements a demangler for the g++ V3 ABI. The ABI is
- described on this web page:
- http://www.codesourcery.com/cxx-abi/abi.html#mangling
-
- This code was written while looking at the demangler written by
- Alex Samuel <samuel@codesourcery.com>.
-
- This code first pulls the mangled name apart into a list of
- components, and then walks the list generating the demangled
- name.
-
- This file will normally define the following functions, q.v.:
- char *cplus_demangle_v3(const char *mangled, int options)
- char *java_demangle_v3(const char *mangled)
- int cplus_demangle_v3_callback(const char *mangled, int options,
- demangle_callbackref callback)
- int java_demangle_v3_callback(const char *mangled,
- demangle_callbackref callback)
- enum gnu_v3_ctor_kinds is_gnu_v3_mangled_ctor (const char *name)
- enum gnu_v3_dtor_kinds is_gnu_v3_mangled_dtor (const char *name)
-
- Also, the interface to the component list is public, and defined in
- demangle.h. The interface consists of these types, which are
- defined in demangle.h:
- enum demangle_component_type
- struct demangle_component
- demangle_callbackref
- and these functions defined in this file:
- cplus_demangle_fill_name
- cplus_demangle_fill_extended_operator
- cplus_demangle_fill_ctor
- cplus_demangle_fill_dtor
- cplus_demangle_print
- cplus_demangle_print_callback
- and other functions defined in the file cp-demint.c.
-
- This file also defines some other functions and variables which are
- only to be used by the file cp-demint.c.
-
- Preprocessor macros you can define while compiling this file:
-
- IN_LIBGCC2
- If defined, this file defines the following functions, q.v.:
- char *__cxa_demangle (const char *mangled, char *buf, size_t *len,
- int *status)
- int __gcclibcxx_demangle_callback (const char *,
- void (*)
- (const char *, size_t, void *),
- void *)
- instead of cplus_demangle_v3[_callback]() and
- java_demangle_v3[_callback]().
-
- IN_GLIBCPP_V3
- If defined, this file defines only __cxa_demangle() and
- __gcclibcxx_demangle_callback(), and no other publically visible
- functions or variables.
-
- STANDALONE_DEMANGLER
- If defined, this file defines a main() function which demangles
- any arguments, or, if none, demangles stdin.
-
- CP_DEMANGLE_DEBUG
- If defined, turns on debugging mode, which prints information on
- stdout about the mangled string. This is not generally useful.
-*/
-
-#if defined (_AIX) && !defined (__GNUC__)
- #pragma alloca
-#endif
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-#else
-# ifndef alloca
-# ifdef __GNUC__
-# define alloca __builtin_alloca
-# else
-extern char *alloca ();
-# endif /* __GNUC__ */
-# endif /* alloca */
-#endif /* HAVE_ALLOCA_H */
-
-#include "ansidecl.h"
-#include "libiberty.h"
-#include "demangle.h"
-#include "cp-demangle.h"
-
-/* If IN_GLIBCPP_V3 is defined, some functions are made static. We
- also rename them via #define to avoid compiler errors when the
- static definition conflicts with the extern declaration in a header
- file. */
-#ifdef IN_GLIBCPP_V3
-
-#define CP_STATIC_IF_GLIBCPP_V3 static
-
-#define cplus_demangle_fill_name d_fill_name
-static int d_fill_name (struct demangle_component *, const char *, int);
-
-#define cplus_demangle_fill_extended_operator d_fill_extended_operator
-static int
-d_fill_extended_operator (struct demangle_component *, int,
- struct demangle_component *);
-
-#define cplus_demangle_fill_ctor d_fill_ctor
-static int
-d_fill_ctor (struct demangle_component *, enum gnu_v3_ctor_kinds,
- struct demangle_component *);
-
-#define cplus_demangle_fill_dtor d_fill_dtor
-static int
-d_fill_dtor (struct demangle_component *, enum gnu_v3_dtor_kinds,
- struct demangle_component *);
-
-#define cplus_demangle_mangled_name d_mangled_name
-static struct demangle_component *d_mangled_name (struct d_info *, int);
-
-#define cplus_demangle_type d_type
-static struct demangle_component *d_type (struct d_info *);
-
-#define cplus_demangle_print d_print
-static char *d_print (int, const struct demangle_component *, int, size_t *);
-
-#define cplus_demangle_print_callback d_print_callback
-static int d_print_callback (int, const struct demangle_component *,
- demangle_callbackref, void *);
-
-#define cplus_demangle_init_info d_init_info
-static void d_init_info (const char *, int, size_t, struct d_info *);
-
-#else /* ! defined(IN_GLIBCPP_V3) */
-#define CP_STATIC_IF_GLIBCPP_V3
-#endif /* ! defined(IN_GLIBCPP_V3) */
-
-/* See if the compiler supports dynamic arrays. */
-
-#ifdef __GNUC__
-#define CP_DYNAMIC_ARRAYS
-#else
-#ifdef __STDC__
-#ifdef __STDC_VERSION__
-#if __STDC_VERSION__ >= 199901L
-#define CP_DYNAMIC_ARRAYS
-#endif /* __STDC__VERSION >= 199901L */
-#endif /* defined (__STDC_VERSION__) */
-#endif /* defined (__STDC__) */
-#endif /* ! defined (__GNUC__) */
-
-/* We avoid pulling in the ctype tables, to prevent pulling in
- additional unresolved symbols when this code is used in a library.
- FIXME: Is this really a valid reason? This comes from the original
- V3 demangler code.
-
- As of this writing this file has the following undefined references
- when compiled with -DIN_GLIBCPP_V3: realloc, free, memcpy, strcpy,
- strcat, strlen. */
-
-#define IS_DIGIT(c) ((c) >= '0' && (c) <= '9')
-#define IS_UPPER(c) ((c) >= 'A' && (c) <= 'Z')
-#define IS_LOWER(c) ((c) >= 'a' && (c) <= 'z')
-
-/* The prefix prepended by GCC to an identifier represnting the
- anonymous namespace. */
-#define ANONYMOUS_NAMESPACE_PREFIX "_GLOBAL_"
-#define ANONYMOUS_NAMESPACE_PREFIX_LEN \
- (sizeof (ANONYMOUS_NAMESPACE_PREFIX) - 1)
-
-/* Information we keep for the standard substitutions. */
-
-struct d_standard_sub_info
-{
- /* The code for this substitution. */
- char code;
- /* The simple string it expands to. */
- const char *simple_expansion;
- /* The length of the simple expansion. */
- int simple_len;
- /* The results of a full, verbose, expansion. This is used when
- qualifying a constructor/destructor, or when in verbose mode. */
- const char *full_expansion;
- /* The length of the full expansion. */
- int full_len;
- /* What to set the last_name field of d_info to; NULL if we should
- not set it. This is only relevant when qualifying a
- constructor/destructor. */
- const char *set_last_name;
- /* The length of set_last_name. */
- int set_last_name_len;
-};
-
-/* Accessors for subtrees of struct demangle_component. */
-
-#define d_left(dc) ((dc)->u.s_binary.left)
-#define d_right(dc) ((dc)->u.s_binary.right)
-
-/* A list of templates. This is used while printing. */
-
-struct d_print_template
-{
- /* Next template on the list. */
- struct d_print_template *next;
- /* This template. */
- const struct demangle_component *template_decl;
-};
-
-/* A list of type modifiers. This is used while printing. */
-
-struct d_print_mod
-{
- /* Next modifier on the list. These are in the reverse of the order
- in which they appeared in the mangled string. */
- struct d_print_mod *next;
- /* The modifier. */
- const struct demangle_component *mod;
- /* Whether this modifier was printed. */
- int printed;
- /* The list of templates which applies to this modifier. */
- struct d_print_template *templates;
-};
-
-/* We use these structures to hold information during printing. */
-
-struct d_growable_string
-{
- /* Buffer holding the result. */
- char *buf;
- /* Current length of data in buffer. */
- size_t len;
- /* Allocated size of buffer. */
- size_t alc;
- /* Set to 1 if we had a memory allocation failure. */
- int allocation_failure;
-};
-
-enum { D_PRINT_BUFFER_LENGTH = 256 };
-struct d_print_info
-{
- /* Fixed-length allocated buffer for demangled data, flushed to the
- callback with a NUL termination once full. */
- char buf[D_PRINT_BUFFER_LENGTH];
- /* Current length of data in buffer. */
- size_t len;
- /* The last character printed, saved individually so that it survives
- any buffer flush. */
- char last_char;
- /* Callback function to handle demangled buffer flush. */
- demangle_callbackref callback;
- /* Opaque callback argument. */
- void *opaque;
- /* The current list of templates, if any. */
- struct d_print_template *templates;
- /* The current list of modifiers (e.g., pointer, reference, etc.),
- if any. */
- struct d_print_mod *modifiers;
- /* Set to 1 if we saw a demangling error. */
- int demangle_failure;
- /* The current index into any template argument packs we are using
- for printing. */
- int pack_index;
- /* Number of d_print_flush calls so far. */
- unsigned long int flush_count;
-};
-
-#ifdef CP_DEMANGLE_DEBUG
-static void d_dump (struct demangle_component *, int);
-#endif
-
-static struct demangle_component *
-d_make_empty (struct d_info *);
-
-static struct demangle_component *
-d_make_comp (struct d_info *, enum demangle_component_type,
- struct demangle_component *,
- struct demangle_component *);
-
-static struct demangle_component *
-d_make_name (struct d_info *, const char *, int);
-
-static struct demangle_component *
-d_make_demangle_mangled_name (struct d_info *, const char *);
-
-static struct demangle_component *
-d_make_builtin_type (struct d_info *,
- const struct demangle_builtin_type_info *);
-
-static struct demangle_component *
-d_make_operator (struct d_info *,
- const struct demangle_operator_info *);
-
-static struct demangle_component *
-d_make_extended_operator (struct d_info *, int,
- struct demangle_component *);
-
-static struct demangle_component *
-d_make_ctor (struct d_info *, enum gnu_v3_ctor_kinds,
- struct demangle_component *);
-
-static struct demangle_component *
-d_make_dtor (struct d_info *, enum gnu_v3_dtor_kinds,
- struct demangle_component *);
-
-static struct demangle_component *
-d_make_template_param (struct d_info *, long);
-
-static struct demangle_component *
-d_make_sub (struct d_info *, const char *, int);
-
-static int
-has_return_type (struct demangle_component *);
-
-static int
-is_ctor_dtor_or_conversion (struct demangle_component *);
-
-static struct demangle_component *d_encoding (struct d_info *, int);
-
-static struct demangle_component *d_name (struct d_info *);
-
-static struct demangle_component *d_nested_name (struct d_info *);
-
-static struct demangle_component *d_prefix (struct d_info *);
-
-static struct demangle_component *d_unqualified_name (struct d_info *);
-
-static struct demangle_component *d_source_name (struct d_info *);
-
-static long d_number (struct d_info *);
-
-static struct demangle_component *d_identifier (struct d_info *, int);
-
-static struct demangle_component *d_operator_name (struct d_info *);
-
-static struct demangle_component *d_special_name (struct d_info *);
-
-static int d_call_offset (struct d_info *, int);
-
-static struct demangle_component *d_ctor_dtor_name (struct d_info *);
-
-static struct demangle_component **
-d_cv_qualifiers (struct d_info *, struct demangle_component **, int);
-
-static struct demangle_component *
-d_function_type (struct d_info *);
-
-static struct demangle_component *
-d_bare_function_type (struct d_info *, int);
-
-static struct demangle_component *
-d_class_enum_type (struct d_info *);
-
-static struct demangle_component *d_array_type (struct d_info *);
-
-static struct demangle_component *d_vector_type (struct d_info *);
-
-static struct demangle_component *
-d_pointer_to_member_type (struct d_info *);
-
-static struct demangle_component *
-d_template_param (struct d_info *);
-
-static struct demangle_component *d_template_args (struct d_info *);
-
-static struct demangle_component *
-d_template_arg (struct d_info *);
-
-static struct demangle_component *d_expression (struct d_info *);
-
-static struct demangle_component *d_expr_primary (struct d_info *);
-
-static struct demangle_component *d_local_name (struct d_info *);
-
-static int d_discriminator (struct d_info *);
-
-static struct demangle_component *d_lambda (struct d_info *);
-
-static struct demangle_component *d_unnamed_type (struct d_info *);
-
-static struct demangle_component *
-d_clone_suffix (struct d_info *, struct demangle_component *);
-
-static int
-d_add_substitution (struct d_info *, struct demangle_component *);
-
-static struct demangle_component *d_substitution (struct d_info *, int);
-
-static void d_growable_string_init (struct d_growable_string *, size_t);
-
-static inline void
-d_growable_string_resize (struct d_growable_string *, size_t);
-
-static inline void
-d_growable_string_append_buffer (struct d_growable_string *,
- const char *, size_t);
-static void
-d_growable_string_callback_adapter (const char *, size_t, void *);
-
-static void
-d_print_init (struct d_print_info *, demangle_callbackref, void *);
-
-static inline void d_print_error (struct d_print_info *);
-
-static inline int d_print_saw_error (struct d_print_info *);
-
-static inline void d_print_flush (struct d_print_info *);
-
-static inline void d_append_char (struct d_print_info *, char);
-
-static inline void d_append_buffer (struct d_print_info *,
- const char *, size_t);
-
-static inline void d_append_string (struct d_print_info *, const char *);
-
-static inline char d_last_char (struct d_print_info *);
-
-static void
-d_print_comp (struct d_print_info *, int, const struct demangle_component *);
-
-static void
-d_print_java_identifier (struct d_print_info *, const char *, int);
-
-static void
-d_print_mod_list (struct d_print_info *, int, struct d_print_mod *, int);
-
-static void
-d_print_mod (struct d_print_info *, int, const struct demangle_component *);
-
-static void
-d_print_function_type (struct d_print_info *, int,
- const struct demangle_component *,
- struct d_print_mod *);
-
-static void
-d_print_array_type (struct d_print_info *, int,
- const struct demangle_component *,
- struct d_print_mod *);
-
-static void
-d_print_expr_op (struct d_print_info *, int, const struct demangle_component *);
-
-static void
-d_print_cast (struct d_print_info *, int, const struct demangle_component *);
-
-static int d_demangle_callback (const char *, int,
- demangle_callbackref, void *);
-static char *d_demangle (const char *, int, size_t *);
-
-#ifdef CP_DEMANGLE_DEBUG
-
-static void
-d_dump (struct demangle_component *dc, int indent)
-{
- int i;
-
- if (dc == NULL)
- {
- if (indent == 0)
- printf ("failed demangling\n");
- return;
- }
-
- for (i = 0; i < indent; ++i)
- putchar (' ');
-
- switch (dc->type)
- {
- case DEMANGLE_COMPONENT_NAME:
- printf ("name '%.*s'\n", dc->u.s_name.len, dc->u.s_name.s);
- return;
- case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
- printf ("template parameter %ld\n", dc->u.s_number.number);
- return;
- case DEMANGLE_COMPONENT_CTOR:
- printf ("constructor %d\n", (int) dc->u.s_ctor.kind);
- d_dump (dc->u.s_ctor.name, indent + 2);
- return;
- case DEMANGLE_COMPONENT_DTOR:
- printf ("destructor %d\n", (int) dc->u.s_dtor.kind);
- d_dump (dc->u.s_dtor.name, indent + 2);
- return;
- case DEMANGLE_COMPONENT_SUB_STD:
- printf ("standard substitution %s\n", dc->u.s_string.string);
- return;
- case DEMANGLE_COMPONENT_BUILTIN_TYPE:
- printf ("builtin type %s\n", dc->u.s_builtin.type->name);
- return;
- case DEMANGLE_COMPONENT_OPERATOR:
- printf ("operator %s\n", dc->u.s_operator.op->name);
- return;
- case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
- printf ("extended operator with %d args\n",
- dc->u.s_extended_operator.args);
- d_dump (dc->u.s_extended_operator.name, indent + 2);
- return;
-
- case DEMANGLE_COMPONENT_QUAL_NAME:
- printf ("qualified name\n");
- break;
- case DEMANGLE_COMPONENT_LOCAL_NAME:
- printf ("local name\n");
- break;
- case DEMANGLE_COMPONENT_TYPED_NAME:
- printf ("typed name\n");
- break;
- case DEMANGLE_COMPONENT_TEMPLATE:
- printf ("template\n");
- break;
- case DEMANGLE_COMPONENT_VTABLE:
- printf ("vtable\n");
- break;
- case DEMANGLE_COMPONENT_VTT:
- printf ("VTT\n");
- break;
- case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
- printf ("construction vtable\n");
- break;
- case DEMANGLE_COMPONENT_TYPEINFO:
- printf ("typeinfo\n");
- break;
- case DEMANGLE_COMPONENT_TYPEINFO_NAME:
- printf ("typeinfo name\n");
- break;
- case DEMANGLE_COMPONENT_TYPEINFO_FN:
- printf ("typeinfo function\n");
- break;
- case DEMANGLE_COMPONENT_THUNK:
- printf ("thunk\n");
- break;
- case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
- printf ("virtual thunk\n");
- break;
- case DEMANGLE_COMPONENT_COVARIANT_THUNK:
- printf ("covariant thunk\n");
- break;
- case DEMANGLE_COMPONENT_JAVA_CLASS:
- printf ("java class\n");
- break;
- case DEMANGLE_COMPONENT_GUARD:
- printf ("guard\n");
- break;
- case DEMANGLE_COMPONENT_REFTEMP:
- printf ("reference temporary\n");
- break;
- case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
- printf ("hidden alias\n");
- break;
- case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
- printf ("transaction clone\n");
- break;
- case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
- printf ("non-transaction clone\n");
- break;
- case DEMANGLE_COMPONENT_RESTRICT:
- printf ("restrict\n");
- break;
- case DEMANGLE_COMPONENT_VOLATILE:
- printf ("volatile\n");
- break;
- case DEMANGLE_COMPONENT_CONST:
- printf ("const\n");
- break;
- case DEMANGLE_COMPONENT_RESTRICT_THIS:
- printf ("restrict this\n");
- break;
- case DEMANGLE_COMPONENT_VOLATILE_THIS:
- printf ("volatile this\n");
- break;
- case DEMANGLE_COMPONENT_CONST_THIS:
- printf ("const this\n");
- break;
- case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
- printf ("vendor type qualifier\n");
- break;
- case DEMANGLE_COMPONENT_POINTER:
- printf ("pointer\n");
- break;
- case DEMANGLE_COMPONENT_REFERENCE:
- printf ("reference\n");
- break;
- case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
- printf ("rvalue reference\n");
- break;
- case DEMANGLE_COMPONENT_COMPLEX:
- printf ("complex\n");
- break;
- case DEMANGLE_COMPONENT_IMAGINARY:
- printf ("imaginary\n");
- break;
- case DEMANGLE_COMPONENT_VENDOR_TYPE:
- printf ("vendor type\n");
- break;
- case DEMANGLE_COMPONENT_FUNCTION_TYPE:
- printf ("function type\n");
- break;
- case DEMANGLE_COMPONENT_ARRAY_TYPE:
- printf ("array type\n");
- break;
- case DEMANGLE_COMPONENT_PTRMEM_TYPE:
- printf ("pointer to member type\n");
- break;
- case DEMANGLE_COMPONENT_FIXED_TYPE:
- printf ("fixed-point type\n");
- break;
- case DEMANGLE_COMPONENT_ARGLIST:
- printf ("argument list\n");
- break;
- case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
- printf ("template argument list\n");
- break;
- case DEMANGLE_COMPONENT_INITIALIZER_LIST:
- printf ("initializer list\n");
- break;
- case DEMANGLE_COMPONENT_CAST:
- printf ("cast\n");
- break;
- case DEMANGLE_COMPONENT_NULLARY:
- printf ("nullary operator\n");
- break;
- case DEMANGLE_COMPONENT_UNARY:
- printf ("unary operator\n");
- break;
- case DEMANGLE_COMPONENT_BINARY:
- printf ("binary operator\n");
- break;
- case DEMANGLE_COMPONENT_BINARY_ARGS:
- printf ("binary operator arguments\n");
- break;
- case DEMANGLE_COMPONENT_TRINARY:
- printf ("trinary operator\n");
- break;
- case DEMANGLE_COMPONENT_TRINARY_ARG1:
- printf ("trinary operator arguments 1\n");
- break;
- case DEMANGLE_COMPONENT_TRINARY_ARG2:
- printf ("trinary operator arguments 1\n");
- break;
- case DEMANGLE_COMPONENT_LITERAL:
- printf ("literal\n");
- break;
- case DEMANGLE_COMPONENT_LITERAL_NEG:
- printf ("negative literal\n");
- break;
- case DEMANGLE_COMPONENT_JAVA_RESOURCE:
- printf ("java resource\n");
- break;
- case DEMANGLE_COMPONENT_COMPOUND_NAME:
- printf ("compound name\n");
- break;
- case DEMANGLE_COMPONENT_CHARACTER:
- printf ("character '%c'\n", dc->u.s_character.character);
- return;
- case DEMANGLE_COMPONENT_DECLTYPE:
- printf ("decltype\n");
- break;
- case DEMANGLE_COMPONENT_PACK_EXPANSION:
- printf ("pack expansion\n");
- break;
- }
-
- d_dump (d_left (dc), indent + 2);
- d_dump (d_right (dc), indent + 2);
-}
-
-#endif /* CP_DEMANGLE_DEBUG */
-
-/* Fill in a DEMANGLE_COMPONENT_NAME. */
-
-CP_STATIC_IF_GLIBCPP_V3
-int
-cplus_demangle_fill_name (struct demangle_component *p, const char *s, int len)
-{
- if (p == NULL || s == NULL || len == 0)
- return 0;
- p->type = DEMANGLE_COMPONENT_NAME;
- p->u.s_name.s = s;
- p->u.s_name.len = len;
- return 1;
-}
-
-/* Fill in a DEMANGLE_COMPONENT_EXTENDED_OPERATOR. */
-
-CP_STATIC_IF_GLIBCPP_V3
-int
-cplus_demangle_fill_extended_operator (struct demangle_component *p, int args,
- struct demangle_component *name)
-{
- if (p == NULL || args < 0 || name == NULL)
- return 0;
- p->type = DEMANGLE_COMPONENT_EXTENDED_OPERATOR;
- p->u.s_extended_operator.args = args;
- p->u.s_extended_operator.name = name;
- return 1;
-}
-
-/* Fill in a DEMANGLE_COMPONENT_CTOR. */
-
-CP_STATIC_IF_GLIBCPP_V3
-int
-cplus_demangle_fill_ctor (struct demangle_component *p,
- enum gnu_v3_ctor_kinds kind,
- struct demangle_component *name)
-{
- if (p == NULL
- || name == NULL
- || (int) kind < gnu_v3_complete_object_ctor
- || (int) kind > gnu_v3_object_ctor_group)
- return 0;
- p->type = DEMANGLE_COMPONENT_CTOR;
- p->u.s_ctor.kind = kind;
- p->u.s_ctor.name = name;
- return 1;
-}
-
-/* Fill in a DEMANGLE_COMPONENT_DTOR. */
-
-CP_STATIC_IF_GLIBCPP_V3
-int
-cplus_demangle_fill_dtor (struct demangle_component *p,
- enum gnu_v3_dtor_kinds kind,
- struct demangle_component *name)
-{
- if (p == NULL
- || name == NULL
- || (int) kind < gnu_v3_deleting_dtor
- || (int) kind > gnu_v3_object_dtor_group)
- return 0;
- p->type = DEMANGLE_COMPONENT_DTOR;
- p->u.s_dtor.kind = kind;
- p->u.s_dtor.name = name;
- return 1;
-}
-
-/* Add a new component. */
-
-static struct demangle_component *
-d_make_empty (struct d_info *di)
-{
- struct demangle_component *p;
-
- if (di->next_comp >= di->num_comps)
- return NULL;
- p = &di->comps[di->next_comp];
- ++di->next_comp;
- return p;
-}
-
-/* Add a new generic component. */
-
-static struct demangle_component *
-d_make_comp (struct d_info *di, enum demangle_component_type type,
- struct demangle_component *left,
- struct demangle_component *right)
-{
- struct demangle_component *p;
-
- /* We check for errors here. A typical error would be a NULL return
- from a subroutine. We catch those here, and return NULL
- upward. */
- switch (type)
- {
- /* These types require two parameters. */
- case DEMANGLE_COMPONENT_QUAL_NAME:
- case DEMANGLE_COMPONENT_LOCAL_NAME:
- case DEMANGLE_COMPONENT_TYPED_NAME:
- case DEMANGLE_COMPONENT_TEMPLATE:
- case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
- case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
- case DEMANGLE_COMPONENT_PTRMEM_TYPE:
- case DEMANGLE_COMPONENT_UNARY:
- case DEMANGLE_COMPONENT_BINARY:
- case DEMANGLE_COMPONENT_BINARY_ARGS:
- case DEMANGLE_COMPONENT_TRINARY:
- case DEMANGLE_COMPONENT_TRINARY_ARG1:
- case DEMANGLE_COMPONENT_LITERAL:
- case DEMANGLE_COMPONENT_LITERAL_NEG:
- case DEMANGLE_COMPONENT_COMPOUND_NAME:
- case DEMANGLE_COMPONENT_VECTOR_TYPE:
- case DEMANGLE_COMPONENT_CLONE:
- if (left == NULL || right == NULL)
- return NULL;
- break;
-
- /* These types only require one parameter. */
- case DEMANGLE_COMPONENT_VTABLE:
- case DEMANGLE_COMPONENT_VTT:
- case DEMANGLE_COMPONENT_TYPEINFO:
- case DEMANGLE_COMPONENT_TYPEINFO_NAME:
- case DEMANGLE_COMPONENT_TYPEINFO_FN:
- case DEMANGLE_COMPONENT_THUNK:
- case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
- case DEMANGLE_COMPONENT_COVARIANT_THUNK:
- case DEMANGLE_COMPONENT_JAVA_CLASS:
- case DEMANGLE_COMPONENT_GUARD:
- case DEMANGLE_COMPONENT_REFTEMP:
- case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
- case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
- case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
- case DEMANGLE_COMPONENT_POINTER:
- case DEMANGLE_COMPONENT_REFERENCE:
- case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
- case DEMANGLE_COMPONENT_COMPLEX:
- case DEMANGLE_COMPONENT_IMAGINARY:
- case DEMANGLE_COMPONENT_VENDOR_TYPE:
- case DEMANGLE_COMPONENT_CAST:
- case DEMANGLE_COMPONENT_JAVA_RESOURCE:
- case DEMANGLE_COMPONENT_DECLTYPE:
- case DEMANGLE_COMPONENT_PACK_EXPANSION:
- case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
- case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
- case DEMANGLE_COMPONENT_NULLARY:
- case DEMANGLE_COMPONENT_TRINARY_ARG2:
- if (left == NULL)
- return NULL;
- break;
-
- /* This needs a right parameter, but the left parameter can be
- empty. */
- case DEMANGLE_COMPONENT_ARRAY_TYPE:
- case DEMANGLE_COMPONENT_INITIALIZER_LIST:
- if (right == NULL)
- return NULL;
- break;
-
- /* These are allowed to have no parameters--in some cases they
- will be filled in later. */
- case DEMANGLE_COMPONENT_FUNCTION_TYPE:
- case DEMANGLE_COMPONENT_RESTRICT:
- case DEMANGLE_COMPONENT_VOLATILE:
- case DEMANGLE_COMPONENT_CONST:
- case DEMANGLE_COMPONENT_RESTRICT_THIS:
- case DEMANGLE_COMPONENT_VOLATILE_THIS:
- case DEMANGLE_COMPONENT_CONST_THIS:
- case DEMANGLE_COMPONENT_ARGLIST:
- case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
- break;
-
- /* Other types should not be seen here. */
- default:
- return NULL;
- }
-
- p = d_make_empty (di);
- if (p != NULL)
- {
- p->type = type;
- p->u.s_binary.left = left;
- p->u.s_binary.right = right;
- }
- return p;
-}
-
-/* Add a new demangle mangled name component. */
-
-static struct demangle_component *
-d_make_demangle_mangled_name (struct d_info *di, const char *s)
-{
- if (d_peek_char (di) != '_' || d_peek_next_char (di) != 'Z')
- return d_make_name (di, s, strlen (s));
- d_advance (di, 2);
- return d_encoding (di, 0);
-}
-
-/* Add a new name component. */
-
-static struct demangle_component *
-d_make_name (struct d_info *di, const char *s, int len)
-{
- struct demangle_component *p;
-
- p = d_make_empty (di);
- if (! cplus_demangle_fill_name (p, s, len))
- return NULL;
- return p;
-}
-
-/* Add a new builtin type component. */
-
-static struct demangle_component *
-d_make_builtin_type (struct d_info *di,
- const struct demangle_builtin_type_info *type)
-{
- struct demangle_component *p;
-
- if (type == NULL)
- return NULL;
- p = d_make_empty (di);
- if (p != NULL)
- {
- p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
- p->u.s_builtin.type = type;
- }
- return p;
-}
-
-/* Add a new operator component. */
-
-static struct demangle_component *
-d_make_operator (struct d_info *di, const struct demangle_operator_info *op)
-{
- struct demangle_component *p;
-
- p = d_make_empty (di);
- if (p != NULL)
- {
- p->type = DEMANGLE_COMPONENT_OPERATOR;
- p->u.s_operator.op = op;
- }
- return p;
-}
-
-/* Add a new extended operator component. */
-
-static struct demangle_component *
-d_make_extended_operator (struct d_info *di, int args,
- struct demangle_component *name)
-{
- struct demangle_component *p;
-
- p = d_make_empty (di);
- if (! cplus_demangle_fill_extended_operator (p, args, name))
- return NULL;
- return p;
-}
-
-static struct demangle_component *
-d_make_default_arg (struct d_info *di, int num,
- struct demangle_component *sub)
-{
- struct demangle_component *p = d_make_empty (di);
- if (p)
- {
- p->type = DEMANGLE_COMPONENT_DEFAULT_ARG;
- p->u.s_unary_num.num = num;
- p->u.s_unary_num.sub = sub;
- }
- return p;
-}
-
-/* Add a new constructor component. */
-
-static struct demangle_component *
-d_make_ctor (struct d_info *di, enum gnu_v3_ctor_kinds kind,
- struct demangle_component *name)
-{
- struct demangle_component *p;
-
- p = d_make_empty (di);
- if (! cplus_demangle_fill_ctor (p, kind, name))
- return NULL;
- return p;
-}
-
-/* Add a new destructor component. */
-
-static struct demangle_component *
-d_make_dtor (struct d_info *di, enum gnu_v3_dtor_kinds kind,
- struct demangle_component *name)
-{
- struct demangle_component *p;
-
- p = d_make_empty (di);
- if (! cplus_demangle_fill_dtor (p, kind, name))
- return NULL;
- return p;
-}
-
-/* Add a new template parameter. */
-
-static struct demangle_component *
-d_make_template_param (struct d_info *di, long i)
-{
- struct demangle_component *p;
-
- p = d_make_empty (di);
- if (p != NULL)
- {
- p->type = DEMANGLE_COMPONENT_TEMPLATE_PARAM;
- p->u.s_number.number = i;
- }
- return p;
-}
-
-/* Add a new function parameter. */
-
-static struct demangle_component *
-d_make_function_param (struct d_info *di, long i)
-{
- struct demangle_component *p;
-
- p = d_make_empty (di);
- if (p != NULL)
- {
- p->type = DEMANGLE_COMPONENT_FUNCTION_PARAM;
- p->u.s_number.number = i;
- }
- return p;
-}
-
-/* Add a new standard substitution component. */
-
-static struct demangle_component *
-d_make_sub (struct d_info *di, const char *name, int len)
-{
- struct demangle_component *p;
-
- p = d_make_empty (di);
- if (p != NULL)
- {
- p->type = DEMANGLE_COMPONENT_SUB_STD;
- p->u.s_string.string = name;
- p->u.s_string.len = len;
- }
- return p;
-}
-
-/* <mangled-name> ::= _Z <encoding> [<clone-suffix>]*
-
- TOP_LEVEL is non-zero when called at the top level. */
-
-CP_STATIC_IF_GLIBCPP_V3
-struct demangle_component *
-cplus_demangle_mangled_name (struct d_info *di, int top_level)
-{
- struct demangle_component *p;
-
- if (! d_check_char (di, '_')
- /* Allow missing _ if not at toplevel to work around a
- bug in G++ abi-version=2 mangling; see the comment in
- write_template_arg. */
- && top_level)
- return NULL;
- if (! d_check_char (di, 'Z'))
- return NULL;
- p = d_encoding (di, top_level);
-
- /* If at top level and parsing parameters, check for a clone
- suffix. */
- if (top_level && (di->options & DMGL_PARAMS) != 0)
- while (d_peek_char (di) == '.'
- && (IS_LOWER (d_peek_next_char (di))
- || d_peek_next_char (di) == '_'
- || IS_DIGIT (d_peek_next_char (di))))
- p = d_clone_suffix (di, p);
-
- return p;
-}
-
-/* Return whether a function should have a return type. The argument
- is the function name, which may be qualified in various ways. The
- rules are that template functions have return types with some
- exceptions, function types which are not part of a function name
- mangling have return types with some exceptions, and non-template
- function names do not have return types. The exceptions are that
- constructors, destructors, and conversion operators do not have
- return types. */
-
-static int
-has_return_type (struct demangle_component *dc)
-{
- if (dc == NULL)
- return 0;
- switch (dc->type)
- {
- default:
- return 0;
- case DEMANGLE_COMPONENT_TEMPLATE:
- return ! is_ctor_dtor_or_conversion (d_left (dc));
- case DEMANGLE_COMPONENT_RESTRICT_THIS:
- case DEMANGLE_COMPONENT_VOLATILE_THIS:
- case DEMANGLE_COMPONENT_CONST_THIS:
- return has_return_type (d_left (dc));
- }
-}
-
-/* Return whether a name is a constructor, a destructor, or a
- conversion operator. */
-
-static int
-is_ctor_dtor_or_conversion (struct demangle_component *dc)
-{
- if (dc == NULL)
- return 0;
- switch (dc->type)
- {
- default:
- return 0;
- case DEMANGLE_COMPONENT_QUAL_NAME:
- case DEMANGLE_COMPONENT_LOCAL_NAME:
- return is_ctor_dtor_or_conversion (d_right (dc));
- case DEMANGLE_COMPONENT_CTOR:
- case DEMANGLE_COMPONENT_DTOR:
- case DEMANGLE_COMPONENT_CAST:
- return 1;
- }
-}
-
-/* <encoding> ::= <(function) name> <bare-function-type>
- ::= <(data) name>
- ::= <special-name>
-
- TOP_LEVEL is non-zero when called at the top level, in which case
- if DMGL_PARAMS is not set we do not demangle the function
- parameters. We only set this at the top level, because otherwise
- we would not correctly demangle names in local scopes. */
-
-static struct demangle_component *
-d_encoding (struct d_info *di, int top_level)
-{
- char peek = d_peek_char (di);
-
- if (peek == 'G' || peek == 'T')
- return d_special_name (di);
- else
- {
- struct demangle_component *dc;
-
- dc = d_name (di);
-
- if (dc != NULL && top_level && (di->options & DMGL_PARAMS) == 0)
- {
- /* Strip off any initial CV-qualifiers, as they really apply
- to the `this' parameter, and they were not output by the
- v2 demangler without DMGL_PARAMS. */
- while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
- || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
- || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
- dc = d_left (dc);
-
- /* If the top level is a DEMANGLE_COMPONENT_LOCAL_NAME, then
- there may be CV-qualifiers on its right argument which
- really apply here; this happens when parsing a class
- which is local to a function. */
- if (dc->type == DEMANGLE_COMPONENT_LOCAL_NAME)
- {
- struct demangle_component *dcr;
-
- dcr = d_right (dc);
- while (dcr->type == DEMANGLE_COMPONENT_RESTRICT_THIS
- || dcr->type == DEMANGLE_COMPONENT_VOLATILE_THIS
- || dcr->type == DEMANGLE_COMPONENT_CONST_THIS)
- dcr = d_left (dcr);
- dc->u.s_binary.right = dcr;
- }
-
- return dc;
- }
-
- peek = d_peek_char (di);
- if (dc == NULL || peek == '\0' || peek == 'E')
- return dc;
- return d_make_comp (di, DEMANGLE_COMPONENT_TYPED_NAME, dc,
- d_bare_function_type (di, has_return_type (dc)));
- }
-}
-
-/* <name> ::= <nested-name>
- ::= <unscoped-name>
- ::= <unscoped-template-name> <template-args>
- ::= <local-name>
-
- <unscoped-name> ::= <unqualified-name>
- ::= St <unqualified-name>
-
- <unscoped-template-name> ::= <unscoped-name>
- ::= <substitution>
-*/
-
-static struct demangle_component *
-d_name (struct d_info *di)
-{
- char peek = d_peek_char (di);
- struct demangle_component *dc;
-
- switch (peek)
- {
- case 'N':
- return d_nested_name (di);
-
- case 'Z':
- return d_local_name (di);
-
- case 'L':
- case 'U':
- return d_unqualified_name (di);
-
- case 'S':
- {
- int subst;
-
- if (d_peek_next_char (di) != 't')
- {
- dc = d_substitution (di, 0);
- subst = 1;
- }
- else
- {
- d_advance (di, 2);
- dc = d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME,
- d_make_name (di, "std", 3),
- d_unqualified_name (di));
- di->expansion += 3;
- subst = 0;
- }
-
- if (d_peek_char (di) != 'I')
- {
- /* The grammar does not permit this case to occur if we
- called d_substitution() above (i.e., subst == 1). We
- don't bother to check. */
- }
- else
- {
- /* This is <template-args>, which means that we just saw
- <unscoped-template-name>, which is a substitution
- candidate if we didn't just get it from a
- substitution. */
- if (! subst)
- {
- if (! d_add_substitution (di, dc))
- return NULL;
- }
- dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
- d_template_args (di));
- }
-
- return dc;
- }
-
- default:
- dc = d_unqualified_name (di);
- if (d_peek_char (di) == 'I')
- {
- /* This is <template-args>, which means that we just saw
- <unscoped-template-name>, which is a substitution
- candidate. */
- if (! d_add_substitution (di, dc))
- return NULL;
- dc = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, dc,
- d_template_args (di));
- }
- return dc;
- }
-}
-
-/* <nested-name> ::= N [<CV-qualifiers>] <prefix> <unqualified-name> E
- ::= N [<CV-qualifiers>] <template-prefix> <template-args> E
-*/
-
-static struct demangle_component *
-d_nested_name (struct d_info *di)
-{
- struct demangle_component *ret;
- struct demangle_component **pret;
-
- if (! d_check_char (di, 'N'))
- return NULL;
-
- pret = d_cv_qualifiers (di, &ret, 1);
- if (pret == NULL)
- return NULL;
-
- *pret = d_prefix (di);
- if (*pret == NULL)
- return NULL;
-
- if (! d_check_char (di, 'E'))
- return NULL;
-
- return ret;
-}
-
-/* <prefix> ::= <prefix> <unqualified-name>
- ::= <template-prefix> <template-args>
- ::= <template-param>
- ::= <decltype>
- ::=
- ::= <substitution>
-
- <template-prefix> ::= <prefix> <(template) unqualified-name>
- ::= <template-param>
- ::= <substitution>
-*/
-
-static struct demangle_component *
-d_prefix (struct d_info *di)
-{
- struct demangle_component *ret = NULL;
-
- while (1)
- {
- char peek;
- enum demangle_component_type comb_type;
- struct demangle_component *dc;
-
- peek = d_peek_char (di);
- if (peek == '\0')
- return NULL;
-
- /* The older code accepts a <local-name> here, but I don't see
- that in the grammar. The older code does not accept a
- <template-param> here. */
-
- comb_type = DEMANGLE_COMPONENT_QUAL_NAME;
- if (peek == 'D')
- {
- char peek2 = d_peek_next_char (di);
- if (peek2 == 'T' || peek2 == 't')
- /* Decltype. */
- dc = cplus_demangle_type (di);
- else
- /* Destructor name. */
- dc = d_unqualified_name (di);
- }
- else if (IS_DIGIT (peek)
- || IS_LOWER (peek)
- || peek == 'C'
- || peek == 'U'
- || peek == 'L')
- dc = d_unqualified_name (di);
- else if (peek == 'S')
- dc = d_substitution (di, 1);
- else if (peek == 'I')
- {
- if (ret == NULL)
- return NULL;
- comb_type = DEMANGLE_COMPONENT_TEMPLATE;
- dc = d_template_args (di);
- }
- else if (peek == 'T')
- dc = d_template_param (di);
- else if (peek == 'E')
- return ret;
- else if (peek == 'M')
- {
- /* Initializer scope for a lambda. We don't need to represent
- this; the normal code will just treat the variable as a type
- scope, which gives appropriate output. */
- if (ret == NULL)
- return NULL;
- d_advance (di, 1);
- continue;
- }
- else
- return NULL;
-
- if (ret == NULL)
- ret = dc;
- else
- ret = d_make_comp (di, comb_type, ret, dc);
-
- if (peek != 'S' && d_peek_char (di) != 'E')
- {
- if (! d_add_substitution (di, ret))
- return NULL;
- }
- }
-}
-
-/* <unqualified-name> ::= <operator-name>
- ::= <ctor-dtor-name>
- ::= <source-name>
- ::= <local-source-name>
-
- <local-source-name> ::= L <source-name> <discriminator>
-*/
-
-static struct demangle_component *
-d_unqualified_name (struct d_info *di)
-{
- char peek;
-
- peek = d_peek_char (di);
- if (IS_DIGIT (peek))
- return d_source_name (di);
- else if (IS_LOWER (peek))
- {
- struct demangle_component *ret;
-
- ret = d_operator_name (di);
- if (ret != NULL && ret->type == DEMANGLE_COMPONENT_OPERATOR)
- {
- di->expansion += sizeof "operator" + ret->u.s_operator.op->len - 2;
- if (!strcmp (ret->u.s_operator.op->code, "li"))
- ret = d_make_comp (di, DEMANGLE_COMPONENT_UNARY, ret,
- d_source_name (di));
- }
- return ret;
- }
- else if (peek == 'C' || peek == 'D')
- return d_ctor_dtor_name (di);
- else if (peek == 'L')
- {
- struct demangle_component * ret;
-
- d_advance (di, 1);
-
- ret = d_source_name (di);
- if (ret == NULL)
- return NULL;
- if (! d_discriminator (di))
- return NULL;
- return ret;
- }
- else if (peek == 'U')
- {
- switch (d_peek_next_char (di))
- {
- case 'l':
- return d_lambda (di);
- case 't':
- return d_unnamed_type (di);
- default:
- return NULL;
- }
- }
- else
- return NULL;
-}
-
-/* <source-name> ::= <(positive length) number> <identifier> */
-
-static struct demangle_component *
-d_source_name (struct d_info *di)
-{
- long len;
- struct demangle_component *ret;
-
- len = d_number (di);
- if (len <= 0)
- return NULL;
- ret = d_identifier (di, len);
- di->last_name = ret;
- return ret;
-}
-
-/* number ::= [n] <(non-negative decimal integer)> */
-
-static long
-d_number (struct d_info *di)
-{
- int negative;
- char peek;
- long ret;
-
- negative = 0;
- peek = d_peek_char (di);
- if (peek == 'n')
- {
- negative = 1;
- d_advance (di, 1);
- peek = d_peek_char (di);
- }
-
- ret = 0;
- while (1)
- {
- if (! IS_DIGIT (peek))
- {
- if (negative)
- ret = - ret;
- return ret;
- }
- ret = ret * 10 + peek - '0';
- d_advance (di, 1);
- peek = d_peek_char (di);
- }
-}
-
-/* Like d_number, but returns a demangle_component. */
-
-static struct demangle_component *
-d_number_component (struct d_info *di)
-{
- struct demangle_component *ret = d_make_empty (di);
- if (ret)
- {
- ret->type = DEMANGLE_COMPONENT_NUMBER;
- ret->u.s_number.number = d_number (di);
- }
- return ret;
-}
-
-/* identifier ::= <(unqualified source code identifier)> */
-
-static struct demangle_component *
-d_identifier (struct d_info *di, int len)
-{
- const char *name;
-
- name = d_str (di);
-
- if (di->send - name < len)
- return NULL;
-
- d_advance (di, len);
-
- /* A Java mangled name may have a trailing '$' if it is a C++
- keyword. This '$' is not included in the length count. We just
- ignore the '$'. */
- if ((di->options & DMGL_JAVA) != 0
- && d_peek_char (di) == '$')
- d_advance (di, 1);
-
- /* Look for something which looks like a gcc encoding of an
- anonymous namespace, and replace it with a more user friendly
- name. */
- if (len >= (int) ANONYMOUS_NAMESPACE_PREFIX_LEN + 2
- && memcmp (name, ANONYMOUS_NAMESPACE_PREFIX,
- ANONYMOUS_NAMESPACE_PREFIX_LEN) == 0)
- {
- const char *s;
-
- s = name + ANONYMOUS_NAMESPACE_PREFIX_LEN;
- if ((*s == '.' || *s == '_' || *s == '$')
- && s[1] == 'N')
- {
- di->expansion -= len - sizeof "(anonymous namespace)";
- return d_make_name (di, "(anonymous namespace)",
- sizeof "(anonymous namespace)" - 1);
- }
- }
-
- return d_make_name (di, name, len);
-}
-
-/* operator_name ::= many different two character encodings.
- ::= cv <type>
- ::= v <digit> <source-name>
-
- This list is sorted for binary search. */
-
-#define NL(s) s, (sizeof s) - 1
-
-CP_STATIC_IF_GLIBCPP_V3
-const struct demangle_operator_info cplus_demangle_operators[] =
-{
- { "aN", NL ("&="), 2 },
- { "aS", NL ("="), 2 },
- { "aa", NL ("&&"), 2 },
- { "ad", NL ("&"), 1 },
- { "an", NL ("&"), 2 },
- { "at", NL ("alignof "), 1 },
- { "az", NL ("alignof "), 1 },
- { "cl", NL ("()"), 2 },
- { "cm", NL (","), 2 },
- { "co", NL ("~"), 1 },
- { "dV", NL ("/="), 2 },
- { "da", NL ("delete[] "), 1 },
- { "de", NL ("*"), 1 },
- { "dl", NL ("delete "), 1 },
- { "ds", NL (".*"), 2 },
- { "dt", NL ("."), 2 },
- { "dv", NL ("/"), 2 },
- { "eO", NL ("^="), 2 },
- { "eo", NL ("^"), 2 },
- { "eq", NL ("=="), 2 },
- { "ge", NL (">="), 2 },
- { "gs", NL ("::"), 1 },
- { "gt", NL (">"), 2 },
- { "ix", NL ("[]"), 2 },
- { "lS", NL ("<<="), 2 },
- { "le", NL ("<="), 2 },
- { "li", NL ("operator\"\" "), 1 },
- { "ls", NL ("<<"), 2 },
- { "lt", NL ("<"), 2 },
- { "mI", NL ("-="), 2 },
- { "mL", NL ("*="), 2 },
- { "mi", NL ("-"), 2 },
- { "ml", NL ("*"), 2 },
- { "mm", NL ("--"), 1 },
- { "na", NL ("new[]"), 3 },
- { "ne", NL ("!="), 2 },
- { "ng", NL ("-"), 1 },
- { "nt", NL ("!"), 1 },
- { "nw", NL ("new"), 3 },
- { "oR", NL ("|="), 2 },
- { "oo", NL ("||"), 2 },
- { "or", NL ("|"), 2 },
- { "pL", NL ("+="), 2 },
- { "pl", NL ("+"), 2 },
- { "pm", NL ("->*"), 2 },
- { "pp", NL ("++"), 1 },
- { "ps", NL ("+"), 1 },
- { "pt", NL ("->"), 2 },
- { "qu", NL ("?"), 3 },
- { "rM", NL ("%="), 2 },
- { "rS", NL (">>="), 2 },
- { "rm", NL ("%"), 2 },
- { "rs", NL (">>"), 2 },
- { "st", NL ("sizeof "), 1 },
- { "sz", NL ("sizeof "), 1 },
- { "tr", NL ("throw"), 0 },
- { "tw", NL ("throw "), 1 },
- { NULL, NULL, 0, 0 }
-};
-
-static struct demangle_component *
-d_operator_name (struct d_info *di)
-{
- char c1;
- char c2;
-
- c1 = d_next_char (di);
- c2 = d_next_char (di);
- if (c1 == 'v' && IS_DIGIT (c2))
- return d_make_extended_operator (di, c2 - '0', d_source_name (di));
- else if (c1 == 'c' && c2 == 'v')
- return d_make_comp (di, DEMANGLE_COMPONENT_CAST,
- cplus_demangle_type (di), NULL);
- else
- {
- /* LOW is the inclusive lower bound. */
- int low = 0;
- /* HIGH is the exclusive upper bound. We subtract one to ignore
- the sentinel at the end of the array. */
- int high = ((sizeof (cplus_demangle_operators)
- / sizeof (cplus_demangle_operators[0]))
- - 1);
-
- while (1)
- {
- int i;
- const struct demangle_operator_info *p;
-
- i = low + (high - low) / 2;
- p = cplus_demangle_operators + i;
-
- if (c1 == p->code[0] && c2 == p->code[1])
- return d_make_operator (di, p);
-
- if (c1 < p->code[0] || (c1 == p->code[0] && c2 < p->code[1]))
- high = i;
- else
- low = i + 1;
- if (low == high)
- return NULL;
- }
- }
-}
-
-static struct demangle_component *
-d_make_character (struct d_info *di, int c)
-{
- struct demangle_component *p;
- p = d_make_empty (di);
- if (p != NULL)
- {
- p->type = DEMANGLE_COMPONENT_CHARACTER;
- p->u.s_character.character = c;
- }
- return p;
-}
-
-static struct demangle_component *
-d_java_resource (struct d_info *di)
-{
- struct demangle_component *p = NULL;
- struct demangle_component *next = NULL;
- long len, i;
- char c;
- const char *str;
-
- len = d_number (di);
- if (len <= 1)
- return NULL;
-
- /* Eat the leading '_'. */
- if (d_next_char (di) != '_')
- return NULL;
- len--;
-
- str = d_str (di);
- i = 0;
-
- while (len > 0)
- {
- c = str[i];
- if (!c)
- return NULL;
-
- /* Each chunk is either a '$' escape... */
- if (c == '$')
- {
- i++;
- switch (str[i++])
- {
- case 'S':
- c = '/';
- break;
- case '_':
- c = '.';
- break;
- case '$':
- c = '$';
- break;
- default:
- return NULL;
- }
- next = d_make_character (di, c);
- d_advance (di, i);
- str = d_str (di);
- len -= i;
- i = 0;
- if (next == NULL)
- return NULL;
- }
- /* ... or a sequence of characters. */
- else
- {
- while (i < len && str[i] && str[i] != '$')
- i++;
-
- next = d_make_name (di, str, i);
- d_advance (di, i);
- str = d_str (di);
- len -= i;
- i = 0;
- if (next == NULL)
- return NULL;
- }
-
- if (p == NULL)
- p = next;
- else
- {
- p = d_make_comp (di, DEMANGLE_COMPONENT_COMPOUND_NAME, p, next);
- if (p == NULL)
- return NULL;
- }
- }
-
- p = d_make_comp (di, DEMANGLE_COMPONENT_JAVA_RESOURCE, p, NULL);
-
- return p;
-}
-
-/* <special-name> ::= TV <type>
- ::= TT <type>
- ::= TI <type>
- ::= TS <type>
- ::= GV <(object) name>
- ::= T <call-offset> <(base) encoding>
- ::= Tc <call-offset> <call-offset> <(base) encoding>
- Also g++ extensions:
- ::= TC <type> <(offset) number> _ <(base) type>
- ::= TF <type>
- ::= TJ <type>
- ::= GR <name>
- ::= GA <encoding>
- ::= Gr <resource name>
- ::= GTt <encoding>
- ::= GTn <encoding>
-*/
-
-static struct demangle_component *
-d_special_name (struct d_info *di)
-{
- di->expansion += 20;
- if (d_check_char (di, 'T'))
- {
- switch (d_next_char (di))
- {
- case 'V':
- di->expansion -= 5;
- return d_make_comp (di, DEMANGLE_COMPONENT_VTABLE,
- cplus_demangle_type (di), NULL);
- case 'T':
- di->expansion -= 10;
- return d_make_comp (di, DEMANGLE_COMPONENT_VTT,
- cplus_demangle_type (di), NULL);
- case 'I':
- return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO,
- cplus_demangle_type (di), NULL);
- case 'S':
- return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_NAME,
- cplus_demangle_type (di), NULL);
-
- case 'h':
- if (! d_call_offset (di, 'h'))
- return NULL;
- return d_make_comp (di, DEMANGLE_COMPONENT_THUNK,
- d_encoding (di, 0), NULL);
-
- case 'v':
- if (! d_call_offset (di, 'v'))
- return NULL;
- return d_make_comp (di, DEMANGLE_COMPONENT_VIRTUAL_THUNK,
- d_encoding (di, 0), NULL);
-
- case 'c':
- if (! d_call_offset (di, '\0'))
- return NULL;
- if (! d_call_offset (di, '\0'))
- return NULL;
- return d_make_comp (di, DEMANGLE_COMPONENT_COVARIANT_THUNK,
- d_encoding (di, 0), NULL);
-
- case 'C':
- {
- struct demangle_component *derived_type;
- long offset;
- struct demangle_component *base_type;
-
- derived_type = cplus_demangle_type (di);
- offset = d_number (di);
- if (offset < 0)
- return NULL;
- if (! d_check_char (di, '_'))
- return NULL;
- base_type = cplus_demangle_type (di);
- /* We don't display the offset. FIXME: We should display
- it in verbose mode. */
- di->expansion += 5;
- return d_make_comp (di, DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE,
- base_type, derived_type);
- }
-
- case 'F':
- return d_make_comp (di, DEMANGLE_COMPONENT_TYPEINFO_FN,
- cplus_demangle_type (di), NULL);
- case 'J':
- return d_make_comp (di, DEMANGLE_COMPONENT_JAVA_CLASS,
- cplus_demangle_type (di), NULL);
-
- default:
- return NULL;
- }
- }
- else if (d_check_char (di, 'G'))
- {
- switch (d_next_char (di))
- {
- case 'V':
- return d_make_comp (di, DEMANGLE_COMPONENT_GUARD, d_name (di), NULL);
-
- case 'R':
- {
- struct demangle_component *name = d_name (di);
- return d_make_comp (di, DEMANGLE_COMPONENT_REFTEMP, name,
- d_number_component (di));
- }
-
- case 'A':
- return d_make_comp (di, DEMANGLE_COMPONENT_HIDDEN_ALIAS,
- d_encoding (di, 0), NULL);
-
- case 'T':
- switch (d_next_char (di))
- {
- case 'n':
- return d_make_comp (di, DEMANGLE_COMPONENT_NONTRANSACTION_CLONE,
- d_encoding (di, 0), NULL);
- default:
- /* ??? The proposal is that other letters (such as 'h') stand
- for different variants of transaction cloning, such as
- compiling directly for hardware transaction support. But
- they still should all be transactional clones of some sort
- so go ahead and call them that. */
- case 't':
- return d_make_comp (di, DEMANGLE_COMPONENT_TRANSACTION_CLONE,
- d_encoding (di, 0), NULL);
- }
-
- case 'r':
- return d_java_resource (di);
-
- default:
- return NULL;
- }
- }
- else
- return NULL;
-}
-
-/* <call-offset> ::= h <nv-offset> _
- ::= v <v-offset> _
-
- <nv-offset> ::= <(offset) number>
-
- <v-offset> ::= <(offset) number> _ <(virtual offset) number>
-
- The C parameter, if not '\0', is a character we just read which is
- the start of the <call-offset>.
-
- We don't display the offset information anywhere. FIXME: We should
- display it in verbose mode. */
-
-static int
-d_call_offset (struct d_info *di, int c)
-{
- if (c == '\0')
- c = d_next_char (di);
-
- if (c == 'h')
- d_number (di);
- else if (c == 'v')
- {
- d_number (di);
- if (! d_check_char (di, '_'))
- return 0;
- d_number (di);
- }
- else
- return 0;
-
- if (! d_check_char (di, '_'))
- return 0;
-
- return 1;
-}
-
-/* <ctor-dtor-name> ::= C1
- ::= C2
- ::= C3
- ::= D0
- ::= D1
- ::= D2
-*/
-
-static struct demangle_component *
-d_ctor_dtor_name (struct d_info *di)
-{
- if (di->last_name != NULL)
- {
- if (di->last_name->type == DEMANGLE_COMPONENT_NAME)
- di->expansion += di->last_name->u.s_name.len;
- else if (di->last_name->type == DEMANGLE_COMPONENT_SUB_STD)
- di->expansion += di->last_name->u.s_string.len;
- }
- switch (d_peek_char (di))
- {
- case 'C':
- {
- enum gnu_v3_ctor_kinds kind;
-
- switch (d_peek_next_char (di))
- {
- case '1':
- kind = gnu_v3_complete_object_ctor;
- break;
- case '2':
- kind = gnu_v3_base_object_ctor;
- break;
- case '3':
- kind = gnu_v3_complete_object_allocating_ctor;
- break;
- case '5':
- kind = gnu_v3_object_ctor_group;
- break;
- default:
- return NULL;
- }
- d_advance (di, 2);
- return d_make_ctor (di, kind, di->last_name);
- }
-
- case 'D':
- {
- enum gnu_v3_dtor_kinds kind;
-
- switch (d_peek_next_char (di))
- {
- case '0':
- kind = gnu_v3_deleting_dtor;
- break;
- case '1':
- kind = gnu_v3_complete_object_dtor;
- break;
- case '2':
- kind = gnu_v3_base_object_dtor;
- break;
- case '5':
- kind = gnu_v3_object_dtor_group;
- break;
- default:
- return NULL;
- }
- d_advance (di, 2);
- return d_make_dtor (di, kind, di->last_name);
- }
-
- default:
- return NULL;
- }
-}
-
-/* <type> ::= <builtin-type>
- ::= <function-type>
- ::= <class-enum-type>
- ::= <array-type>
- ::= <pointer-to-member-type>
- ::= <template-param>
- ::= <template-template-param> <template-args>
- ::= <substitution>
- ::= <CV-qualifiers> <type>
- ::= P <type>
- ::= R <type>
- ::= O <type> (C++0x)
- ::= C <type>
- ::= G <type>
- ::= U <source-name> <type>
-
- <builtin-type> ::= various one letter codes
- ::= u <source-name>
-*/
-
-CP_STATIC_IF_GLIBCPP_V3
-const struct demangle_builtin_type_info
-cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT] =
-{
- /* a */ { NL ("signed char"), NL ("signed char"), D_PRINT_DEFAULT },
- /* b */ { NL ("bool"), NL ("boolean"), D_PRINT_BOOL },
- /* c */ { NL ("char"), NL ("byte"), D_PRINT_DEFAULT },
- /* d */ { NL ("double"), NL ("double"), D_PRINT_FLOAT },
- /* e */ { NL ("long double"), NL ("long double"), D_PRINT_FLOAT },
- /* f */ { NL ("float"), NL ("float"), D_PRINT_FLOAT },
- /* g */ { NL ("__float128"), NL ("__float128"), D_PRINT_FLOAT },
- /* h */ { NL ("unsigned char"), NL ("unsigned char"), D_PRINT_DEFAULT },
- /* i */ { NL ("int"), NL ("int"), D_PRINT_INT },
- /* j */ { NL ("unsigned int"), NL ("unsigned"), D_PRINT_UNSIGNED },
- /* k */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT },
- /* l */ { NL ("long"), NL ("long"), D_PRINT_LONG },
- /* m */ { NL ("unsigned long"), NL ("unsigned long"), D_PRINT_UNSIGNED_LONG },
- /* n */ { NL ("__int128"), NL ("__int128"), D_PRINT_DEFAULT },
- /* o */ { NL ("unsigned __int128"), NL ("unsigned __int128"),
- D_PRINT_DEFAULT },
- /* p */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT },
- /* q */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT },
- /* r */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT },
- /* s */ { NL ("short"), NL ("short"), D_PRINT_DEFAULT },
- /* t */ { NL ("unsigned short"), NL ("unsigned short"), D_PRINT_DEFAULT },
- /* u */ { NULL, 0, NULL, 0, D_PRINT_DEFAULT },
- /* v */ { NL ("void"), NL ("void"), D_PRINT_VOID },
- /* w */ { NL ("wchar_t"), NL ("char"), D_PRINT_DEFAULT },
- /* x */ { NL ("long long"), NL ("long"), D_PRINT_LONG_LONG },
- /* y */ { NL ("unsigned long long"), NL ("unsigned long long"),
- D_PRINT_UNSIGNED_LONG_LONG },
- /* z */ { NL ("..."), NL ("..."), D_PRINT_DEFAULT },
- /* 26 */ { NL ("decimal32"), NL ("decimal32"), D_PRINT_DEFAULT },
- /* 27 */ { NL ("decimal64"), NL ("decimal64"), D_PRINT_DEFAULT },
- /* 28 */ { NL ("decimal128"), NL ("decimal128"), D_PRINT_DEFAULT },
- /* 29 */ { NL ("half"), NL ("half"), D_PRINT_FLOAT },
- /* 30 */ { NL ("char16_t"), NL ("char16_t"), D_PRINT_DEFAULT },
- /* 31 */ { NL ("char32_t"), NL ("char32_t"), D_PRINT_DEFAULT },
- /* 32 */ { NL ("decltype(nullptr)"), NL ("decltype(nullptr)"),
- D_PRINT_DEFAULT },
-};
-
-CP_STATIC_IF_GLIBCPP_V3
-struct demangle_component *
-cplus_demangle_type (struct d_info *di)
-{
- char peek;
- struct demangle_component *ret;
- int can_subst;
-
- /* The ABI specifies that when CV-qualifiers are used, the base type
- is substitutable, and the fully qualified type is substitutable,
- but the base type with a strict subset of the CV-qualifiers is
- not substitutable. The natural recursive implementation of the
- CV-qualifiers would cause subsets to be substitutable, so instead
- we pull them all off now.
-
- FIXME: The ABI says that order-insensitive vendor qualifiers
- should be handled in the same way, but we have no way to tell
- which vendor qualifiers are order-insensitive and which are
- order-sensitive. So we just assume that they are all
- order-sensitive. g++ 3.4 supports only one vendor qualifier,
- __vector, and it treats it as order-sensitive when mangling
- names. */
-
- peek = d_peek_char (di);
- if (peek == 'r' || peek == 'V' || peek == 'K')
- {
- struct demangle_component **pret;
-
- pret = d_cv_qualifiers (di, &ret, 0);
- if (pret == NULL)
- return NULL;
- *pret = cplus_demangle_type (di);
- if (! *pret || ! d_add_substitution (di, ret))
- return NULL;
- return ret;
- }
-
- can_subst = 1;
-
- switch (peek)
- {
- case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g':
- case 'h': case 'i': case 'j': case 'l': case 'm': case 'n':
- case 'o': case 's': case 't':
- case 'v': case 'w': case 'x': case 'y': case 'z':
- ret = d_make_builtin_type (di,
- &cplus_demangle_builtin_types[peek - 'a']);
- di->expansion += ret->u.s_builtin.type->len;
- can_subst = 0;
- d_advance (di, 1);
- break;
-
- case 'u':
- d_advance (di, 1);
- ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE,
- d_source_name (di), NULL);
- break;
-
- case 'F':
- ret = d_function_type (di);
- break;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- case 'N':
- case 'Z':
- ret = d_class_enum_type (di);
- break;
-
- case 'A':
- ret = d_array_type (di);
- break;
-
- case 'M':
- ret = d_pointer_to_member_type (di);
- break;
-
- case 'T':
- ret = d_template_param (di);
- if (d_peek_char (di) == 'I')
- {
- /* This is <template-template-param> <template-args>. The
- <template-template-param> part is a substitution
- candidate. */
- if (! d_add_substitution (di, ret))
- return NULL;
- ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
- d_template_args (di));
- }
- break;
-
- case 'S':
- /* If this is a special substitution, then it is the start of
- <class-enum-type>. */
- {
- char peek_next;
-
- peek_next = d_peek_next_char (di);
- if (IS_DIGIT (peek_next)
- || peek_next == '_'
- || IS_UPPER (peek_next))
- {
- ret = d_substitution (di, 0);
- /* The substituted name may have been a template name and
- may be followed by tepmlate args. */
- if (d_peek_char (di) == 'I')
- ret = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, ret,
- d_template_args (di));
- else
- can_subst = 0;
- }
- else
- {
- ret = d_class_enum_type (di);
- /* If the substitution was a complete type, then it is not
- a new substitution candidate. However, if the
- substitution was followed by template arguments, then
- the whole thing is a substitution candidate. */
- if (ret != NULL && ret->type == DEMANGLE_COMPONENT_SUB_STD)
- can_subst = 0;
- }
- }
- break;
-
- case 'O':
- d_advance (di, 1);
- ret = d_make_comp (di, DEMANGLE_COMPONENT_RVALUE_REFERENCE,
- cplus_demangle_type (di), NULL);
- break;
-
- case 'P':
- d_advance (di, 1);
- ret = d_make_comp (di, DEMANGLE_COMPONENT_POINTER,
- cplus_demangle_type (di), NULL);
- break;
-
- case 'R':
- d_advance (di, 1);
- ret = d_make_comp (di, DEMANGLE_COMPONENT_REFERENCE,
- cplus_demangle_type (di), NULL);
- break;
-
- case 'C':
- d_advance (di, 1);
- ret = d_make_comp (di, DEMANGLE_COMPONENT_COMPLEX,
- cplus_demangle_type (di), NULL);
- break;
-
- case 'G':
- d_advance (di, 1);
- ret = d_make_comp (di, DEMANGLE_COMPONENT_IMAGINARY,
- cplus_demangle_type (di), NULL);
- break;
-
- case 'U':
- d_advance (di, 1);
- ret = d_source_name (di);
- ret = d_make_comp (di, DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL,
- cplus_demangle_type (di), ret);
- break;
-
- case 'D':
- can_subst = 0;
- d_advance (di, 1);
- peek = d_next_char (di);
- switch (peek)
- {
- case 'T':
- case 't':
- /* decltype (expression) */
- ret = d_make_comp (di, DEMANGLE_COMPONENT_DECLTYPE,
- d_expression (di), NULL);
- if (ret && d_next_char (di) != 'E')
- ret = NULL;
- can_subst = 1;
- break;
-
- case 'p':
- /* Pack expansion. */
- ret = d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION,
- cplus_demangle_type (di), NULL);
- can_subst = 1;
- break;
-
- case 'a':
- /* auto */
- ret = d_make_name (di, "auto", 4);
- break;
-
- case 'f':
- /* 32-bit decimal floating point */
- ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[26]);
- di->expansion += ret->u.s_builtin.type->len;
- break;
- case 'd':
- /* 64-bit DFP */
- ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[27]);
- di->expansion += ret->u.s_builtin.type->len;
- break;
- case 'e':
- /* 128-bit DFP */
- ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[28]);
- di->expansion += ret->u.s_builtin.type->len;
- break;
- case 'h':
- /* 16-bit half-precision FP */
- ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[29]);
- di->expansion += ret->u.s_builtin.type->len;
- break;
- case 's':
- /* char16_t */
- ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[30]);
- di->expansion += ret->u.s_builtin.type->len;
- break;
- case 'i':
- /* char32_t */
- ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[31]);
- di->expansion += ret->u.s_builtin.type->len;
- break;
-
- case 'F':
- /* Fixed point types. DF<int bits><length><fract bits><sat> */
- ret = d_make_empty (di);
- ret->type = DEMANGLE_COMPONENT_FIXED_TYPE;
- if ((ret->u.s_fixed.accum = IS_DIGIT (d_peek_char (di))))
- /* For demangling we don't care about the bits. */
- d_number (di);
- ret->u.s_fixed.length = cplus_demangle_type (di);
- if (ret->u.s_fixed.length == NULL)
- return NULL;
- d_number (di);
- peek = d_next_char (di);
- ret->u.s_fixed.sat = (peek == 's');
- break;
-
- case 'v':
- ret = d_vector_type (di);
- can_subst = 1;
- break;
-
- case 'n':
- /* decltype(nullptr) */
- ret = d_make_builtin_type (di, &cplus_demangle_builtin_types[32]);
- di->expansion += ret->u.s_builtin.type->len;
- break;
-
- default:
- return NULL;
- }
- break;
-
- default:
- return NULL;
- }
-
- if (can_subst)
- {
- if (! d_add_substitution (di, ret))
- return NULL;
- }
-
- return ret;
-}
-
-/* <CV-qualifiers> ::= [r] [V] [K] */
-
-static struct demangle_component **
-d_cv_qualifiers (struct d_info *di,
- struct demangle_component **pret, int member_fn)
-{
- struct demangle_component **pstart;
- char peek;
-
- pstart = pret;
- peek = d_peek_char (di);
- while (peek == 'r' || peek == 'V' || peek == 'K')
- {
- enum demangle_component_type t;
-
- d_advance (di, 1);
- if (peek == 'r')
- {
- t = (member_fn
- ? DEMANGLE_COMPONENT_RESTRICT_THIS
- : DEMANGLE_COMPONENT_RESTRICT);
- di->expansion += sizeof "restrict";
- }
- else if (peek == 'V')
- {
- t = (member_fn
- ? DEMANGLE_COMPONENT_VOLATILE_THIS
- : DEMANGLE_COMPONENT_VOLATILE);
- di->expansion += sizeof "volatile";
- }
- else
- {
- t = (member_fn
- ? DEMANGLE_COMPONENT_CONST_THIS
- : DEMANGLE_COMPONENT_CONST);
- di->expansion += sizeof "const";
- }
-
- *pret = d_make_comp (di, t, NULL, NULL);
- if (*pret == NULL)
- return NULL;
- pret = &d_left (*pret);
-
- peek = d_peek_char (di);
- }
-
- if (!member_fn && peek == 'F')
- {
- while (pstart != pret)
- {
- switch ((*pstart)->type)
- {
- case DEMANGLE_COMPONENT_RESTRICT:
- (*pstart)->type = DEMANGLE_COMPONENT_RESTRICT_THIS;
- break;
- case DEMANGLE_COMPONENT_VOLATILE:
- (*pstart)->type = DEMANGLE_COMPONENT_VOLATILE_THIS;
- break;
- case DEMANGLE_COMPONENT_CONST:
- (*pstart)->type = DEMANGLE_COMPONENT_CONST_THIS;
- break;
- default:
- break;
- }
- pstart = &d_left (*pstart);
- }
- }
-
- return pret;
-}
-
-/* <function-type> ::= F [Y] <bare-function-type> E */
-
-static struct demangle_component *
-d_function_type (struct d_info *di)
-{
- struct demangle_component *ret;
-
- if (! d_check_char (di, 'F'))
- return NULL;
- if (d_peek_char (di) == 'Y')
- {
- /* Function has C linkage. We don't print this information.
- FIXME: We should print it in verbose mode. */
- d_advance (di, 1);
- }
- ret = d_bare_function_type (di, 1);
- if (! d_check_char (di, 'E'))
- return NULL;
- return ret;
-}
-
-/* <type>+ */
-
-static struct demangle_component *
-d_parmlist (struct d_info *di)
-{
- struct demangle_component *tl;
- struct demangle_component **ptl;
-
- tl = NULL;
- ptl = &tl;
- while (1)
- {
- struct demangle_component *type;
-
- char peek = d_peek_char (di);
- if (peek == '\0' || peek == 'E' || peek == '.')
- break;
- type = cplus_demangle_type (di);
- if (type == NULL)
- return NULL;
- *ptl = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, type, NULL);
- if (*ptl == NULL)
- return NULL;
- ptl = &d_right (*ptl);
- }
-
- /* There should be at least one parameter type besides the optional
- return type. A function which takes no arguments will have a
- single parameter type void. */
- if (tl == NULL)
- return NULL;
-
- /* If we have a single parameter type void, omit it. */
- if (d_right (tl) == NULL
- && d_left (tl)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
- && d_left (tl)->u.s_builtin.type->print == D_PRINT_VOID)
- {
- di->expansion -= d_left (tl)->u.s_builtin.type->len;
- d_left (tl) = NULL;
- }
-
- return tl;
-}
-
-/* <bare-function-type> ::= [J]<type>+ */
-
-static struct demangle_component *
-d_bare_function_type (struct d_info *di, int has_return_type)
-{
- struct demangle_component *return_type;
- struct demangle_component *tl;
- char peek;
-
- /* Detect special qualifier indicating that the first argument
- is the return type. */
- peek = d_peek_char (di);
- if (peek == 'J')
- {
- d_advance (di, 1);
- has_return_type = 1;
- }
-
- if (has_return_type)
- {
- return_type = cplus_demangle_type (di);
- if (return_type == NULL)
- return NULL;
- }
- else
- return_type = NULL;
-
- tl = d_parmlist (di);
- if (tl == NULL)
- return NULL;
-
- return d_make_comp (di, DEMANGLE_COMPONENT_FUNCTION_TYPE,
- return_type, tl);
-}
-
-/* <class-enum-type> ::= <name> */
-
-static struct demangle_component *
-d_class_enum_type (struct d_info *di)
-{
- return d_name (di);
-}
-
-/* <array-type> ::= A <(positive dimension) number> _ <(element) type>
- ::= A [<(dimension) expression>] _ <(element) type>
-*/
-
-static struct demangle_component *
-d_array_type (struct d_info *di)
-{
- char peek;
- struct demangle_component *dim;
-
- if (! d_check_char (di, 'A'))
- return NULL;
-
- peek = d_peek_char (di);
- if (peek == '_')
- dim = NULL;
- else if (IS_DIGIT (peek))
- {
- const char *s;
-
- s = d_str (di);
- do
- {
- d_advance (di, 1);
- peek = d_peek_char (di);
- }
- while (IS_DIGIT (peek));
- dim = d_make_name (di, s, d_str (di) - s);
- if (dim == NULL)
- return NULL;
- }
- else
- {
- dim = d_expression (di);
- if (dim == NULL)
- return NULL;
- }
-
- if (! d_check_char (di, '_'))
- return NULL;
-
- return d_make_comp (di, DEMANGLE_COMPONENT_ARRAY_TYPE, dim,
- cplus_demangle_type (di));
-}
-
-/* <vector-type> ::= Dv <number> _ <type>
- ::= Dv _ <expression> _ <type> */
-
-static struct demangle_component *
-d_vector_type (struct d_info *di)
-{
- char peek;
- struct demangle_component *dim;
-
- peek = d_peek_char (di);
- if (peek == '_')
- {
- d_advance (di, 1);
- dim = d_expression (di);
- }
- else
- dim = d_number_component (di);
-
- if (dim == NULL)
- return NULL;
-
- if (! d_check_char (di, '_'))
- return NULL;
-
- return d_make_comp (di, DEMANGLE_COMPONENT_VECTOR_TYPE, dim,
- cplus_demangle_type (di));
-}
-
-/* <pointer-to-member-type> ::= M <(class) type> <(member) type> */
-
-static struct demangle_component *
-d_pointer_to_member_type (struct d_info *di)
-{
- struct demangle_component *cl;
- struct demangle_component *mem;
- struct demangle_component **pmem;
-
- if (! d_check_char (di, 'M'))
- return NULL;
-
- cl = cplus_demangle_type (di);
-
- /* The ABI specifies that any type can be a substitution source, and
- that M is followed by two types, and that when a CV-qualified
- type is seen both the base type and the CV-qualified types are
- substitution sources. The ABI also specifies that for a pointer
- to a CV-qualified member function, the qualifiers are attached to
- the second type. Given the grammar, a plain reading of the ABI
- suggests that both the CV-qualified member function and the
- non-qualified member function are substitution sources. However,
- g++ does not work that way. g++ treats only the CV-qualified
- member function as a substitution source. FIXME. So to work
- with g++, we need to pull off the CV-qualifiers here, in order to
- avoid calling add_substitution() in cplus_demangle_type(). But
- for a CV-qualified member which is not a function, g++ does
- follow the ABI, so we need to handle that case here by calling
- d_add_substitution ourselves. */
-
- pmem = d_cv_qualifiers (di, &mem, 1);
- if (pmem == NULL)
- return NULL;
- *pmem = cplus_demangle_type (di);
- if (*pmem == NULL)
- return NULL;
-
- if (pmem != &mem && (*pmem)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
- {
- if (! d_add_substitution (di, mem))
- return NULL;
- }
-
- return d_make_comp (di, DEMANGLE_COMPONENT_PTRMEM_TYPE, cl, mem);
-}
-
-/* <non-negative number> _ */
-
-static long
-d_compact_number (struct d_info *di)
-{
- long num;
- if (d_peek_char (di) == '_')
- num = 0;
- else if (d_peek_char (di) == 'n')
- return -1;
- else
- num = d_number (di) + 1;
-
- if (! d_check_char (di, '_'))
- return -1;
- return num;
-}
-
-/* <template-param> ::= T_
- ::= T <(parameter-2 non-negative) number> _
-*/
-
-static struct demangle_component *
-d_template_param (struct d_info *di)
-{
- long param;
-
- if (! d_check_char (di, 'T'))
- return NULL;
-
- param = d_compact_number (di);
- if (param < 0)
- return NULL;
-
- ++di->did_subs;
-
- return d_make_template_param (di, param);
-}
-
-/* <template-args> ::= I <template-arg>+ E */
-
-static struct demangle_component *
-d_template_args (struct d_info *di)
-{
- struct demangle_component *hold_last_name;
- struct demangle_component *al;
- struct demangle_component **pal;
-
- /* Preserve the last name we saw--don't let the template arguments
- clobber it, as that would give us the wrong name for a subsequent
- constructor or destructor. */
- hold_last_name = di->last_name;
-
- if (d_peek_char (di) != 'I'
- && d_peek_char (di) != 'J')
- return NULL;
- d_advance (di, 1);
-
- if (d_peek_char (di) == 'E')
- {
- /* An argument pack can be empty. */
- d_advance (di, 1);
- return d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, NULL, NULL);
- }
-
- al = NULL;
- pal = &al;
- while (1)
- {
- struct demangle_component *a;
-
- a = d_template_arg (di);
- if (a == NULL)
- return NULL;
-
- *pal = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE_ARGLIST, a, NULL);
- if (*pal == NULL)
- return NULL;
- pal = &d_right (*pal);
-
- if (d_peek_char (di) == 'E')
- {
- d_advance (di, 1);
- break;
- }
- }
-
- di->last_name = hold_last_name;
-
- return al;
-}
-
-/* <template-arg> ::= <type>
- ::= X <expression> E
- ::= <expr-primary>
-*/
-
-static struct demangle_component *
-d_template_arg (struct d_info *di)
-{
- struct demangle_component *ret;
-
- switch (d_peek_char (di))
- {
- case 'X':
- d_advance (di, 1);
- ret = d_expression (di);
- if (! d_check_char (di, 'E'))
- return NULL;
- return ret;
-
- case 'L':
- return d_expr_primary (di);
-
- case 'I':
- case 'J':
- /* An argument pack. */
- return d_template_args (di);
-
- default:
- return cplus_demangle_type (di);
- }
-}
-
-/* Parse a sequence of expressions until we hit the terminator
- character. */
-
-static struct demangle_component *
-d_exprlist (struct d_info *di, char terminator)
-{
- struct demangle_component *list = NULL;
- struct demangle_component **p = &list;
-
- if (d_peek_char (di) == terminator)
- {
- d_advance (di, 1);
- return d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, NULL, NULL);
- }
-
- while (1)
- {
- struct demangle_component *arg = d_expression (di);
- if (arg == NULL)
- return NULL;
-
- *p = d_make_comp (di, DEMANGLE_COMPONENT_ARGLIST, arg, NULL);
- if (*p == NULL)
- return NULL;
- p = &d_right (*p);
-
- if (d_peek_char (di) == terminator)
- {
- d_advance (di, 1);
- break;
- }
- }
-
- return list;
-}
-
-/* <expression> ::= <(unary) operator-name> <expression>
- ::= <(binary) operator-name> <expression> <expression>
- ::= <(trinary) operator-name> <expression> <expression> <expression>
- ::= cl <expression>+ E
- ::= st <type>
- ::= <template-param>
- ::= sr <type> <unqualified-name>
- ::= sr <type> <unqualified-name> <template-args>
- ::= <expr-primary>
-*/
-
-static struct demangle_component *
-d_expression (struct d_info *di)
-{
- char peek;
-
- peek = d_peek_char (di);
- if (peek == 'L')
- return d_expr_primary (di);
- else if (peek == 'T')
- return d_template_param (di);
- else if (peek == 's' && d_peek_next_char (di) == 'r')
- {
- struct demangle_component *type;
- struct demangle_component *name;
-
- d_advance (di, 2);
- type = cplus_demangle_type (di);
- name = d_unqualified_name (di);
- if (d_peek_char (di) != 'I')
- return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type, name);
- else
- return d_make_comp (di, DEMANGLE_COMPONENT_QUAL_NAME, type,
- d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
- d_template_args (di)));
- }
- else if (peek == 's' && d_peek_next_char (di) == 'p')
- {
- d_advance (di, 2);
- return d_make_comp (di, DEMANGLE_COMPONENT_PACK_EXPANSION,
- d_expression (di), NULL);
- }
- else if (peek == 'f' && d_peek_next_char (di) == 'p')
- {
- /* Function parameter used in a late-specified return type. */
- int index;
- d_advance (di, 2);
- if (d_peek_char (di) == 'T')
- {
- /* 'this' parameter. */
- d_advance (di, 1);
- index = 0;
- }
- else
- {
- index = d_compact_number (di) + 1;
- if (index == 0)
- return NULL;
- }
- return d_make_function_param (di, index);
- }
- else if (IS_DIGIT (peek)
- || (peek == 'o' && d_peek_next_char (di) == 'n'))
- {
- /* We can get an unqualified name as an expression in the case of
- a dependent function call, i.e. decltype(f(t)). */
- struct demangle_component *name;
-
- if (peek == 'o')
- /* operator-function-id, i.e. operator+(t). */
- d_advance (di, 2);
-
- name = d_unqualified_name (di);
- if (name == NULL)
- return NULL;
- if (d_peek_char (di) == 'I')
- return d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE, name,
- d_template_args (di));
- else
- return name;
- }
- else if ((peek == 'i' || peek == 't')
- && d_peek_next_char (di) == 'l')
- {
- /* Brace-enclosed initializer list, untyped or typed. */
- struct demangle_component *type = NULL;
- if (peek == 't')
- type = cplus_demangle_type (di);
- d_advance (di, 2);
- return d_make_comp (di, DEMANGLE_COMPONENT_INITIALIZER_LIST,
- type, d_exprlist (di, 'E'));
- }
- else
- {
- struct demangle_component *op;
- const char *code = NULL;
- int args;
-
- op = d_operator_name (di);
- if (op == NULL)
- return NULL;
-
- if (op->type == DEMANGLE_COMPONENT_OPERATOR)
- {
- code = op->u.s_operator.op->code;
- di->expansion += op->u.s_operator.op->len - 2;
- if (strcmp (code, "st") == 0)
- return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
- cplus_demangle_type (di));
- }
-
- switch (op->type)
- {
- default:
- return NULL;
- case DEMANGLE_COMPONENT_OPERATOR:
- args = op->u.s_operator.op->args;
- break;
- case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
- args = op->u.s_extended_operator.args;
- break;
- case DEMANGLE_COMPONENT_CAST:
- args = 1;
- break;
- }
-
- switch (args)
- {
- case 0:
- return d_make_comp (di, DEMANGLE_COMPONENT_NULLARY, op, NULL);
-
- case 1:
- {
- struct demangle_component *operand;
- int suffix = 0;
-
- if (code && (code[0] == 'p' || code[0] == 'm')
- && code[1] == code[0])
- /* pp_ and mm_ are the prefix variants. */
- suffix = !d_check_char (di, '_');
-
- if (op->type == DEMANGLE_COMPONENT_CAST
- && d_check_char (di, '_'))
- operand = d_exprlist (di, 'E');
- else
- operand = d_expression (di);
-
- if (suffix)
- /* Indicate the suffix variant for d_print_comp. */
- return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
- d_make_comp (di,
- DEMANGLE_COMPONENT_BINARY_ARGS,
- operand, operand));
- else
- return d_make_comp (di, DEMANGLE_COMPONENT_UNARY, op,
- operand);
- }
- case 2:
- {
- struct demangle_component *left;
- struct demangle_component *right;
-
- left = d_expression (di);
- if (!strcmp (code, "cl"))
- right = d_exprlist (di, 'E');
- else if (!strcmp (code, "dt") || !strcmp (code, "pt"))
- {
- right = d_unqualified_name (di);
- if (d_peek_char (di) == 'I')
- right = d_make_comp (di, DEMANGLE_COMPONENT_TEMPLATE,
- right, d_template_args (di));
- }
- else
- right = d_expression (di);
-
- return d_make_comp (di, DEMANGLE_COMPONENT_BINARY, op,
- d_make_comp (di,
- DEMANGLE_COMPONENT_BINARY_ARGS,
- left, right));
- }
- case 3:
- {
- struct demangle_component *first;
- struct demangle_component *second;
- struct demangle_component *third;
-
- if (!strcmp (code, "qu"))
- {
- /* ?: expression. */
- first = d_expression (di);
- second = d_expression (di);
- third = d_expression (di);
- }
- else if (code[0] == 'n')
- {
- /* new-expression. */
- if (code[1] != 'w' && code[1] != 'a')
- return NULL;
- first = d_exprlist (di, '_');
- second = cplus_demangle_type (di);
- if (d_peek_char (di) == 'E')
- {
- d_advance (di, 1);
- third = NULL;
- }
- else if (d_peek_char (di) == 'p'
- && d_peek_next_char (di) == 'i')
- {
- /* Parenthesized initializer. */
- d_advance (di, 2);
- third = d_exprlist (di, 'E');
- }
- else if (d_peek_char (di) == 'i'
- && d_peek_next_char (di) == 'l')
- /* initializer-list. */
- third = d_expression (di);
- else
- return NULL;
- }
- else
- return NULL;
- return d_make_comp (di, DEMANGLE_COMPONENT_TRINARY, op,
- d_make_comp (di,
- DEMANGLE_COMPONENT_TRINARY_ARG1,
- first,
- d_make_comp (di,
- DEMANGLE_COMPONENT_TRINARY_ARG2,
- second, third)));
- }
- default:
- return NULL;
- }
- }
-}
-
-/* <expr-primary> ::= L <type> <(value) number> E
- ::= L <type> <(value) float> E
- ::= L <mangled-name> E
-*/
-
-static struct demangle_component *
-d_expr_primary (struct d_info *di)
-{
- struct demangle_component *ret;
-
- if (! d_check_char (di, 'L'))
- return NULL;
- if (d_peek_char (di) == '_'
- /* Workaround for G++ bug; see comment in write_template_arg. */
- || d_peek_char (di) == 'Z')
- ret = cplus_demangle_mangled_name (di, 0);
- else
- {
- struct demangle_component *type;
- enum demangle_component_type t;
- const char *s;
-
- type = cplus_demangle_type (di);
- if (type == NULL)
- return NULL;
-
- /* If we have a type we know how to print, we aren't going to
- print the type name itself. */
- if (type->type == DEMANGLE_COMPONENT_BUILTIN_TYPE
- && type->u.s_builtin.type->print != D_PRINT_DEFAULT)
- di->expansion -= type->u.s_builtin.type->len;
-
- /* Rather than try to interpret the literal value, we just
- collect it as a string. Note that it's possible to have a
- floating point literal here. The ABI specifies that the
- format of such literals is machine independent. That's fine,
- but what's not fine is that versions of g++ up to 3.2 with
- -fabi-version=1 used upper case letters in the hex constant,
- and dumped out gcc's internal representation. That makes it
- hard to tell where the constant ends, and hard to dump the
- constant in any readable form anyhow. We don't attempt to
- handle these cases. */
-
- t = DEMANGLE_COMPONENT_LITERAL;
- if (d_peek_char (di) == 'n')
- {
- t = DEMANGLE_COMPONENT_LITERAL_NEG;
- d_advance (di, 1);
- }
- s = d_str (di);
- while (d_peek_char (di) != 'E')
- {
- if (d_peek_char (di) == '\0')
- return NULL;
- d_advance (di, 1);
- }
- ret = d_make_comp (di, t, type, d_make_name (di, s, d_str (di) - s));
- }
- if (! d_check_char (di, 'E'))
- return NULL;
- return ret;
-}
-
-/* <local-name> ::= Z <(function) encoding> E <(entity) name> [<discriminator>]
- ::= Z <(function) encoding> E s [<discriminator>]
-*/
-
-static struct demangle_component *
-d_local_name (struct d_info *di)
-{
- struct demangle_component *function;
-
- if (! d_check_char (di, 'Z'))
- return NULL;
-
- function = d_encoding (di, 0);
-
- if (! d_check_char (di, 'E'))
- return NULL;
-
- if (d_peek_char (di) == 's')
- {
- d_advance (di, 1);
- if (! d_discriminator (di))
- return NULL;
- return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function,
- d_make_name (di, "string literal",
- sizeof "string literal" - 1));
- }
- else
- {
- struct demangle_component *name;
- int num = -1;
-
- if (d_peek_char (di) == 'd')
- {
- /* Default argument scope: d <number> _. */
- d_advance (di, 1);
- num = d_compact_number (di);
- if (num < 0)
- return NULL;
- }
-
- name = d_name (di);
- if (name)
- switch (name->type)
- {
- /* Lambdas and unnamed types have internal discriminators. */
- case DEMANGLE_COMPONENT_LAMBDA:
- case DEMANGLE_COMPONENT_UNNAMED_TYPE:
- break;
- default:
- if (! d_discriminator (di))
- return NULL;
- }
- if (num >= 0)
- name = d_make_default_arg (di, num, name);
- return d_make_comp (di, DEMANGLE_COMPONENT_LOCAL_NAME, function, name);
- }
-}
-
-/* <discriminator> ::= _ <(non-negative) number>
-
- We demangle the discriminator, but we don't print it out. FIXME:
- We should print it out in verbose mode. */
-
-static int
-d_discriminator (struct d_info *di)
-{
- long discrim;
-
- if (d_peek_char (di) != '_')
- return 1;
- d_advance (di, 1);
- discrim = d_number (di);
- if (discrim < 0)
- return 0;
- return 1;
-}
-
-/* <closure-type-name> ::= Ul <lambda-sig> E [ <nonnegative number> ] _ */
-
-static struct demangle_component *
-d_lambda (struct d_info *di)
-{
- struct demangle_component *tl;
- struct demangle_component *ret;
- int num;
-
- if (! d_check_char (di, 'U'))
- return NULL;
- if (! d_check_char (di, 'l'))
- return NULL;
-
- tl = d_parmlist (di);
- if (tl == NULL)
- return NULL;
-
- if (! d_check_char (di, 'E'))
- return NULL;
-
- num = d_compact_number (di);
- if (num < 0)
- return NULL;
-
- ret = d_make_empty (di);
- if (ret)
- {
- ret->type = DEMANGLE_COMPONENT_LAMBDA;
- ret->u.s_unary_num.sub = tl;
- ret->u.s_unary_num.num = num;
- }
-
- if (! d_add_substitution (di, ret))
- return NULL;
-
- return ret;
-}
-
-/* <unnamed-type-name> ::= Ut [ <nonnegative number> ] _ */
-
-static struct demangle_component *
-d_unnamed_type (struct d_info *di)
-{
- struct demangle_component *ret;
- long num;
-
- if (! d_check_char (di, 'U'))
- return NULL;
- if (! d_check_char (di, 't'))
- return NULL;
-
- num = d_compact_number (di);
- if (num < 0)
- return NULL;
-
- ret = d_make_empty (di);
- if (ret)
- {
- ret->type = DEMANGLE_COMPONENT_UNNAMED_TYPE;
- ret->u.s_number.number = num;
- }
-
- if (! d_add_substitution (di, ret))
- return NULL;
-
- return ret;
-}
-
-/* <clone-suffix> ::= [ . <clone-type-identifier> ] [ . <nonnegative number> ]*
-*/
-
-static struct demangle_component *
-d_clone_suffix (struct d_info *di, struct demangle_component *encoding)
-{
- const char *suffix = d_str (di);
- const char *pend = suffix;
- struct demangle_component *n;
-
- if (*pend == '.' && (IS_LOWER (pend[1]) || pend[1] == '_'))
- {
- pend += 2;
- while (IS_LOWER (*pend) || *pend == '_')
- ++pend;
- }
- while (*pend == '.' && IS_DIGIT (pend[1]))
- {
- pend += 2;
- while (IS_DIGIT (*pend))
- ++pend;
- }
- d_advance (di, pend - suffix);
- n = d_make_name (di, suffix, pend - suffix);
- return d_make_comp (di, DEMANGLE_COMPONENT_CLONE, encoding, n);
-}
-
-/* Add a new substitution. */
-
-static int
-d_add_substitution (struct d_info *di, struct demangle_component *dc)
-{
- if (dc == NULL)
- return 0;
- if (di->next_sub >= di->num_subs)
- return 0;
- di->subs[di->next_sub] = dc;
- ++di->next_sub;
- return 1;
-}
-
-/* <substitution> ::= S <seq-id> _
- ::= S_
- ::= St
- ::= Sa
- ::= Sb
- ::= Ss
- ::= Si
- ::= So
- ::= Sd
-
- If PREFIX is non-zero, then this type is being used as a prefix in
- a qualified name. In this case, for the standard substitutions, we
- need to check whether we are being used as a prefix for a
- constructor or destructor, and return a full template name.
- Otherwise we will get something like std::iostream::~iostream()
- which does not correspond particularly well to any function which
- actually appears in the source.
-*/
-
-static const struct d_standard_sub_info standard_subs[] =
-{
- { 't', NL ("std"),
- NL ("std"),
- NULL, 0 },
- { 'a', NL ("std::allocator"),
- NL ("std::allocator"),
- NL ("allocator") },
- { 'b', NL ("std::basic_string"),
- NL ("std::basic_string"),
- NL ("basic_string") },
- { 's', NL ("std::string"),
- NL ("std::basic_string<char, std::char_traits<char>, std::allocator<char> >"),
- NL ("basic_string") },
- { 'i', NL ("std::istream"),
- NL ("std::basic_istream<char, std::char_traits<char> >"),
- NL ("basic_istream") },
- { 'o', NL ("std::ostream"),
- NL ("std::basic_ostream<char, std::char_traits<char> >"),
- NL ("basic_ostream") },
- { 'd', NL ("std::iostream"),
- NL ("std::basic_iostream<char, std::char_traits<char> >"),
- NL ("basic_iostream") }
-};
-
-static struct demangle_component *
-d_substitution (struct d_info *di, int prefix)
-{
- char c;
-
- if (! d_check_char (di, 'S'))
- return NULL;
-
- c = d_next_char (di);
- if (c == '_' || IS_DIGIT (c) || IS_UPPER (c))
- {
- unsigned int id;
-
- id = 0;
- if (c != '_')
- {
- do
- {
- unsigned int new_id;
-
- if (IS_DIGIT (c))
- new_id = id * 36 + c - '0';
- else if (IS_UPPER (c))
- new_id = id * 36 + c - 'A' + 10;
- else
- return NULL;
- if (new_id < id)
- return NULL;
- id = new_id;
- c = d_next_char (di);
- }
- while (c != '_');
-
- ++id;
- }
-
- if (id >= (unsigned int) di->next_sub)
- return NULL;
-
- ++di->did_subs;
-
- return di->subs[id];
- }
- else
- {
- int verbose;
- const struct d_standard_sub_info *p;
- const struct d_standard_sub_info *pend;
-
- verbose = (di->options & DMGL_VERBOSE) != 0;
- if (! verbose && prefix)
- {
- char peek;
-
- peek = d_peek_char (di);
- if (peek == 'C' || peek == 'D')
- verbose = 1;
- }
-
- pend = (&standard_subs[0]
- + sizeof standard_subs / sizeof standard_subs[0]);
- for (p = &standard_subs[0]; p < pend; ++p)
- {
- if (c == p->code)
- {
- const char *s;
- int len;
-
- if (p->set_last_name != NULL)
- di->last_name = d_make_sub (di, p->set_last_name,
- p->set_last_name_len);
- if (verbose)
- {
- s = p->full_expansion;
- len = p->full_len;
- }
- else
- {
- s = p->simple_expansion;
- len = p->simple_len;
- }
- di->expansion += len;
- return d_make_sub (di, s, len);
- }
- }
-
- return NULL;
- }
-}
-
-/* Initialize a growable string. */
-
-static void
-d_growable_string_init (struct d_growable_string *dgs, size_t estimate)
-{
- dgs->buf = NULL;
- dgs->len = 0;
- dgs->alc = 0;
- dgs->allocation_failure = 0;
-
- if (estimate > 0)
- d_growable_string_resize (dgs, estimate);
-}
-
-/* Grow a growable string to a given size. */
-
-static inline void
-d_growable_string_resize (struct d_growable_string *dgs, size_t need)
-{
- size_t newalc;
- char *newbuf;
-
- if (dgs->allocation_failure)
- return;
-
- /* Start allocation at two bytes to avoid any possibility of confusion
- with the special value of 1 used as a return in *palc to indicate
- allocation failures. */
- newalc = dgs->alc > 0 ? dgs->alc : 2;
- while (newalc < need)
- newalc <<= 1;
-
- newbuf = (char *) realloc (dgs->buf, newalc);
- if (newbuf == NULL)
- {
- free (dgs->buf);
- dgs->buf = NULL;
- dgs->len = 0;
- dgs->alc = 0;
- dgs->allocation_failure = 1;
- return;
- }
- dgs->buf = newbuf;
- dgs->alc = newalc;
-}
-
-/* Append a buffer to a growable string. */
-
-static inline void
-d_growable_string_append_buffer (struct d_growable_string *dgs,
- const char *s, size_t l)
-{
- size_t need;
-
- need = dgs->len + l + 1;
- if (need > dgs->alc)
- d_growable_string_resize (dgs, need);
-
- if (dgs->allocation_failure)
- return;
-
- memcpy (dgs->buf + dgs->len, s, l);
- dgs->buf[dgs->len + l] = '\0';
- dgs->len += l;
-}
-
-/* Bridge growable strings to the callback mechanism. */
-
-static void
-d_growable_string_callback_adapter (const char *s, size_t l, void *opaque)
-{
- struct d_growable_string *dgs = (struct d_growable_string*) opaque;
-
- d_growable_string_append_buffer (dgs, s, l);
-}
-
-/* Initialize a print information structure. */
-
-static void
-d_print_init (struct d_print_info *dpi, demangle_callbackref callback,
- void *opaque)
-{
- dpi->len = 0;
- dpi->last_char = '\0';
- dpi->templates = NULL;
- dpi->modifiers = NULL;
- dpi->pack_index = 0;
- dpi->flush_count = 0;
-
- dpi->callback = callback;
- dpi->opaque = opaque;
-
- dpi->demangle_failure = 0;
-}
-
-/* Indicate that an error occurred during printing, and test for error. */
-
-static inline void
-d_print_error (struct d_print_info *dpi)
-{
- dpi->demangle_failure = 1;
-}
-
-static inline int
-d_print_saw_error (struct d_print_info *dpi)
-{
- return dpi->demangle_failure != 0;
-}
-
-/* Flush buffered characters to the callback. */
-
-static inline void
-d_print_flush (struct d_print_info *dpi)
-{
- dpi->buf[dpi->len] = '\0';
- dpi->callback (dpi->buf, dpi->len, dpi->opaque);
- dpi->len = 0;
- dpi->flush_count++;
-}
-
-/* Append characters and buffers for printing. */
-
-static inline void
-d_append_char (struct d_print_info *dpi, char c)
-{
- if (dpi->len == sizeof (dpi->buf) - 1)
- d_print_flush (dpi);
-
- dpi->buf[dpi->len++] = c;
- dpi->last_char = c;
-}
-
-static inline void
-d_append_buffer (struct d_print_info *dpi, const char *s, size_t l)
-{
- size_t i;
-
- for (i = 0; i < l; i++)
- d_append_char (dpi, s[i]);
-}
-
-static inline void
-d_append_string (struct d_print_info *dpi, const char *s)
-{
- d_append_buffer (dpi, s, strlen (s));
-}
-
-static inline void
-d_append_num (struct d_print_info *dpi, long l)
-{
- char buf[25];
- sprintf (buf,"%ld", l);
- d_append_string (dpi, buf);
-}
-
-static inline char
-d_last_char (struct d_print_info *dpi)
-{
- return dpi->last_char;
-}
-
-/* Turn components into a human readable string. OPTIONS is the
- options bits passed to the demangler. DC is the tree to print.
- CALLBACK is a function to call to flush demangled string segments
- as they fill the intermediate buffer, and OPAQUE is a generalized
- callback argument. On success, this returns 1. On failure,
- it returns 0, indicating a bad parse. It does not use heap
- memory to build an output string, so cannot encounter memory
- allocation failure. */
-
-CP_STATIC_IF_GLIBCPP_V3
-int
-cplus_demangle_print_callback (int options,
- const struct demangle_component *dc,
- demangle_callbackref callback, void *opaque)
-{
- struct d_print_info dpi;
-
- d_print_init (&dpi, callback, opaque);
-
- d_print_comp (&dpi, options, dc);
-
- d_print_flush (&dpi);
-
- return ! d_print_saw_error (&dpi);
-}
-
-/* Turn components into a human readable string. OPTIONS is the
- options bits passed to the demangler. DC is the tree to print.
- ESTIMATE is a guess at the length of the result. This returns a
- string allocated by malloc, or NULL on error. On success, this
- sets *PALC to the size of the allocated buffer. On failure, this
- sets *PALC to 0 for a bad parse, or to 1 for a memory allocation
- failure. */
-
-CP_STATIC_IF_GLIBCPP_V3
-char *
-cplus_demangle_print (int options, const struct demangle_component *dc,
- int estimate, size_t *palc)
-{
- struct d_growable_string dgs;
-
- d_growable_string_init (&dgs, estimate);
-
- if (! cplus_demangle_print_callback (options, dc,
- d_growable_string_callback_adapter,
- &dgs))
- {
- free (dgs.buf);
- *palc = 0;
- return NULL;
- }
-
- *palc = dgs.allocation_failure ? 1 : dgs.alc;
- return dgs.buf;
-}
-
-/* Returns the I'th element of the template arglist ARGS, or NULL on
- failure. */
-
-static struct demangle_component *
-d_index_template_argument (struct demangle_component *args, int i)
-{
- struct demangle_component *a;
-
- for (a = args;
- a != NULL;
- a = d_right (a))
- {
- if (a->type != DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
- return NULL;
- if (i <= 0)
- break;
- --i;
- }
- if (i != 0 || a == NULL)
- return NULL;
-
- return d_left (a);
-}
-
-/* Returns the template argument from the current context indicated by DC,
- which is a DEMANGLE_COMPONENT_TEMPLATE_PARAM, or NULL. */
-
-static struct demangle_component *
-d_lookup_template_argument (struct d_print_info *dpi,
- const struct demangle_component *dc)
-{
- if (dpi->templates == NULL)
- {
- d_print_error (dpi);
- return NULL;
- }
-
- return d_index_template_argument
- (d_right (dpi->templates->template_decl),
- dc->u.s_number.number);
-}
-
-/* Returns a template argument pack used in DC (any will do), or NULL. */
-
-static struct demangle_component *
-d_find_pack (struct d_print_info *dpi,
- const struct demangle_component *dc)
-{
- struct demangle_component *a;
- if (dc == NULL)
- return NULL;
-
- switch (dc->type)
- {
- case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
- a = d_lookup_template_argument (dpi, dc);
- if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
- return a;
- return NULL;
-
- case DEMANGLE_COMPONENT_PACK_EXPANSION:
- return NULL;
-
- case DEMANGLE_COMPONENT_LAMBDA:
- case DEMANGLE_COMPONENT_NAME:
- case DEMANGLE_COMPONENT_OPERATOR:
- case DEMANGLE_COMPONENT_BUILTIN_TYPE:
- case DEMANGLE_COMPONENT_SUB_STD:
- case DEMANGLE_COMPONENT_CHARACTER:
- case DEMANGLE_COMPONENT_FUNCTION_PARAM:
- return NULL;
-
- case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
- return d_find_pack (dpi, dc->u.s_extended_operator.name);
- case DEMANGLE_COMPONENT_CTOR:
- return d_find_pack (dpi, dc->u.s_ctor.name);
- case DEMANGLE_COMPONENT_DTOR:
- return d_find_pack (dpi, dc->u.s_dtor.name);
-
- default:
- a = d_find_pack (dpi, d_left (dc));
- if (a)
- return a;
- return d_find_pack (dpi, d_right (dc));
- }
-}
-
-/* Returns the length of the template argument pack DC. */
-
-static int
-d_pack_length (const struct demangle_component *dc)
-{
- int count = 0;
- while (dc && dc->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST
- && d_left (dc) != NULL)
- {
- ++count;
- dc = d_right (dc);
- }
- return count;
-}
-
-/* DC is a component of a mangled expression. Print it, wrapped in parens
- if needed. */
-
-static void
-d_print_subexpr (struct d_print_info *dpi, int options,
- const struct demangle_component *dc)
-{
- int simple = 0;
- if (dc->type == DEMANGLE_COMPONENT_NAME
- || dc->type == DEMANGLE_COMPONENT_QUAL_NAME
- || dc->type == DEMANGLE_COMPONENT_INITIALIZER_LIST
- || dc->type == DEMANGLE_COMPONENT_FUNCTION_PARAM)
- simple = 1;
- if (!simple)
- d_append_char (dpi, '(');
- d_print_comp (dpi, options, dc);
- if (!simple)
- d_append_char (dpi, ')');
-}
-
-/* Subroutine to handle components. */
-
-static void
-d_print_comp (struct d_print_info *dpi, int options,
- const struct demangle_component *dc)
-{
- /* Magic variable to let reference smashing skip over the next modifier
- without needing to modify *dc. */
- const struct demangle_component *mod_inner = NULL;
-
- if (dc == NULL)
- {
- d_print_error (dpi);
- return;
- }
- if (d_print_saw_error (dpi))
- return;
-
- switch (dc->type)
- {
- case DEMANGLE_COMPONENT_NAME:
- if ((options & DMGL_JAVA) == 0)
- d_append_buffer (dpi, dc->u.s_name.s, dc->u.s_name.len);
- else
- d_print_java_identifier (dpi, dc->u.s_name.s, dc->u.s_name.len);
- return;
-
- case DEMANGLE_COMPONENT_QUAL_NAME:
- case DEMANGLE_COMPONENT_LOCAL_NAME:
- d_print_comp (dpi, options, d_left (dc));
- if ((options & DMGL_JAVA) == 0)
- d_append_string (dpi, "::");
- else
- d_append_char (dpi, '.');
- d_print_comp (dpi, options, d_right (dc));
- return;
-
- case DEMANGLE_COMPONENT_TYPED_NAME:
- {
- struct d_print_mod *hold_modifiers;
- struct demangle_component *typed_name;
- struct d_print_mod adpm[4];
- unsigned int i;
- struct d_print_template dpt;
-
- /* Pass the name down to the type so that it can be printed in
- the right place for the type. We also have to pass down
- any CV-qualifiers, which apply to the this parameter. */
- hold_modifiers = dpi->modifiers;
- dpi->modifiers = 0;
- i = 0;
- typed_name = d_left (dc);
- while (typed_name != NULL)
- {
- if (i >= sizeof adpm / sizeof adpm[0])
- {
- d_print_error (dpi);
- return;
- }
-
- adpm[i].next = dpi->modifiers;
- dpi->modifiers = &adpm[i];
- adpm[i].mod = typed_name;
- adpm[i].printed = 0;
- adpm[i].templates = dpi->templates;
- ++i;
-
- if (typed_name->type != DEMANGLE_COMPONENT_RESTRICT_THIS
- && typed_name->type != DEMANGLE_COMPONENT_VOLATILE_THIS
- && typed_name->type != DEMANGLE_COMPONENT_CONST_THIS)
- break;
-
- typed_name = d_left (typed_name);
- }
-
- if (typed_name == NULL)
- {
- d_print_error (dpi);
- return;
- }
-
- /* If typed_name is a template, then it applies to the
- function type as well. */
- if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
- {
- dpt.next = dpi->templates;
- dpi->templates = &dpt;
- dpt.template_decl = typed_name;
- }
-
- /* If typed_name is a DEMANGLE_COMPONENT_LOCAL_NAME, then
- there may be CV-qualifiers on its right argument which
- really apply here; this happens when parsing a class which
- is local to a function. */
- if (typed_name->type == DEMANGLE_COMPONENT_LOCAL_NAME)
- {
- struct demangle_component *local_name;
-
- local_name = d_right (typed_name);
- if (local_name->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
- local_name = local_name->u.s_unary_num.sub;
- while (local_name->type == DEMANGLE_COMPONENT_RESTRICT_THIS
- || local_name->type == DEMANGLE_COMPONENT_VOLATILE_THIS
- || local_name->type == DEMANGLE_COMPONENT_CONST_THIS)
- {
- if (i >= sizeof adpm / sizeof adpm[0])
- {
- d_print_error (dpi);
- return;
- }
-
- adpm[i] = adpm[i - 1];
- adpm[i].next = &adpm[i - 1];
- dpi->modifiers = &adpm[i];
-
- adpm[i - 1].mod = local_name;
- adpm[i - 1].printed = 0;
- adpm[i - 1].templates = dpi->templates;
- ++i;
-
- local_name = d_left (local_name);
- }
- }
-
- d_print_comp (dpi, options, d_right (dc));
-
- if (typed_name->type == DEMANGLE_COMPONENT_TEMPLATE)
- dpi->templates = dpt.next;
-
- /* If the modifiers didn't get printed by the type, print them
- now. */
- while (i > 0)
- {
- --i;
- if (! adpm[i].printed)
- {
- d_append_char (dpi, ' ');
- d_print_mod (dpi, options, adpm[i].mod);
- }
- }
-
- dpi->modifiers = hold_modifiers;
-
- return;
- }
-
- case DEMANGLE_COMPONENT_TEMPLATE:
- {
- struct d_print_mod *hold_dpm;
- struct demangle_component *dcl;
-
- /* Don't push modifiers into a template definition. Doing so
- could give the wrong definition for a template argument.
- Instead, treat the template essentially as a name. */
-
- hold_dpm = dpi->modifiers;
- dpi->modifiers = NULL;
-
- dcl = d_left (dc);
-
- if ((options & DMGL_JAVA) != 0
- && dcl->type == DEMANGLE_COMPONENT_NAME
- && dcl->u.s_name.len == 6
- && strncmp (dcl->u.s_name.s, "JArray", 6) == 0)
- {
- /* Special-case Java arrays, so that JArray<TYPE> appears
- instead as TYPE[]. */
-
- d_print_comp (dpi, options, d_right (dc));
- d_append_string (dpi, "[]");
- }
- else
- {
- d_print_comp (dpi, options, dcl);
- if (d_last_char (dpi) == '<')
- d_append_char (dpi, ' ');
- d_append_char (dpi, '<');
- d_print_comp (dpi, options, d_right (dc));
- /* Avoid generating two consecutive '>' characters, to avoid
- the C++ syntactic ambiguity. */
- if (d_last_char (dpi) == '>')
- d_append_char (dpi, ' ');
- d_append_char (dpi, '>');
- }
-
- dpi->modifiers = hold_dpm;
-
- return;
- }
-
- case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
- {
- struct d_print_template *hold_dpt;
- struct demangle_component *a = d_lookup_template_argument (dpi, dc);
-
- if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
- a = d_index_template_argument (a, dpi->pack_index);
-
- if (a == NULL)
- {
- d_print_error (dpi);
- return;
- }
-
- /* While processing this parameter, we need to pop the list of
- templates. This is because the template parameter may
- itself be a reference to a parameter of an outer
- template. */
-
- hold_dpt = dpi->templates;
- dpi->templates = hold_dpt->next;
-
- d_print_comp (dpi, options, a);
-
- dpi->templates = hold_dpt;
-
- return;
- }
-
- case DEMANGLE_COMPONENT_CTOR:
- d_print_comp (dpi, options, dc->u.s_ctor.name);
- return;
-
- case DEMANGLE_COMPONENT_DTOR:
- d_append_char (dpi, '~');
- d_print_comp (dpi, options, dc->u.s_dtor.name);
- return;
-
- case DEMANGLE_COMPONENT_VTABLE:
- d_append_string (dpi, "vtable for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_VTT:
- d_append_string (dpi, "VTT for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
- d_append_string (dpi, "construction vtable for ");
- d_print_comp (dpi, options, d_left (dc));
- d_append_string (dpi, "-in-");
- d_print_comp (dpi, options, d_right (dc));
- return;
-
- case DEMANGLE_COMPONENT_TYPEINFO:
- d_append_string (dpi, "typeinfo for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_TYPEINFO_NAME:
- d_append_string (dpi, "typeinfo name for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_TYPEINFO_FN:
- d_append_string (dpi, "typeinfo fn for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_THUNK:
- d_append_string (dpi, "non-virtual thunk to ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
- d_append_string (dpi, "virtual thunk to ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_COVARIANT_THUNK:
- d_append_string (dpi, "covariant return thunk to ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_JAVA_CLASS:
- d_append_string (dpi, "java Class for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_GUARD:
- d_append_string (dpi, "guard variable for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_REFTEMP:
- d_append_string (dpi, "reference temporary #");
- d_print_comp (dpi, options, d_right (dc));
- d_append_string (dpi, " for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_HIDDEN_ALIAS:
- d_append_string (dpi, "hidden alias for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_TRANSACTION_CLONE:
- d_append_string (dpi, "transaction clone for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_NONTRANSACTION_CLONE:
- d_append_string (dpi, "non-transaction clone for ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_SUB_STD:
- d_append_buffer (dpi, dc->u.s_string.string, dc->u.s_string.len);
- return;
-
- case DEMANGLE_COMPONENT_RESTRICT:
- case DEMANGLE_COMPONENT_VOLATILE:
- case DEMANGLE_COMPONENT_CONST:
- {
- struct d_print_mod *pdpm;
-
- /* When printing arrays, it's possible to have cases where the
- same CV-qualifier gets pushed on the stack multiple times.
- We only need to print it once. */
-
- for (pdpm = dpi->modifiers; pdpm != NULL; pdpm = pdpm->next)
- {
- if (! pdpm->printed)
- {
- if (pdpm->mod->type != DEMANGLE_COMPONENT_RESTRICT
- && pdpm->mod->type != DEMANGLE_COMPONENT_VOLATILE
- && pdpm->mod->type != DEMANGLE_COMPONENT_CONST)
- break;
- if (pdpm->mod->type == dc->type)
- {
- d_print_comp (dpi, options, d_left (dc));
- return;
- }
- }
- }
- }
- goto modifier;
-
- case DEMANGLE_COMPONENT_REFERENCE:
- case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
- {
- /* Handle reference smashing: & + && = &. */
- const struct demangle_component *sub = d_left (dc);
- if (sub->type == DEMANGLE_COMPONENT_TEMPLATE_PARAM)
- {
- struct demangle_component *a = d_lookup_template_argument (dpi, sub);
- if (a && a->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)
- a = d_index_template_argument (a, dpi->pack_index);
-
- if (a == NULL)
- {
- d_print_error (dpi);
- return;
- }
-
- sub = a;
- }
-
- if (sub->type == DEMANGLE_COMPONENT_REFERENCE
- || sub->type == dc->type)
- dc = sub;
- else if (sub->type == DEMANGLE_COMPONENT_RVALUE_REFERENCE)
- mod_inner = d_left (sub);
- }
- /* Fall through. */
-
- case DEMANGLE_COMPONENT_RESTRICT_THIS:
- case DEMANGLE_COMPONENT_VOLATILE_THIS:
- case DEMANGLE_COMPONENT_CONST_THIS:
- case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
- case DEMANGLE_COMPONENT_POINTER:
- case DEMANGLE_COMPONENT_COMPLEX:
- case DEMANGLE_COMPONENT_IMAGINARY:
- modifier:
- {
- /* We keep a list of modifiers on the stack. */
- struct d_print_mod dpm;
-
- dpm.next = dpi->modifiers;
- dpi->modifiers = &dpm;
- dpm.mod = dc;
- dpm.printed = 0;
- dpm.templates = dpi->templates;
-
- if (!mod_inner)
- mod_inner = d_left (dc);
-
- d_print_comp (dpi, options, mod_inner);
-
- /* If the modifier didn't get printed by the type, print it
- now. */
- if (! dpm.printed)
- d_print_mod (dpi, options, dc);
-
- dpi->modifiers = dpm.next;
-
- return;
- }
-
- case DEMANGLE_COMPONENT_BUILTIN_TYPE:
- if ((options & DMGL_JAVA) == 0)
- d_append_buffer (dpi, dc->u.s_builtin.type->name,
- dc->u.s_builtin.type->len);
- else
- d_append_buffer (dpi, dc->u.s_builtin.type->java_name,
- dc->u.s_builtin.type->java_len);
- return;
-
- case DEMANGLE_COMPONENT_VENDOR_TYPE:
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_FUNCTION_TYPE:
- {
- if ((options & DMGL_RET_POSTFIX) != 0)
- d_print_function_type (dpi,
- options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
- dc, dpi->modifiers);
-
- /* Print return type if present */
- if (d_left (dc) != NULL && (options & DMGL_RET_POSTFIX) != 0)
- d_print_comp (dpi, options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
- d_left (dc));
- else if (d_left (dc) != NULL && (options & DMGL_RET_DROP) == 0)
- {
- struct d_print_mod dpm;
-
- /* We must pass this type down as a modifier in order to
- print it in the right location. */
- dpm.next = dpi->modifiers;
- dpi->modifiers = &dpm;
- dpm.mod = dc;
- dpm.printed = 0;
- dpm.templates = dpi->templates;
-
- d_print_comp (dpi, options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
- d_left (dc));
-
- dpi->modifiers = dpm.next;
-
- if (dpm.printed)
- return;
-
- /* In standard prefix notation, there is a space between the
- return type and the function signature. */
- if ((options & DMGL_RET_POSTFIX) == 0)
- d_append_char (dpi, ' ');
- }
-
- if ((options & DMGL_RET_POSTFIX) == 0)
- d_print_function_type (dpi,
- options & ~(DMGL_RET_POSTFIX | DMGL_RET_DROP),
- dc, dpi->modifiers);
-
- return;
- }
-
- case DEMANGLE_COMPONENT_ARRAY_TYPE:
- {
- struct d_print_mod *hold_modifiers;
- struct d_print_mod adpm[4];
- unsigned int i;
- struct d_print_mod *pdpm;
-
- /* We must pass this type down as a modifier in order to print
- multi-dimensional arrays correctly. If the array itself is
- CV-qualified, we act as though the element type were
- CV-qualified. We do this by copying the modifiers down
- rather than fiddling pointers, so that we don't wind up
- with a d_print_mod higher on the stack pointing into our
- stack frame after we return. */
-
- hold_modifiers = dpi->modifiers;
-
- adpm[0].next = hold_modifiers;
- dpi->modifiers = &adpm[0];
- adpm[0].mod = dc;
- adpm[0].printed = 0;
- adpm[0].templates = dpi->templates;
-
- i = 1;
- pdpm = hold_modifiers;
- while (pdpm != NULL
- && (pdpm->mod->type == DEMANGLE_COMPONENT_RESTRICT
- || pdpm->mod->type == DEMANGLE_COMPONENT_VOLATILE
- || pdpm->mod->type == DEMANGLE_COMPONENT_CONST))
- {
- if (! pdpm->printed)
- {
- if (i >= sizeof adpm / sizeof adpm[0])
- {
- d_print_error (dpi);
- return;
- }
-
- adpm[i] = *pdpm;
- adpm[i].next = dpi->modifiers;
- dpi->modifiers = &adpm[i];
- pdpm->printed = 1;
- ++i;
- }
-
- pdpm = pdpm->next;
- }
-
- d_print_comp (dpi, options, d_right (dc));
-
- dpi->modifiers = hold_modifiers;
-
- if (adpm[0].printed)
- return;
-
- while (i > 1)
- {
- --i;
- d_print_mod (dpi, options, adpm[i].mod);
- }
-
- d_print_array_type (dpi, options, dc, dpi->modifiers);
-
- return;
- }
-
- case DEMANGLE_COMPONENT_PTRMEM_TYPE:
- case DEMANGLE_COMPONENT_VECTOR_TYPE:
- {
- struct d_print_mod dpm;
-
- dpm.next = dpi->modifiers;
- dpi->modifiers = &dpm;
- dpm.mod = dc;
- dpm.printed = 0;
- dpm.templates = dpi->templates;
-
- d_print_comp (dpi, options, d_right (dc));
-
- /* If the modifier didn't get printed by the type, print it
- now. */
- if (! dpm.printed)
- d_print_mod (dpi, options, dc);
-
- dpi->modifiers = dpm.next;
-
- return;
- }
-
- case DEMANGLE_COMPONENT_FIXED_TYPE:
- if (dc->u.s_fixed.sat)
- d_append_string (dpi, "_Sat ");
- /* Don't print "int _Accum". */
- if (dc->u.s_fixed.length->u.s_builtin.type
- != &cplus_demangle_builtin_types['i'-'a'])
- {
- d_print_comp (dpi, options, dc->u.s_fixed.length);
- d_append_char (dpi, ' ');
- }
- if (dc->u.s_fixed.accum)
- d_append_string (dpi, "_Accum");
- else
- d_append_string (dpi, "_Fract");
- return;
-
- case DEMANGLE_COMPONENT_ARGLIST:
- case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
- if (d_left (dc) != NULL)
- d_print_comp (dpi, options, d_left (dc));
- if (d_right (dc) != NULL)
- {
- size_t len;
- unsigned long int flush_count;
- /* Make sure ", " isn't flushed by d_append_string, otherwise
- dpi->len -= 2 wouldn't work. */
- if (dpi->len >= sizeof (dpi->buf) - 2)
- d_print_flush (dpi);
- d_append_string (dpi, ", ");
- len = dpi->len;
- flush_count = dpi->flush_count;
- d_print_comp (dpi, options, d_right (dc));
- /* If that didn't print anything (which can happen with empty
- template argument packs), remove the comma and space. */
- if (dpi->flush_count == flush_count && dpi->len == len)
- dpi->len -= 2;
- }
- return;
-
- case DEMANGLE_COMPONENT_INITIALIZER_LIST:
- {
- struct demangle_component *type = d_left (dc);
- struct demangle_component *list = d_right (dc);
-
- if (type)
- d_print_comp (dpi, options, type);
- d_append_char (dpi, '{');
- d_print_comp (dpi, options, list);
- d_append_char (dpi, '}');
- }
- return;
-
- case DEMANGLE_COMPONENT_OPERATOR:
- {
- const struct demangle_operator_info *op = dc->u.s_operator.op;
- int len = op->len;
-
- d_append_string (dpi, "operator");
- /* Add a space before new/delete. */
- if (IS_LOWER (op->name[0]))
- d_append_char (dpi, ' ');
- /* Omit a trailing space. */
- if (op->name[len-1] == ' ')
- --len;
- d_append_buffer (dpi, op->name, len);
- return;
- }
-
- case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
- d_append_string (dpi, "operator ");
- d_print_comp (dpi, options, dc->u.s_extended_operator.name);
- return;
-
- case DEMANGLE_COMPONENT_CAST:
- d_append_string (dpi, "operator ");
- d_print_cast (dpi, options, dc);
- return;
-
- case DEMANGLE_COMPONENT_NULLARY:
- d_print_expr_op (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_UNARY:
- {
- struct demangle_component *op = d_left (dc);
- struct demangle_component *operand = d_right (dc);
- const char *code = NULL;
-
- if (op->type == DEMANGLE_COMPONENT_OPERATOR)
- {
- code = op->u.s_operator.op->code;
- if (!strcmp (code, "ad"))
- {
- /* Don't print the argument list for the address of a
- function. */
- if (operand->type == DEMANGLE_COMPONENT_TYPED_NAME
- && d_left (operand)->type == DEMANGLE_COMPONENT_QUAL_NAME
- && d_right (operand)->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
- operand = d_left (operand);
- }
- if (operand->type == DEMANGLE_COMPONENT_BINARY_ARGS)
- {
- /* This indicates a suffix operator. */
- operand = d_left (operand);
- d_print_subexpr (dpi, options, operand);
- d_print_expr_op (dpi, options, op);
- return;
- }
- }
-
- if (op->type != DEMANGLE_COMPONENT_CAST)
- d_print_expr_op (dpi, options, op);
- else
- {
- d_append_char (dpi, '(');
- d_print_cast (dpi, options, op);
- d_append_char (dpi, ')');
- }
- if (code && !strcmp (code, "gs"))
- /* Avoid parens after '::'. */
- d_print_comp (dpi, options, operand);
- else if (code && !strcmp (code, "st"))
- /* Always print parens for sizeof (type). */
- {
- d_append_char (dpi, '(');
- d_print_comp (dpi, options, operand);
- d_append_char (dpi, ')');
- }
- else
- d_print_subexpr (dpi, options, operand);
- }
- return;
-
- case DEMANGLE_COMPONENT_BINARY:
- if (d_right (dc)->type != DEMANGLE_COMPONENT_BINARY_ARGS)
- {
- d_print_error (dpi);
- return;
- }
-
- /* We wrap an expression which uses the greater-than operator in
- an extra layer of parens so that it does not get confused
- with the '>' which ends the template parameters. */
- if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
- && d_left (dc)->u.s_operator.op->len == 1
- && d_left (dc)->u.s_operator.op->name[0] == '>')
- d_append_char (dpi, '(');
-
- if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") == 0
- && d_left (d_right (dc))->type == DEMANGLE_COMPONENT_TYPED_NAME)
- {
- /* Function call used in an expression should not have printed types
- of the function arguments. Values of the function arguments still
- get printed below. */
-
- const struct demangle_component *func = d_left (d_right (dc));
-
- if (d_right (func)->type != DEMANGLE_COMPONENT_FUNCTION_TYPE)
- d_print_error (dpi);
- d_print_subexpr (dpi, options, d_left (func));
- }
- else
- d_print_subexpr (dpi, options, d_left (d_right (dc)));
- if (strcmp (d_left (dc)->u.s_operator.op->code, "ix") == 0)
- {
- d_append_char (dpi, '[');
- d_print_comp (dpi, options, d_right (d_right (dc)));
- d_append_char (dpi, ']');
- }
- else
- {
- if (strcmp (d_left (dc)->u.s_operator.op->code, "cl") != 0)
- d_print_expr_op (dpi, options, d_left (dc));
- d_print_subexpr (dpi, options, d_right (d_right (dc)));
- }
-
- if (d_left (dc)->type == DEMANGLE_COMPONENT_OPERATOR
- && d_left (dc)->u.s_operator.op->len == 1
- && d_left (dc)->u.s_operator.op->name[0] == '>')
- d_append_char (dpi, ')');
-
- return;
-
- case DEMANGLE_COMPONENT_BINARY_ARGS:
- /* We should only see this as part of DEMANGLE_COMPONENT_BINARY. */
- d_print_error (dpi);
- return;
-
- case DEMANGLE_COMPONENT_TRINARY:
- if (d_right (dc)->type != DEMANGLE_COMPONENT_TRINARY_ARG1
- || d_right (d_right (dc))->type != DEMANGLE_COMPONENT_TRINARY_ARG2)
- {
- d_print_error (dpi);
- return;
- }
- {
- struct demangle_component *op = d_left (dc);
- struct demangle_component *first = d_left (d_right (dc));
- struct demangle_component *second = d_left (d_right (d_right (dc)));
- struct demangle_component *third = d_right (d_right (d_right (dc)));
-
- if (!strcmp (op->u.s_operator.op->code, "qu"))
- {
- d_print_subexpr (dpi, options, first);
- d_print_expr_op (dpi, options, op);
- d_print_subexpr (dpi, options, second);
- d_append_string (dpi, " : ");
- d_print_subexpr (dpi, options, third);
- }
- else
- {
- d_append_string (dpi, "new ");
- if (d_left (first) != NULL)
- {
- d_print_subexpr (dpi, options, first);
- d_append_char (dpi, ' ');
- }
- d_print_comp (dpi, options, second);
- if (third)
- d_print_subexpr (dpi, options, third);
- }
- }
- return;
-
- case DEMANGLE_COMPONENT_TRINARY_ARG1:
- case DEMANGLE_COMPONENT_TRINARY_ARG2:
- /* We should only see these are part of DEMANGLE_COMPONENT_TRINARY. */
- d_print_error (dpi);
- return;
-
- case DEMANGLE_COMPONENT_LITERAL:
- case DEMANGLE_COMPONENT_LITERAL_NEG:
- {
- enum d_builtin_type_print tp;
-
- /* For some builtin types, produce simpler output. */
- tp = D_PRINT_DEFAULT;
- if (d_left (dc)->type == DEMANGLE_COMPONENT_BUILTIN_TYPE)
- {
- tp = d_left (dc)->u.s_builtin.type->print;
- switch (tp)
- {
- case D_PRINT_INT:
- case D_PRINT_UNSIGNED:
- case D_PRINT_LONG:
- case D_PRINT_UNSIGNED_LONG:
- case D_PRINT_LONG_LONG:
- case D_PRINT_UNSIGNED_LONG_LONG:
- if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME)
- {
- if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
- d_append_char (dpi, '-');
- d_print_comp (dpi, options, d_right (dc));
- switch (tp)
- {
- default:
- break;
- case D_PRINT_UNSIGNED:
- d_append_char (dpi, 'u');
- break;
- case D_PRINT_LONG:
- d_append_char (dpi, 'l');
- break;
- case D_PRINT_UNSIGNED_LONG:
- d_append_string (dpi, "ul");
- break;
- case D_PRINT_LONG_LONG:
- d_append_string (dpi, "ll");
- break;
- case D_PRINT_UNSIGNED_LONG_LONG:
- d_append_string (dpi, "ull");
- break;
- }
- return;
- }
- break;
-
- case D_PRINT_BOOL:
- if (d_right (dc)->type == DEMANGLE_COMPONENT_NAME
- && d_right (dc)->u.s_name.len == 1
- && dc->type == DEMANGLE_COMPONENT_LITERAL)
- {
- switch (d_right (dc)->u.s_name.s[0])
- {
- case '0':
- d_append_string (dpi, "false");
- return;
- case '1':
- d_append_string (dpi, "true");
- return;
- default:
- break;
- }
- }
- break;
-
- default:
- break;
- }
- }
-
- d_append_char (dpi, '(');
- d_print_comp (dpi, options, d_left (dc));
- d_append_char (dpi, ')');
- if (dc->type == DEMANGLE_COMPONENT_LITERAL_NEG)
- d_append_char (dpi, '-');
- if (tp == D_PRINT_FLOAT)
- d_append_char (dpi, '[');
- d_print_comp (dpi, options, d_right (dc));
- if (tp == D_PRINT_FLOAT)
- d_append_char (dpi, ']');
- }
- return;
-
- case DEMANGLE_COMPONENT_NUMBER:
- d_append_num (dpi, dc->u.s_number.number);
- return;
-
- case DEMANGLE_COMPONENT_JAVA_RESOURCE:
- d_append_string (dpi, "java resource ");
- d_print_comp (dpi, options, d_left (dc));
- return;
-
- case DEMANGLE_COMPONENT_COMPOUND_NAME:
- d_print_comp (dpi, options, d_left (dc));
- d_print_comp (dpi, options, d_right (dc));
- return;
-
- case DEMANGLE_COMPONENT_CHARACTER:
- d_append_char (dpi, dc->u.s_character.character);
- return;
-
- case DEMANGLE_COMPONENT_DECLTYPE:
- d_append_string (dpi, "decltype (");
- d_print_comp (dpi, options, d_left (dc));
- d_append_char (dpi, ')');
- return;
-
- case DEMANGLE_COMPONENT_PACK_EXPANSION:
- {
- int len;
- int i;
- struct demangle_component *a = d_find_pack (dpi, d_left (dc));
- if (a == NULL)
- {
- /* d_find_pack won't find anything if the only packs involved
- in this expansion are function parameter packs; in that
- case, just print the pattern and "...". */
- d_print_subexpr (dpi, options, d_left (dc));
- d_append_string (dpi, "...");
- return;
- }
-
- len = d_pack_length (a);
- dc = d_left (dc);
- for (i = 0; i < len; ++i)
- {
- dpi->pack_index = i;
- d_print_comp (dpi, options, dc);
- if (i < len-1)
- d_append_string (dpi, ", ");
- }
- }
- return;
-
- case DEMANGLE_COMPONENT_FUNCTION_PARAM:
- {
- long num = dc->u.s_number.number;
- if (num == 0)
- d_append_string (dpi, "this");
- else
- {
- d_append_string (dpi, "{parm#");
- d_append_num (dpi, num);
- d_append_char (dpi, '}');
- }
- }
- return;
-
- case DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS:
- d_append_string (dpi, "global constructors keyed to ");
- d_print_comp (dpi, options, dc->u.s_binary.left);
- return;
-
- case DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS:
- d_append_string (dpi, "global destructors keyed to ");
- d_print_comp (dpi, options, dc->u.s_binary.left);
- return;
-
- case DEMANGLE_COMPONENT_LAMBDA:
- d_append_string (dpi, "{lambda(");
- d_print_comp (dpi, options, dc->u.s_unary_num.sub);
- d_append_string (dpi, ")#");
- d_append_num (dpi, dc->u.s_unary_num.num + 1);
- d_append_char (dpi, '}');
- return;
-
- case DEMANGLE_COMPONENT_UNNAMED_TYPE:
- d_append_string (dpi, "{unnamed type#");
- d_append_num (dpi, dc->u.s_number.number + 1);
- d_append_char (dpi, '}');
- return;
-
- case DEMANGLE_COMPONENT_CLONE:
- d_print_comp (dpi, options, d_left (dc));
- d_append_string (dpi, " [clone ");
- d_print_comp (dpi, options, d_right (dc));
- d_append_char (dpi, ']');
- return;
-
- default:
- d_print_error (dpi);
- return;
- }
-}
-
-/* Print a Java dentifier. For Java we try to handle encoded extended
- Unicode characters. The C++ ABI doesn't mention Unicode encoding,
- so we don't it for C++. Characters are encoded as
- __U<hex-char>+_. */
-
-static void
-d_print_java_identifier (struct d_print_info *dpi, const char *name, int len)
-{
- const char *p;
- const char *end;
-
- end = name + len;
- for (p = name; p < end; ++p)
- {
- if (end - p > 3
- && p[0] == '_'
- && p[1] == '_'
- && p[2] == 'U')
- {
- unsigned long c;
- const char *q;
-
- c = 0;
- for (q = p + 3; q < end; ++q)
- {
- int dig;
-
- if (IS_DIGIT (*q))
- dig = *q - '0';
- else if (*q >= 'A' && *q <= 'F')
- dig = *q - 'A' + 10;
- else if (*q >= 'a' && *q <= 'f')
- dig = *q - 'a' + 10;
- else
- break;
-
- c = c * 16 + dig;
- }
- /* If the Unicode character is larger than 256, we don't try
- to deal with it here. FIXME. */
- if (q < end && *q == '_' && c < 256)
- {
- d_append_char (dpi, c);
- p = q;
- continue;
- }
- }
-
- d_append_char (dpi, *p);
- }
-}
-
-/* Print a list of modifiers. SUFFIX is 1 if we are printing
- qualifiers on this after printing a function. */
-
-static void
-d_print_mod_list (struct d_print_info *dpi, int options,
- struct d_print_mod *mods, int suffix)
-{
- struct d_print_template *hold_dpt;
-
- if (mods == NULL || d_print_saw_error (dpi))
- return;
-
- if (mods->printed
- || (! suffix
- && (mods->mod->type == DEMANGLE_COMPONENT_RESTRICT_THIS
- || mods->mod->type == DEMANGLE_COMPONENT_VOLATILE_THIS
- || mods->mod->type == DEMANGLE_COMPONENT_CONST_THIS)))
- {
- d_print_mod_list (dpi, options, mods->next, suffix);
- return;
- }
-
- mods->printed = 1;
-
- hold_dpt = dpi->templates;
- dpi->templates = mods->templates;
-
- if (mods->mod->type == DEMANGLE_COMPONENT_FUNCTION_TYPE)
- {
- d_print_function_type (dpi, options, mods->mod, mods->next);
- dpi->templates = hold_dpt;
- return;
- }
- else if (mods->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
- {
- d_print_array_type (dpi, options, mods->mod, mods->next);
- dpi->templates = hold_dpt;
- return;
- }
- else if (mods->mod->type == DEMANGLE_COMPONENT_LOCAL_NAME)
- {
- struct d_print_mod *hold_modifiers;
- struct demangle_component *dc;
-
- /* When this is on the modifier stack, we have pulled any
- qualifiers off the right argument already. Otherwise, we
- print it as usual, but don't let the left argument see any
- modifiers. */
-
- hold_modifiers = dpi->modifiers;
- dpi->modifiers = NULL;
- d_print_comp (dpi, options, d_left (mods->mod));
- dpi->modifiers = hold_modifiers;
-
- if ((options & DMGL_JAVA) == 0)
- d_append_string (dpi, "::");
- else
- d_append_char (dpi, '.');
-
- dc = d_right (mods->mod);
-
- if (dc->type == DEMANGLE_COMPONENT_DEFAULT_ARG)
- {
- d_append_string (dpi, "{default arg#");
- d_append_num (dpi, dc->u.s_unary_num.num + 1);
- d_append_string (dpi, "}::");
- dc = dc->u.s_unary_num.sub;
- }
-
- while (dc->type == DEMANGLE_COMPONENT_RESTRICT_THIS
- || dc->type == DEMANGLE_COMPONENT_VOLATILE_THIS
- || dc->type == DEMANGLE_COMPONENT_CONST_THIS)
- dc = d_left (dc);
-
- d_print_comp (dpi, options, dc);
-
- dpi->templates = hold_dpt;
- return;
- }
-
- d_print_mod (dpi, options, mods->mod);
-
- dpi->templates = hold_dpt;
-
- d_print_mod_list (dpi, options, mods->next, suffix);
-}
-
-/* Print a modifier. */
-
-static void
-d_print_mod (struct d_print_info *dpi, int options,
- const struct demangle_component *mod)
-{
- switch (mod->type)
- {
- case DEMANGLE_COMPONENT_RESTRICT:
- case DEMANGLE_COMPONENT_RESTRICT_THIS:
- d_append_string (dpi, " restrict");
- return;
- case DEMANGLE_COMPONENT_VOLATILE:
- case DEMANGLE_COMPONENT_VOLATILE_THIS:
- d_append_string (dpi, " volatile");
- return;
- case DEMANGLE_COMPONENT_CONST:
- case DEMANGLE_COMPONENT_CONST_THIS:
- d_append_string (dpi, " const");
- return;
- case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
- d_append_char (dpi, ' ');
- d_print_comp (dpi, options, d_right (mod));
- return;
- case DEMANGLE_COMPONENT_POINTER:
- /* There is no pointer symbol in Java. */
- if ((options & DMGL_JAVA) == 0)
- d_append_char (dpi, '*');
- return;
- case DEMANGLE_COMPONENT_REFERENCE:
- d_append_char (dpi, '&');
- return;
- case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
- d_append_string (dpi, "&&");
- return;
- case DEMANGLE_COMPONENT_COMPLEX:
- d_append_string (dpi, "complex ");
- return;
- case DEMANGLE_COMPONENT_IMAGINARY:
- d_append_string (dpi, "imaginary ");
- return;
- case DEMANGLE_COMPONENT_PTRMEM_TYPE:
- if (d_last_char (dpi) != '(')
- d_append_char (dpi, ' ');
- d_print_comp (dpi, options, d_left (mod));
- d_append_string (dpi, "::*");
- return;
- case DEMANGLE_COMPONENT_TYPED_NAME:
- d_print_comp (dpi, options, d_left (mod));
- return;
- case DEMANGLE_COMPONENT_VECTOR_TYPE:
- d_append_string (dpi, " __vector(");
- d_print_comp (dpi, options, d_left (mod));
- d_append_char (dpi, ')');
- return;
-
- default:
- /* Otherwise, we have something that won't go back on the
- modifier stack, so we can just print it. */
- d_print_comp (dpi, options, mod);
- return;
- }
-}
-
-/* Print a function type, except for the return type. */
-
-static void
-d_print_function_type (struct d_print_info *dpi, int options,
- const struct demangle_component *dc,
- struct d_print_mod *mods)
-{
- int need_paren;
- int need_space;
- struct d_print_mod *p;
- struct d_print_mod *hold_modifiers;
-
- need_paren = 0;
- need_space = 0;
- for (p = mods; p != NULL; p = p->next)
- {
- if (p->printed)
- break;
-
- switch (p->mod->type)
- {
- case DEMANGLE_COMPONENT_POINTER:
- case DEMANGLE_COMPONENT_REFERENCE:
- case DEMANGLE_COMPONENT_RVALUE_REFERENCE:
- need_paren = 1;
- break;
- case DEMANGLE_COMPONENT_RESTRICT:
- case DEMANGLE_COMPONENT_VOLATILE:
- case DEMANGLE_COMPONENT_CONST:
- case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
- case DEMANGLE_COMPONENT_COMPLEX:
- case DEMANGLE_COMPONENT_IMAGINARY:
- case DEMANGLE_COMPONENT_PTRMEM_TYPE:
- need_space = 1;
- need_paren = 1;
- break;
- case DEMANGLE_COMPONENT_RESTRICT_THIS:
- case DEMANGLE_COMPONENT_VOLATILE_THIS:
- case DEMANGLE_COMPONENT_CONST_THIS:
- break;
- default:
- break;
- }
- if (need_paren)
- break;
- }
-
- if (need_paren)
- {
- if (! need_space)
- {
- if (d_last_char (dpi) != '('
- && d_last_char (dpi) != '*')
- need_space = 1;
- }
- if (need_space && d_last_char (dpi) != ' ')
- d_append_char (dpi, ' ');
- d_append_char (dpi, '(');
- }
-
- hold_modifiers = dpi->modifiers;
- dpi->modifiers = NULL;
-
- d_print_mod_list (dpi, options, mods, 0);
-
- if (need_paren)
- d_append_char (dpi, ')');
-
- d_append_char (dpi, '(');
-
- if (d_right (dc) != NULL)
- d_print_comp (dpi, options, d_right (dc));
-
- d_append_char (dpi, ')');
-
- d_print_mod_list (dpi, options, mods, 1);
-
- dpi->modifiers = hold_modifiers;
-}
-
-/* Print an array type, except for the element type. */
-
-static void
-d_print_array_type (struct d_print_info *dpi, int options,
- const struct demangle_component *dc,
- struct d_print_mod *mods)
-{
- int need_space;
-
- need_space = 1;
- if (mods != NULL)
- {
- int need_paren;
- struct d_print_mod *p;
-
- need_paren = 0;
- for (p = mods; p != NULL; p = p->next)
- {
- if (! p->printed)
- {
- if (p->mod->type == DEMANGLE_COMPONENT_ARRAY_TYPE)
- {
- need_space = 0;
- break;
- }
- else
- {
- need_paren = 1;
- need_space = 1;
- break;
- }
- }
- }
-
- if (need_paren)
- d_append_string (dpi, " (");
-
- d_print_mod_list (dpi, options, mods, 0);
-
- if (need_paren)
- d_append_char (dpi, ')');
- }
-
- if (need_space)
- d_append_char (dpi, ' ');
-
- d_append_char (dpi, '[');
-
- if (d_left (dc) != NULL)
- d_print_comp (dpi, options, d_left (dc));
-
- d_append_char (dpi, ']');
-}
-
-/* Print an operator in an expression. */
-
-static void
-d_print_expr_op (struct d_print_info *dpi, int options,
- const struct demangle_component *dc)
-{
- if (dc->type == DEMANGLE_COMPONENT_OPERATOR)
- d_append_buffer (dpi, dc->u.s_operator.op->name,
- dc->u.s_operator.op->len);
- else
- d_print_comp (dpi, options, dc);
-}
-
-/* Print a cast. */
-
-static void
-d_print_cast (struct d_print_info *dpi, int options,
- const struct demangle_component *dc)
-{
- if (d_left (dc)->type != DEMANGLE_COMPONENT_TEMPLATE)
- d_print_comp (dpi, options, d_left (dc));
- else
- {
- struct d_print_mod *hold_dpm;
- struct d_print_template dpt;
-
- /* It appears that for a templated cast operator, we need to put
- the template parameters in scope for the operator name, but
- not for the parameters. The effect is that we need to handle
- the template printing here. */
-
- hold_dpm = dpi->modifiers;
- dpi->modifiers = NULL;
-
- dpt.next = dpi->templates;
- dpi->templates = &dpt;
- dpt.template_decl = d_left (dc);
-
- d_print_comp (dpi, options, d_left (d_left (dc)));
-
- dpi->templates = dpt.next;
-
- if (d_last_char (dpi) == '<')
- d_append_char (dpi, ' ');
- d_append_char (dpi, '<');
- d_print_comp (dpi, options, d_right (d_left (dc)));
- /* Avoid generating two consecutive '>' characters, to avoid
- the C++ syntactic ambiguity. */
- if (d_last_char (dpi) == '>')
- d_append_char (dpi, ' ');
- d_append_char (dpi, '>');
-
- dpi->modifiers = hold_dpm;
- }
-}
-
-/* Initialize the information structure we use to pass around
- information. */
-
-CP_STATIC_IF_GLIBCPP_V3
-void
-cplus_demangle_init_info (const char *mangled, int options, size_t len,
- struct d_info *di)
-{
- di->s = mangled;
- di->send = mangled + len;
- di->options = options;
-
- di->n = mangled;
-
- /* We can not need more components than twice the number of chars in
- the mangled string. Most components correspond directly to
- chars, but the ARGLIST types are exceptions. */
- di->num_comps = 2 * len;
- di->next_comp = 0;
-
- /* Similarly, we can not need more substitutions than there are
- chars in the mangled string. */
- di->num_subs = len;
- di->next_sub = 0;
- di->did_subs = 0;
-
- di->last_name = NULL;
-
- di->expansion = 0;
-}
-
-/* Internal implementation for the demangler. If MANGLED is a g++ v3 ABI
- mangled name, return strings in repeated callback giving the demangled
- name. OPTIONS is the usual libiberty demangler options. On success,
- this returns 1. On failure, returns 0. */
-
-static int
-d_demangle_callback (const char *mangled, int options,
- demangle_callbackref callback, void *opaque)
-{
- enum
- {
- DCT_TYPE,
- DCT_MANGLED,
- DCT_GLOBAL_CTORS,
- DCT_GLOBAL_DTORS
- }
- type;
- struct d_info di;
- struct demangle_component *dc;
- int status;
-
- if (mangled[0] == '_' && mangled[1] == 'Z')
- type = DCT_MANGLED;
- else if (strncmp (mangled, "_GLOBAL_", 8) == 0
- && (mangled[8] == '.' || mangled[8] == '_' || mangled[8] == '$')
- && (mangled[9] == 'D' || mangled[9] == 'I')
- && mangled[10] == '_')
- type = mangled[9] == 'I' ? DCT_GLOBAL_CTORS : DCT_GLOBAL_DTORS;
- else
- {
- if ((options & DMGL_TYPES) == 0)
- return 0;
- type = DCT_TYPE;
- }
-
- cplus_demangle_init_info (mangled, options, strlen (mangled), &di);
-
- {
-#ifdef CP_DYNAMIC_ARRAYS
- __extension__ struct demangle_component comps[di.num_comps];
- __extension__ struct demangle_component *subs[di.num_subs];
-
- di.comps = comps;
- di.subs = subs;
-#else
- di.comps = alloca (di.num_comps * sizeof (*di.comps));
- di.subs = alloca (di.num_subs * sizeof (*di.subs));
-#endif
-
- switch (type)
- {
- case DCT_TYPE:
- dc = cplus_demangle_type (&di);
- break;
- case DCT_MANGLED:
- dc = cplus_demangle_mangled_name (&di, 1);
- break;
- case DCT_GLOBAL_CTORS:
- case DCT_GLOBAL_DTORS:
- d_advance (&di, 11);
- dc = d_make_comp (&di,
- (type == DCT_GLOBAL_CTORS
- ? DEMANGLE_COMPONENT_GLOBAL_CONSTRUCTORS
- : DEMANGLE_COMPONENT_GLOBAL_DESTRUCTORS),
- d_make_demangle_mangled_name (&di, d_str (&di)),
- NULL);
- d_advance (&di, strlen (d_str (&di)));
- break;
- }
-
- /* If DMGL_PARAMS is set, then if we didn't consume the entire
- mangled string, then we didn't successfully demangle it. If
- DMGL_PARAMS is not set, we didn't look at the trailing
- parameters. */
- if (((options & DMGL_PARAMS) != 0) && d_peek_char (&di) != '\0')
- dc = NULL;
-
-#ifdef CP_DEMANGLE_DEBUG
- d_dump (dc, 0);
-#endif
-
- status = (dc != NULL)
- ? cplus_demangle_print_callback (options, dc, callback, opaque)
- : 0;
- }
-
- return status;
-}
-
-/* Entry point for the demangler. If MANGLED is a g++ v3 ABI mangled
- name, return a buffer allocated with malloc holding the demangled
- name. OPTIONS is the usual libiberty demangler options. On
- success, this sets *PALC to the allocated size of the returned
- buffer. On failure, this sets *PALC to 0 for a bad name, or 1 for
- a memory allocation failure, and returns NULL. */
-
-static char *
-d_demangle (const char *mangled, int options, size_t *palc)
-{
- struct d_growable_string dgs;
- int status;
-
- d_growable_string_init (&dgs, 0);
-
- status = d_demangle_callback (mangled, options,
- d_growable_string_callback_adapter, &dgs);
- if (status == 0)
- {
- free (dgs.buf);
- *palc = 0;
- return NULL;
- }
-
- *palc = dgs.allocation_failure ? 1 : dgs.alc;
- return dgs.buf;
-}
-
-#if defined(IN_LIBGCC2) || defined(IN_GLIBCPP_V3)
-
-extern char *__cxa_demangle (const char *, char *, size_t *, int *);
-
-/* ia64 ABI-mandated entry point in the C++ runtime library for
- performing demangling. MANGLED_NAME is a NUL-terminated character
- string containing the name to be demangled.
-
- OUTPUT_BUFFER is a region of memory, allocated with malloc, of
- *LENGTH bytes, into which the demangled name is stored. If
- OUTPUT_BUFFER is not long enough, it is expanded using realloc.
- OUTPUT_BUFFER may instead be NULL; in that case, the demangled name
- is placed in a region of memory allocated with malloc.
-
- If LENGTH is non-NULL, the length of the buffer containing the
- demangled name, is placed in *LENGTH.
-
- The return value is a pointer to the start of the NUL-terminated
- demangled name, or NULL if the demangling fails. The caller is
- responsible for deallocating this memory using free.
-
- *STATUS is set to one of the following values:
- 0: The demangling operation succeeded.
- -1: A memory allocation failure occurred.
- -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
- -3: One of the arguments is invalid.
-
- The demangling is performed using the C++ ABI mangling rules, with
- GNU extensions. */
-
-char *
-__cxa_demangle (const char *mangled_name, char *output_buffer,
- size_t *length, int *status)
-{
- char *demangled;
- size_t alc;
-
- if (mangled_name == NULL)
- {
- if (status != NULL)
- *status = -3;
- return NULL;
- }
-
- if (output_buffer != NULL && length == NULL)
- {
- if (status != NULL)
- *status = -3;
- return NULL;
- }
-
- demangled = d_demangle (mangled_name, DMGL_PARAMS | DMGL_TYPES, &alc);
-
- if (demangled == NULL)
- {
- if (status != NULL)
- {
- if (alc == 1)
- *status = -1;
- else
- *status = -2;
- }
- return NULL;
- }
-
- if (output_buffer == NULL)
- {
- if (length != NULL)
- *length = alc;
- }
- else
- {
- if (strlen (demangled) < *length)
- {
- strcpy (output_buffer, demangled);
- free (demangled);
- demangled = output_buffer;
- }
- else
- {
- free (output_buffer);
- *length = alc;
- }
- }
-
- if (status != NULL)
- *status = 0;
-
- return demangled;
-}
-
-extern int __gcclibcxx_demangle_callback (const char *,
- void (*)
- (const char *, size_t, void *),
- void *);
-
-/* Alternative, allocationless entry point in the C++ runtime library
- for performing demangling. MANGLED_NAME is a NUL-terminated character
- string containing the name to be demangled.
-
- CALLBACK is a callback function, called with demangled string
- segments as demangling progresses; it is called at least once,
- but may be called more than once. OPAQUE is a generalized pointer
- used as a callback argument.
-
- The return code is one of the following values, equivalent to
- the STATUS values of __cxa_demangle() (excluding -1, since this
- function performs no memory allocations):
- 0: The demangling operation succeeded.
- -2: MANGLED_NAME is not a valid name under the C++ ABI mangling rules.
- -3: One of the arguments is invalid.
-
- The demangling is performed using the C++ ABI mangling rules, with
- GNU extensions. */
-
-int
-__gcclibcxx_demangle_callback (const char *mangled_name,
- void (*callback) (const char *, size_t, void *),
- void *opaque)
-{
- int status;
-
- if (mangled_name == NULL || callback == NULL)
- return -3;
-
- status = d_demangle_callback (mangled_name, DMGL_PARAMS | DMGL_TYPES,
- callback, opaque);
- if (status == 0)
- return -2;
-
- return 0;
-}
-
-#else /* ! (IN_LIBGCC2 || IN_GLIBCPP_V3) */
-
-/* Entry point for libiberty demangler. If MANGLED is a g++ v3 ABI
- mangled name, return a buffer allocated with malloc holding the
- demangled name. Otherwise, return NULL. */
-
-char *
-cplus_demangle_v3 (const char *mangled, int options)
-{
- size_t alc;
-
- return d_demangle (mangled, options, &alc);
-}
-
-int
-cplus_demangle_v3_callback (const char *mangled, int options,
- demangle_callbackref callback, void *opaque)
-{
- return d_demangle_callback (mangled, options, callback, opaque);
-}
-
-/* Demangle a Java symbol. Java uses a subset of the V3 ABI C++ mangling
- conventions, but the output formatting is a little different.
- This instructs the C++ demangler not to emit pointer characters ("*"), to
- use Java's namespace separator symbol ("." instead of "::"), and to output
- JArray<TYPE> as TYPE[]. */
-
-char *
-java_demangle_v3 (const char *mangled)
-{
- size_t alc;
-
- return d_demangle (mangled, DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX, &alc);
-}
-
-int
-java_demangle_v3_callback (const char *mangled,
- demangle_callbackref callback, void *opaque)
-{
- return d_demangle_callback (mangled,
- DMGL_JAVA | DMGL_PARAMS | DMGL_RET_POSTFIX,
- callback, opaque);
-}
-
-#endif /* IN_LIBGCC2 || IN_GLIBCPP_V3 */
-
-#ifndef IN_GLIBCPP_V3
-
-/* Demangle a string in order to find out whether it is a constructor
- or destructor. Return non-zero on success. Set *CTOR_KIND and
- *DTOR_KIND appropriately. */
-
-static int
-is_ctor_or_dtor (const char *mangled,
- enum gnu_v3_ctor_kinds *ctor_kind,
- enum gnu_v3_dtor_kinds *dtor_kind)
-{
- struct d_info di;
- struct demangle_component *dc;
- int ret;
-
- *ctor_kind = (enum gnu_v3_ctor_kinds) 0;
- *dtor_kind = (enum gnu_v3_dtor_kinds) 0;
-
- cplus_demangle_init_info (mangled, DMGL_GNU_V3, strlen (mangled), &di);
-
- {
-#ifdef CP_DYNAMIC_ARRAYS
- __extension__ struct demangle_component comps[di.num_comps];
- __extension__ struct demangle_component *subs[di.num_subs];
-
- di.comps = comps;
- di.subs = subs;
-#else
- di.comps = alloca (di.num_comps * sizeof (*di.comps));
- di.subs = alloca (di.num_subs * sizeof (*di.subs));
-#endif
-
- dc = cplus_demangle_mangled_name (&di, 1);
-
- /* Note that because we did not pass DMGL_PARAMS, we don't expect
- to demangle the entire string. */
-
- ret = 0;
- while (dc != NULL)
- {
- switch (dc->type)
- {
- default:
- dc = NULL;
- break;
- case DEMANGLE_COMPONENT_TYPED_NAME:
- case DEMANGLE_COMPONENT_TEMPLATE:
- case DEMANGLE_COMPONENT_RESTRICT_THIS:
- case DEMANGLE_COMPONENT_VOLATILE_THIS:
- case DEMANGLE_COMPONENT_CONST_THIS:
- dc = d_left (dc);
- break;
- case DEMANGLE_COMPONENT_QUAL_NAME:
- case DEMANGLE_COMPONENT_LOCAL_NAME:
- dc = d_right (dc);
- break;
- case DEMANGLE_COMPONENT_CTOR:
- *ctor_kind = dc->u.s_ctor.kind;
- ret = 1;
- dc = NULL;
- break;
- case DEMANGLE_COMPONENT_DTOR:
- *dtor_kind = dc->u.s_dtor.kind;
- ret = 1;
- dc = NULL;
- break;
- }
- }
- }
-
- return ret;
-}
-
-/* Return whether NAME is the mangled form of a g++ V3 ABI constructor
- name. A non-zero return indicates the type of constructor. */
-
-enum gnu_v3_ctor_kinds
-is_gnu_v3_mangled_ctor (const char *name)
-{
- enum gnu_v3_ctor_kinds ctor_kind;
- enum gnu_v3_dtor_kinds dtor_kind;
-
- if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
- return (enum gnu_v3_ctor_kinds) 0;
- return ctor_kind;
-}
-
-
-/* Return whether NAME is the mangled form of a g++ V3 ABI destructor
- name. A non-zero return indicates the type of destructor. */
-
-enum gnu_v3_dtor_kinds
-is_gnu_v3_mangled_dtor (const char *name)
-{
- enum gnu_v3_ctor_kinds ctor_kind;
- enum gnu_v3_dtor_kinds dtor_kind;
-
- if (! is_ctor_or_dtor (name, &ctor_kind, &dtor_kind))
- return (enum gnu_v3_dtor_kinds) 0;
- return dtor_kind;
-}
-
-#endif /* IN_GLIBCPP_V3 */
-
-#ifdef STANDALONE_DEMANGLER
-
-#include "getopt.h"
-#include "dyn-string.h"
-
-static void print_usage (FILE* fp, int exit_value);
-
-#define IS_ALPHA(CHAR) \
- (((CHAR) >= 'a' && (CHAR) <= 'z') \
- || ((CHAR) >= 'A' && (CHAR) <= 'Z'))
-
-/* Non-zero if CHAR is a character than can occur in a mangled name. */
-#define is_mangled_char(CHAR) \
- (IS_ALPHA (CHAR) || IS_DIGIT (CHAR) \
- || (CHAR) == '_' || (CHAR) == '.' || (CHAR) == '$')
-
-/* The name of this program, as invoked. */
-const char* program_name;
-
-/* Prints usage summary to FP and then exits with EXIT_VALUE. */
-
-static void
-print_usage (FILE* fp, int exit_value)
-{
- fprintf (fp, "Usage: %s [options] [names ...]\n", program_name);
- fprintf (fp, "Options:\n");
- fprintf (fp, " -h,--help Display this message.\n");
- fprintf (fp, " -p,--no-params Don't display function parameters\n");
- fprintf (fp, " -v,--verbose Produce verbose demanglings.\n");
- fprintf (fp, "If names are provided, they are demangled. Otherwise filters standard input.\n");
-
- exit (exit_value);
-}
-
-/* Option specification for getopt_long. */
-static const struct option long_options[] =
-{
- { "help", no_argument, NULL, 'h' },
- { "no-params", no_argument, NULL, 'p' },
- { "verbose", no_argument, NULL, 'v' },
- { NULL, no_argument, NULL, 0 },
-};
-
-/* Main entry for a demangling filter executable. It will demangle
- its command line arguments, if any. If none are provided, it will
- filter stdin to stdout, replacing any recognized mangled C++ names
- with their demangled equivalents. */
-
-int
-main (int argc, char *argv[])
-{
- int i;
- int opt_char;
- int options = DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES;
-
- /* Use the program name of this program, as invoked. */
- program_name = argv[0];
-
- /* Parse options. */
- do
- {
- opt_char = getopt_long (argc, argv, "hpv", long_options, NULL);
- switch (opt_char)
- {
- case '?': /* Unrecognized option. */
- print_usage (stderr, 1);
- break;
-
- case 'h':
- print_usage (stdout, 0);
- break;
-
- case 'p':
- options &= ~ DMGL_PARAMS;
- break;
-
- case 'v':
- options |= DMGL_VERBOSE;
- break;
- }
- }
- while (opt_char != -1);
-
- if (optind == argc)
- /* No command line arguments were provided. Filter stdin. */
- {
- dyn_string_t mangled = dyn_string_new (3);
- char *s;
-
- /* Read all of input. */
- while (!feof (stdin))
- {
- char c;
-
- /* Pile characters into mangled until we hit one that can't
- occur in a mangled name. */
- c = getchar ();
- while (!feof (stdin) && is_mangled_char (c))
- {
- dyn_string_append_char (mangled, c);
- if (feof (stdin))
- break;
- c = getchar ();
- }
-
- if (dyn_string_length (mangled) > 0)
- {
-#ifdef IN_GLIBCPP_V3
- s = __cxa_demangle (dyn_string_buf (mangled), NULL, NULL, NULL);
-#else
- s = cplus_demangle_v3 (dyn_string_buf (mangled), options);
-#endif
-
- if (s != NULL)
- {
- fputs (s, stdout);
- free (s);
- }
- else
- {
- /* It might not have been a mangled name. Print the
- original text. */
- fputs (dyn_string_buf (mangled), stdout);
- }
-
- dyn_string_clear (mangled);
- }
-
- /* If we haven't hit EOF yet, we've read one character that
- can't occur in a mangled name, so print it out. */
- if (!feof (stdin))
- putchar (c);
- }
-
- dyn_string_delete (mangled);
- }
- else
- /* Demangle command line arguments. */
- {
- /* Loop over command line arguments. */
- for (i = optind; i < argc; ++i)
- {
- char *s;
-#ifdef IN_GLIBCPP_V3
- int status;
-#endif
-
- /* Attempt to demangle. */
-#ifdef IN_GLIBCPP_V3
- s = __cxa_demangle (argv[i], NULL, NULL, &status);
-#else
- s = cplus_demangle_v3 (argv[i], options);
-#endif
-
- /* If it worked, print the demangled name. */
- if (s != NULL)
- {
- printf ("%s\n", s);
- free (s);
- }
- else
- {
-#ifdef IN_GLIBCPP_V3
- fprintf (stderr, "Failed: %s (status %d)\n", argv[i], status);
-#else
- fprintf (stderr, "Failed: %s\n", argv[i]);
-#endif
- }
- }
- }
-
- return 0;
-}
-
-#endif /* STANDALONE_DEMANGLER */
diff --git a/gcc-4.7/libiberty/cp-demangle.h b/gcc-4.7/libiberty/cp-demangle.h
deleted file mode 100644
index ae635beb4..000000000
--- a/gcc-4.7/libiberty/cp-demangle.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/* Internal demangler interface for g++ V3 ABI.
- Copyright (C) 2003, 2004, 2005, 2006, 2007, 2010
- Free Software Foundation, Inc.
- Written by Ian Lance Taylor <ian@wasabisystems.com>.
-
- This file is part of the libiberty library, which is part of GCC.
-
- This file is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- In addition to the permissions in the GNU General Public License, the
- Free Software Foundation gives you unlimited permission to link the
- compiled version of this file into combinations with other programs,
- and to distribute those combinations without any restriction coming
- from the use of this file. (The General Public License restrictions
- do apply in other respects; for example, they cover modification of
- the file, and distribution when not linked into a combined
- executable.)
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-/* This file provides some definitions shared by cp-demangle.c and
- cp-demint.c. It should not be included by any other files. */
-
-/* Information we keep for operators. */
-
-struct demangle_operator_info
-{
- /* Mangled name. */
- const char *code;
- /* Real name. */
- const char *name;
- /* Length of real name. */
- int len;
- /* Number of arguments. */
- int args;
-};
-
-/* How to print the value of a builtin type. */
-
-enum d_builtin_type_print
-{
- /* Print as (type)val. */
- D_PRINT_DEFAULT,
- /* Print as integer. */
- D_PRINT_INT,
- /* Print as unsigned integer, with trailing "u". */
- D_PRINT_UNSIGNED,
- /* Print as long, with trailing "l". */
- D_PRINT_LONG,
- /* Print as unsigned long, with trailing "ul". */
- D_PRINT_UNSIGNED_LONG,
- /* Print as long long, with trailing "ll". */
- D_PRINT_LONG_LONG,
- /* Print as unsigned long long, with trailing "ull". */
- D_PRINT_UNSIGNED_LONG_LONG,
- /* Print as bool. */
- D_PRINT_BOOL,
- /* Print as float--put value in square brackets. */
- D_PRINT_FLOAT,
- /* Print in usual way, but here to detect void. */
- D_PRINT_VOID
-};
-
-/* Information we keep for a builtin type. */
-
-struct demangle_builtin_type_info
-{
- /* Type name. */
- const char *name;
- /* Length of type name. */
- int len;
- /* Type name when using Java. */
- const char *java_name;
- /* Length of java name. */
- int java_len;
- /* How to print a value of this type. */
- enum d_builtin_type_print print;
-};
-
-/* The information structure we pass around. */
-
-struct d_info
-{
- /* The string we are demangling. */
- const char *s;
- /* The end of the string we are demangling. */
- const char *send;
- /* The options passed to the demangler. */
- int options;
- /* The next character in the string to consider. */
- const char *n;
- /* The array of components. */
- struct demangle_component *comps;
- /* The index of the next available component. */
- int next_comp;
- /* The number of available component structures. */
- int num_comps;
- /* The array of substitutions. */
- struct demangle_component **subs;
- /* The index of the next substitution. */
- int next_sub;
- /* The number of available entries in the subs array. */
- int num_subs;
- /* The number of substitutions which we actually made from the subs
- array, plus the number of template parameter references we
- saw. */
- int did_subs;
- /* The last name we saw, for constructors and destructors. */
- struct demangle_component *last_name;
- /* A running total of the length of large expansions from the
- mangled name to the demangled name, such as standard
- substitutions and builtin types. */
- int expansion;
-};
-
-/* To avoid running past the ending '\0', don't:
- - call d_peek_next_char if d_peek_char returned '\0'
- - call d_advance with an 'i' that is too large
- - call d_check_char(di, '\0')
- Everything else is safe. */
-#define d_peek_char(di) (*((di)->n))
-#define d_peek_next_char(di) ((di)->n[1])
-#define d_advance(di, i) ((di)->n += (i))
-#define d_check_char(di, c) (d_peek_char(di) == c ? ((di)->n++, 1) : 0)
-#define d_next_char(di) (d_peek_char(di) == '\0' ? '\0' : *((di)->n++))
-#define d_str(di) ((di)->n)
-
-/* Functions and arrays in cp-demangle.c which are referenced by
- functions in cp-demint.c. */
-#ifdef IN_GLIBCPP_V3
-#define CP_STATIC_IF_GLIBCPP_V3 static
-#else
-#define CP_STATIC_IF_GLIBCPP_V3 extern
-#endif
-
-#ifndef IN_GLIBCPP_V3
-extern const struct demangle_operator_info cplus_demangle_operators[];
-#endif
-
-#define D_BUILTIN_TYPE_COUNT (33)
-
-CP_STATIC_IF_GLIBCPP_V3
-const struct demangle_builtin_type_info
-cplus_demangle_builtin_types[D_BUILTIN_TYPE_COUNT];
-
-CP_STATIC_IF_GLIBCPP_V3
-struct demangle_component *
-cplus_demangle_mangled_name (struct d_info *, int);
-
-CP_STATIC_IF_GLIBCPP_V3
-struct demangle_component *
-cplus_demangle_type (struct d_info *);
-
-extern void
-cplus_demangle_init_info (const char *, int, size_t, struct d_info *);
-
-/* cp-demangle.c needs to define this a little differently */
-#undef CP_STATIC_IF_GLIBCPP_V3
diff --git a/gcc-4.7/libiberty/cp-demint.c b/gcc-4.7/libiberty/cp-demint.c
deleted file mode 100644
index 1d1a77af7..000000000
--- a/gcc-4.7/libiberty/cp-demint.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/* Demangler component interface functions.
- Copyright (C) 2004 Free Software Foundation, Inc.
- Written by Ian Lance Taylor <ian@wasabisystems.com>.
-
- This file is part of the libiberty library, which is part of GCC.
-
- This file is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- In addition to the permissions in the GNU General Public License, the
- Free Software Foundation gives you unlimited permission to link the
- compiled version of this file into combinations with other programs,
- and to distribute those combinations without any restriction coming
- from the use of this file. (The General Public License restrictions
- do apply in other respects; for example, they cover modification of
- the file, and distribution when not linked into a combined
- executable.)
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-/* This file implements a few interface functions which are provided
- for use with struct demangle_component trees. These functions are
- declared in demangle.h. These functions are closely tied to the
- demangler code in cp-demangle.c, and other interface functions can
- be found in that file. We put these functions in a separate file
- because they are not needed by the demangler, and so we avoid
- having them pulled in by programs which only need the
- demangler. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "ansidecl.h"
-#include "libiberty.h"
-#include "demangle.h"
-#include "cp-demangle.h"
-
-/* Fill in most component types. */
-
-int
-cplus_demangle_fill_component (struct demangle_component *p,
- enum demangle_component_type type,
- struct demangle_component *left,
- struct demangle_component *right)
-{
- if (p == NULL)
- return 0;
- switch (type)
- {
- case DEMANGLE_COMPONENT_QUAL_NAME:
- case DEMANGLE_COMPONENT_LOCAL_NAME:
- case DEMANGLE_COMPONENT_TYPED_NAME:
- case DEMANGLE_COMPONENT_TEMPLATE:
- case DEMANGLE_COMPONENT_CONSTRUCTION_VTABLE:
- case DEMANGLE_COMPONENT_VENDOR_TYPE_QUAL:
- case DEMANGLE_COMPONENT_FUNCTION_TYPE:
- case DEMANGLE_COMPONENT_ARRAY_TYPE:
- case DEMANGLE_COMPONENT_PTRMEM_TYPE:
- case DEMANGLE_COMPONENT_ARGLIST:
- case DEMANGLE_COMPONENT_TEMPLATE_ARGLIST:
- case DEMANGLE_COMPONENT_UNARY:
- case DEMANGLE_COMPONENT_BINARY:
- case DEMANGLE_COMPONENT_BINARY_ARGS:
- case DEMANGLE_COMPONENT_TRINARY:
- case DEMANGLE_COMPONENT_TRINARY_ARG1:
- case DEMANGLE_COMPONENT_TRINARY_ARG2:
- case DEMANGLE_COMPONENT_LITERAL:
- case DEMANGLE_COMPONENT_LITERAL_NEG:
- break;
-
- /* These component types only have one subtree. */
- case DEMANGLE_COMPONENT_VTABLE:
- case DEMANGLE_COMPONENT_VTT:
- case DEMANGLE_COMPONENT_TYPEINFO:
- case DEMANGLE_COMPONENT_TYPEINFO_NAME:
- case DEMANGLE_COMPONENT_TYPEINFO_FN:
- case DEMANGLE_COMPONENT_THUNK:
- case DEMANGLE_COMPONENT_VIRTUAL_THUNK:
- case DEMANGLE_COMPONENT_COVARIANT_THUNK:
- case DEMANGLE_COMPONENT_JAVA_CLASS:
- case DEMANGLE_COMPONENT_GUARD:
- case DEMANGLE_COMPONENT_REFTEMP:
- case DEMANGLE_COMPONENT_RESTRICT:
- case DEMANGLE_COMPONENT_VOLATILE:
- case DEMANGLE_COMPONENT_CONST:
- case DEMANGLE_COMPONENT_RESTRICT_THIS:
- case DEMANGLE_COMPONENT_VOLATILE_THIS:
- case DEMANGLE_COMPONENT_CONST_THIS:
- case DEMANGLE_COMPONENT_POINTER:
- case DEMANGLE_COMPONENT_REFERENCE:
- case DEMANGLE_COMPONENT_COMPLEX:
- case DEMANGLE_COMPONENT_IMAGINARY:
- case DEMANGLE_COMPONENT_VENDOR_TYPE:
- case DEMANGLE_COMPONENT_CAST:
- if (right != NULL)
- return 0;
- break;
-
- default:
- /* Other types do not use subtrees. */
- return 0;
- }
-
- p->type = type;
- p->u.s_binary.left = left;
- p->u.s_binary.right = right;
-
- return 1;
-}
-
-/* Fill in a DEMANGLE_COMPONENT_BUILTIN_TYPE. */
-
-int
-cplus_demangle_fill_builtin_type (struct demangle_component *p,
- const char *type_name)
-{
- int len;
- unsigned int i;
-
- if (p == NULL || type_name == NULL)
- return 0;
- len = strlen (type_name);
- for (i = 0; i < D_BUILTIN_TYPE_COUNT; ++i)
- {
- if (len == cplus_demangle_builtin_types[i].len
- && strcmp (type_name, cplus_demangle_builtin_types[i].name) == 0)
- {
- p->type = DEMANGLE_COMPONENT_BUILTIN_TYPE;
- p->u.s_builtin.type = &cplus_demangle_builtin_types[i];
- return 1;
- }
- }
- return 0;
-}
-
-/* Fill in a DEMANGLE_COMPONENT_OPERATOR. */
-
-int
-cplus_demangle_fill_operator (struct demangle_component *p,
- const char *opname, int args)
-{
- int len;
- unsigned int i;
-
- if (p == NULL || opname == NULL)
- return 0;
- len = strlen (opname);
- for (i = 0; cplus_demangle_operators[i].name != NULL; ++i)
- {
- if (len == cplus_demangle_operators[i].len
- && args == cplus_demangle_operators[i].args
- && strcmp (opname, cplus_demangle_operators[i].name) == 0)
- {
- p->type = DEMANGLE_COMPONENT_OPERATOR;
- p->u.s_operator.op = &cplus_demangle_operators[i];
- return 1;
- }
- }
- return 0;
-}
-
-/* Translate a mangled name into components. */
-
-struct demangle_component *
-cplus_demangle_v3_components (const char *mangled, int options, void **mem)
-{
- size_t len;
- int type;
- struct d_info di;
- struct demangle_component *dc;
-
- len = strlen (mangled);
-
- if (mangled[0] == '_' && mangled[1] == 'Z')
- type = 0;
- else
- {
- if ((options & DMGL_TYPES) == 0)
- return NULL;
- type = 1;
- }
-
- cplus_demangle_init_info (mangled, options, len, &di);
-
- di.comps = ((struct demangle_component *)
- malloc (di.num_comps * sizeof (struct demangle_component)));
- di.subs = ((struct demangle_component **)
- malloc (di.num_subs * sizeof (struct demangle_component *)));
- if (di.comps == NULL || di.subs == NULL)
- {
- free (di.comps);
- free (di.subs);
- return NULL;
- }
-
- if (! type)
- dc = cplus_demangle_mangled_name (&di, 1);
- else
- dc = cplus_demangle_type (&di);
-
- /* If DMGL_PARAMS is set, then if we didn't consume the entire
- mangled string, then we didn't successfully demangle it. */
- if ((options & DMGL_PARAMS) != 0 && d_peek_char (&di) != '\0')
- dc = NULL;
-
- free (di.subs);
-
- if (dc != NULL)
- *mem = di.comps;
- else
- free (di.comps);
-
- return dc;
-}
diff --git a/gcc-4.7/libiberty/cplus-dem.c b/gcc-4.7/libiberty/cplus-dem.c
deleted file mode 100644
index e94848767..000000000
--- a/gcc-4.7/libiberty/cplus-dem.c
+++ /dev/null
@@ -1,4862 +0,0 @@
-/* Demangler for GNU C++
- Copyright 1989, 1991, 1994, 1995, 1996, 1997, 1998, 1999,
- 2000, 2001, 2002, 2003, 2004, 2010 Free Software Foundation, Inc.
- Written by James Clark (jjc@jclark.uucp)
- Rewritten by Fred Fish (fnf@cygnus.com) for ARM and Lucid demangling
- Modified by Satish Pai (pai@apollo.hp.com) for HP demangling
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-In addition to the permissions in the GNU Library General Public
-License, the Free Software Foundation gives you unlimited permission
-to link the compiled version of this file into combinations with other
-programs, and to distribute those combinations without any restriction
-coming from the use of this file. (The Library Public License
-restrictions do apply in other respects; for example, they cover
-modification of the file, and distribution when not linked into a
-combined executable.)
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/* This file exports two functions; cplus_mangle_opname and cplus_demangle.
-
- This file imports xmalloc and xrealloc, which are like malloc and
- realloc except that they generate a fatal error if there is no
- available memory. */
-
-/* This file lives in both GCC and libiberty. When making changes, please
- try not to break either. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "safe-ctype.h"
-
-#include <sys/types.h>
-#include <string.h>
-#include <stdio.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#else
-void * malloc ();
-void * realloc ();
-#endif
-
-#include <demangle.h>
-#undef CURRENT_DEMANGLING_STYLE
-#define CURRENT_DEMANGLING_STYLE work->options
-
-#include "libiberty.h"
-
-#define min(X,Y) (((X) < (Y)) ? (X) : (Y))
-
-/* A value at least one greater than the maximum number of characters
- that will be output when using the `%d' format with `printf'. */
-#define INTBUF_SIZE 32
-
-extern void fancy_abort (void) ATTRIBUTE_NORETURN;
-
-/* In order to allow a single demangler executable to demangle strings
- using various common values of CPLUS_MARKER, as well as any specific
- one set at compile time, we maintain a string containing all the
- commonly used ones, and check to see if the marker we are looking for
- is in that string. CPLUS_MARKER is usually '$' on systems where the
- assembler can deal with that. Where the assembler can't, it's usually
- '.' (but on many systems '.' is used for other things). We put the
- current defined CPLUS_MARKER first (which defaults to '$'), followed
- by the next most common value, followed by an explicit '$' in case
- the value of CPLUS_MARKER is not '$'.
-
- We could avoid this if we could just get g++ to tell us what the actual
- cplus marker character is as part of the debug information, perhaps by
- ensuring that it is the character that terminates the gcc<n>_compiled
- marker symbol (FIXME). */
-
-#if !defined (CPLUS_MARKER)
-#define CPLUS_MARKER '$'
-#endif
-
-enum demangling_styles current_demangling_style = auto_demangling;
-
-static char cplus_markers[] = { CPLUS_MARKER, '.', '$', '\0' };
-
-static char char_str[2] = { '\000', '\000' };
-
-void
-set_cplus_marker_for_demangling (int ch)
-{
- cplus_markers[0] = ch;
-}
-
-typedef struct string /* Beware: these aren't required to be */
-{ /* '\0' terminated. */
- char *b; /* pointer to start of string */
- char *p; /* pointer after last character */
- char *e; /* pointer after end of allocated space */
-} string;
-
-/* Stuff that is shared between sub-routines.
- Using a shared structure allows cplus_demangle to be reentrant. */
-
-struct work_stuff
-{
- int options;
- char **typevec;
- char **ktypevec;
- char **btypevec;
- int numk;
- int numb;
- int ksize;
- int bsize;
- int ntypes;
- int typevec_size;
- int constructor;
- int destructor;
- int static_type; /* A static member function */
- int temp_start; /* index in demangled to start of template args */
- int type_quals; /* The type qualifiers. */
- int dllimported; /* Symbol imported from a PE DLL */
- char **tmpl_argvec; /* Template function arguments. */
- int ntmpl_args; /* The number of template function arguments. */
- int forgetting_types; /* Nonzero if we are not remembering the types
- we see. */
- string* previous_argument; /* The last function argument demangled. */
- int nrepeats; /* The number of times to repeat the previous
- argument. */
-};
-
-#define PRINT_ANSI_QUALIFIERS (work -> options & DMGL_ANSI)
-#define PRINT_ARG_TYPES (work -> options & DMGL_PARAMS)
-
-static const struct optable
-{
- const char *const in;
- const char *const out;
- const int flags;
-} optable[] = {
- {"nw", " new", DMGL_ANSI}, /* new (1.92, ansi) */
- {"dl", " delete", DMGL_ANSI}, /* new (1.92, ansi) */
- {"new", " new", 0}, /* old (1.91, and 1.x) */
- {"delete", " delete", 0}, /* old (1.91, and 1.x) */
- {"vn", " new []", DMGL_ANSI}, /* GNU, pending ansi */
- {"vd", " delete []", DMGL_ANSI}, /* GNU, pending ansi */
- {"as", "=", DMGL_ANSI}, /* ansi */
- {"ne", "!=", DMGL_ANSI}, /* old, ansi */
- {"eq", "==", DMGL_ANSI}, /* old, ansi */
- {"ge", ">=", DMGL_ANSI}, /* old, ansi */
- {"gt", ">", DMGL_ANSI}, /* old, ansi */
- {"le", "<=", DMGL_ANSI}, /* old, ansi */
- {"lt", "<", DMGL_ANSI}, /* old, ansi */
- {"plus", "+", 0}, /* old */
- {"pl", "+", DMGL_ANSI}, /* ansi */
- {"apl", "+=", DMGL_ANSI}, /* ansi */
- {"minus", "-", 0}, /* old */
- {"mi", "-", DMGL_ANSI}, /* ansi */
- {"ami", "-=", DMGL_ANSI}, /* ansi */
- {"mult", "*", 0}, /* old */
- {"ml", "*", DMGL_ANSI}, /* ansi */
- {"amu", "*=", DMGL_ANSI}, /* ansi (ARM/Lucid) */
- {"aml", "*=", DMGL_ANSI}, /* ansi (GNU/g++) */
- {"convert", "+", 0}, /* old (unary +) */
- {"negate", "-", 0}, /* old (unary -) */
- {"trunc_mod", "%", 0}, /* old */
- {"md", "%", DMGL_ANSI}, /* ansi */
- {"amd", "%=", DMGL_ANSI}, /* ansi */
- {"trunc_div", "/", 0}, /* old */
- {"dv", "/", DMGL_ANSI}, /* ansi */
- {"adv", "/=", DMGL_ANSI}, /* ansi */
- {"truth_andif", "&&", 0}, /* old */
- {"aa", "&&", DMGL_ANSI}, /* ansi */
- {"truth_orif", "||", 0}, /* old */
- {"oo", "||", DMGL_ANSI}, /* ansi */
- {"truth_not", "!", 0}, /* old */
- {"nt", "!", DMGL_ANSI}, /* ansi */
- {"postincrement","++", 0}, /* old */
- {"pp", "++", DMGL_ANSI}, /* ansi */
- {"postdecrement","--", 0}, /* old */
- {"mm", "--", DMGL_ANSI}, /* ansi */
- {"bit_ior", "|", 0}, /* old */
- {"or", "|", DMGL_ANSI}, /* ansi */
- {"aor", "|=", DMGL_ANSI}, /* ansi */
- {"bit_xor", "^", 0}, /* old */
- {"er", "^", DMGL_ANSI}, /* ansi */
- {"aer", "^=", DMGL_ANSI}, /* ansi */
- {"bit_and", "&", 0}, /* old */
- {"ad", "&", DMGL_ANSI}, /* ansi */
- {"aad", "&=", DMGL_ANSI}, /* ansi */
- {"bit_not", "~", 0}, /* old */
- {"co", "~", DMGL_ANSI}, /* ansi */
- {"call", "()", 0}, /* old */
- {"cl", "()", DMGL_ANSI}, /* ansi */
- {"alshift", "<<", 0}, /* old */
- {"ls", "<<", DMGL_ANSI}, /* ansi */
- {"als", "<<=", DMGL_ANSI}, /* ansi */
- {"arshift", ">>", 0}, /* old */
- {"rs", ">>", DMGL_ANSI}, /* ansi */
- {"ars", ">>=", DMGL_ANSI}, /* ansi */
- {"component", "->", 0}, /* old */
- {"pt", "->", DMGL_ANSI}, /* ansi; Lucid C++ form */
- {"rf", "->", DMGL_ANSI}, /* ansi; ARM/GNU form */
- {"indirect", "*", 0}, /* old */
- {"method_call", "->()", 0}, /* old */
- {"addr", "&", 0}, /* old (unary &) */
- {"array", "[]", 0}, /* old */
- {"vc", "[]", DMGL_ANSI}, /* ansi */
- {"compound", ", ", 0}, /* old */
- {"cm", ", ", DMGL_ANSI}, /* ansi */
- {"cond", "?:", 0}, /* old */
- {"cn", "?:", DMGL_ANSI}, /* pseudo-ansi */
- {"max", ">?", 0}, /* old */
- {"mx", ">?", DMGL_ANSI}, /* pseudo-ansi */
- {"min", "<?", 0}, /* old */
- {"mn", "<?", DMGL_ANSI}, /* pseudo-ansi */
- {"nop", "", 0}, /* old (for operator=) */
- {"rm", "->*", DMGL_ANSI}, /* ansi */
- {"sz", "sizeof ", DMGL_ANSI} /* pseudo-ansi */
-};
-
-/* These values are used to indicate the various type varieties.
- They are all non-zero so that they can be used as `success'
- values. */
-typedef enum type_kind_t
-{
- tk_none,
- tk_pointer,
- tk_reference,
- tk_integral,
- tk_bool,
- tk_char,
- tk_real
-} type_kind_t;
-
-const struct demangler_engine libiberty_demanglers[] =
-{
- {
- NO_DEMANGLING_STYLE_STRING,
- no_demangling,
- "Demangling disabled"
- }
- ,
- {
- AUTO_DEMANGLING_STYLE_STRING,
- auto_demangling,
- "Automatic selection based on executable"
- }
- ,
- {
- GNU_DEMANGLING_STYLE_STRING,
- gnu_demangling,
- "GNU (g++) style demangling"
- }
- ,
- {
- LUCID_DEMANGLING_STYLE_STRING,
- lucid_demangling,
- "Lucid (lcc) style demangling"
- }
- ,
- {
- ARM_DEMANGLING_STYLE_STRING,
- arm_demangling,
- "ARM style demangling"
- }
- ,
- {
- HP_DEMANGLING_STYLE_STRING,
- hp_demangling,
- "HP (aCC) style demangling"
- }
- ,
- {
- EDG_DEMANGLING_STYLE_STRING,
- edg_demangling,
- "EDG style demangling"
- }
- ,
- {
- GNU_V3_DEMANGLING_STYLE_STRING,
- gnu_v3_demangling,
- "GNU (g++) V3 ABI-style demangling"
- }
- ,
- {
- JAVA_DEMANGLING_STYLE_STRING,
- java_demangling,
- "Java style demangling"
- }
- ,
- {
- GNAT_DEMANGLING_STYLE_STRING,
- gnat_demangling,
- "GNAT style demangling"
- }
- ,
- {
- NULL, unknown_demangling, NULL
- }
-};
-
-#define STRING_EMPTY(str) ((str) -> b == (str) -> p)
-#define APPEND_BLANK(str) {if (!STRING_EMPTY(str)) \
- string_append(str, " ");}
-#define LEN_STRING(str) ( (STRING_EMPTY(str))?0:((str)->p - (str)->b))
-
-/* The scope separator appropriate for the language being demangled. */
-
-#define SCOPE_STRING(work) ((work->options & DMGL_JAVA) ? "." : "::")
-
-#define ARM_VTABLE_STRING "__vtbl__" /* Lucid/ARM virtual table prefix */
-#define ARM_VTABLE_STRLEN 8 /* strlen (ARM_VTABLE_STRING) */
-
-/* Prototypes for local functions */
-
-static void delete_work_stuff (struct work_stuff *);
-
-static void delete_non_B_K_work_stuff (struct work_stuff *);
-
-static char *mop_up (struct work_stuff *, string *, int);
-
-static void squangle_mop_up (struct work_stuff *);
-
-static void work_stuff_copy_to_from (struct work_stuff *, struct work_stuff *);
-
-#if 0
-static int
-demangle_method_args (struct work_stuff *, const char **, string *);
-#endif
-
-static char *
-internal_cplus_demangle (struct work_stuff *, const char *);
-
-static int
-demangle_template_template_parm (struct work_stuff *work,
- const char **, string *);
-
-static int
-demangle_template (struct work_stuff *work, const char **, string *,
- string *, int, int);
-
-static int
-arm_pt (struct work_stuff *, const char *, int, const char **,
- const char **);
-
-static int
-demangle_class_name (struct work_stuff *, const char **, string *);
-
-static int
-demangle_qualified (struct work_stuff *, const char **, string *,
- int, int);
-
-static int demangle_class (struct work_stuff *, const char **, string *);
-
-static int demangle_fund_type (struct work_stuff *, const char **, string *);
-
-static int demangle_signature (struct work_stuff *, const char **, string *);
-
-static int demangle_prefix (struct work_stuff *, const char **, string *);
-
-static int gnu_special (struct work_stuff *, const char **, string *);
-
-static int arm_special (const char **, string *);
-
-static void string_need (string *, int);
-
-static void string_delete (string *);
-
-static void
-string_init (string *);
-
-static void string_clear (string *);
-
-#if 0
-static int string_empty (string *);
-#endif
-
-static void string_append (string *, const char *);
-
-static void string_appends (string *, string *);
-
-static void string_appendn (string *, const char *, int);
-
-static void string_prepend (string *, const char *);
-
-static void string_prependn (string *, const char *, int);
-
-static void string_append_template_idx (string *, int);
-
-static int get_count (const char **, int *);
-
-static int consume_count (const char **);
-
-static int consume_count_with_underscores (const char**);
-
-static int demangle_args (struct work_stuff *, const char **, string *);
-
-static int demangle_nested_args (struct work_stuff*, const char**, string*);
-
-static int do_type (struct work_stuff *, const char **, string *);
-
-static int do_arg (struct work_stuff *, const char **, string *);
-
-static int
-demangle_function_name (struct work_stuff *, const char **, string *,
- const char *);
-
-static int
-iterate_demangle_function (struct work_stuff *,
- const char **, string *, const char *);
-
-static void remember_type (struct work_stuff *, const char *, int);
-
-static void remember_Btype (struct work_stuff *, const char *, int, int);
-
-static int register_Btype (struct work_stuff *);
-
-static void remember_Ktype (struct work_stuff *, const char *, int);
-
-static void forget_types (struct work_stuff *);
-
-static void forget_B_and_K_types (struct work_stuff *);
-
-static void string_prepends (string *, string *);
-
-static int
-demangle_template_value_parm (struct work_stuff*, const char**,
- string*, type_kind_t);
-
-static int
-do_hpacc_template_const_value (struct work_stuff *, const char **, string *);
-
-static int
-do_hpacc_template_literal (struct work_stuff *, const char **, string *);
-
-static int snarf_numeric_literal (const char **, string *);
-
-/* There is a TYPE_QUAL value for each type qualifier. They can be
- combined by bitwise-or to form the complete set of qualifiers for a
- type. */
-
-#define TYPE_UNQUALIFIED 0x0
-#define TYPE_QUAL_CONST 0x1
-#define TYPE_QUAL_VOLATILE 0x2
-#define TYPE_QUAL_RESTRICT 0x4
-
-static int code_for_qualifier (int);
-
-static const char* qualifier_string (int);
-
-static const char* demangle_qualifier (int);
-
-static int demangle_expression (struct work_stuff *, const char **, string *,
- type_kind_t);
-
-static int
-demangle_integral_value (struct work_stuff *, const char **, string *);
-
-static int
-demangle_real_value (struct work_stuff *, const char **, string *);
-
-static void
-demangle_arm_hp_template (struct work_stuff *, const char **, int, string *);
-
-static void
-recursively_demangle (struct work_stuff *, const char **, string *, int);
-
-/* Translate count to integer, consuming tokens in the process.
- Conversion terminates on the first non-digit character.
-
- Trying to consume something that isn't a count results in no
- consumption of input and a return of -1.
-
- Overflow consumes the rest of the digits, and returns -1. */
-
-static int
-consume_count (const char **type)
-{
- int count = 0;
-
- if (! ISDIGIT ((unsigned char)**type))
- return -1;
-
- while (ISDIGIT ((unsigned char)**type))
- {
- count *= 10;
-
- /* Check for overflow.
- We assume that count is represented using two's-complement;
- no power of two is divisible by ten, so if an overflow occurs
- when multiplying by ten, the result will not be a multiple of
- ten. */
- if ((count % 10) != 0)
- {
- while (ISDIGIT ((unsigned char) **type))
- (*type)++;
- return -1;
- }
-
- count += **type - '0';
- (*type)++;
- }
-
- if (count < 0)
- count = -1;
-
- return (count);
-}
-
-
-/* Like consume_count, but for counts that are preceded and followed
- by '_' if they are greater than 10. Also, -1 is returned for
- failure, since 0 can be a valid value. */
-
-static int
-consume_count_with_underscores (const char **mangled)
-{
- int idx;
-
- if (**mangled == '_')
- {
- (*mangled)++;
- if (!ISDIGIT ((unsigned char)**mangled))
- return -1;
-
- idx = consume_count (mangled);
- if (**mangled != '_')
- /* The trailing underscore was missing. */
- return -1;
-
- (*mangled)++;
- }
- else
- {
- if (**mangled < '0' || **mangled > '9')
- return -1;
-
- idx = **mangled - '0';
- (*mangled)++;
- }
-
- return idx;
-}
-
-/* C is the code for a type-qualifier. Return the TYPE_QUAL
- corresponding to this qualifier. */
-
-static int
-code_for_qualifier (int c)
-{
- switch (c)
- {
- case 'C':
- return TYPE_QUAL_CONST;
-
- case 'V':
- return TYPE_QUAL_VOLATILE;
-
- case 'u':
- return TYPE_QUAL_RESTRICT;
-
- default:
- break;
- }
-
- /* C was an invalid qualifier. */
- abort ();
-}
-
-/* Return the string corresponding to the qualifiers given by
- TYPE_QUALS. */
-
-static const char*
-qualifier_string (int type_quals)
-{
- switch (type_quals)
- {
- case TYPE_UNQUALIFIED:
- return "";
-
- case TYPE_QUAL_CONST:
- return "const";
-
- case TYPE_QUAL_VOLATILE:
- return "volatile";
-
- case TYPE_QUAL_RESTRICT:
- return "__restrict";
-
- case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE:
- return "const volatile";
-
- case TYPE_QUAL_CONST | TYPE_QUAL_RESTRICT:
- return "const __restrict";
-
- case TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT:
- return "volatile __restrict";
-
- case TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE | TYPE_QUAL_RESTRICT:
- return "const volatile __restrict";
-
- default:
- break;
- }
-
- /* TYPE_QUALS was an invalid qualifier set. */
- abort ();
-}
-
-/* C is the code for a type-qualifier. Return the string
- corresponding to this qualifier. This function should only be
- called with a valid qualifier code. */
-
-static const char*
-demangle_qualifier (int c)
-{
- return qualifier_string (code_for_qualifier (c));
-}
-
-int
-cplus_demangle_opname (const char *opname, char *result, int options)
-{
- int len, len1, ret;
- string type;
- struct work_stuff work[1];
- const char *tem;
-
- len = strlen(opname);
- result[0] = '\0';
- ret = 0;
- memset ((char *) work, 0, sizeof (work));
- work->options = options;
-
- if (opname[0] == '_' && opname[1] == '_'
- && opname[2] == 'o' && opname[3] == 'p')
- {
- /* ANSI. */
- /* type conversion operator. */
- tem = opname + 4;
- if (do_type (work, &tem, &type))
- {
- strcat (result, "operator ");
- strncat (result, type.b, type.p - type.b);
- string_delete (&type);
- ret = 1;
- }
- }
- else if (opname[0] == '_' && opname[1] == '_'
- && ISLOWER((unsigned char)opname[2])
- && ISLOWER((unsigned char)opname[3]))
- {
- if (opname[4] == '\0')
- {
- /* Operator. */
- size_t i;
- for (i = 0; i < ARRAY_SIZE (optable); i++)
- {
- if (strlen (optable[i].in) == 2
- && memcmp (optable[i].in, opname + 2, 2) == 0)
- {
- strcat (result, "operator");
- strcat (result, optable[i].out);
- ret = 1;
- break;
- }
- }
- }
- else
- {
- if (opname[2] == 'a' && opname[5] == '\0')
- {
- /* Assignment. */
- size_t i;
- for (i = 0; i < ARRAY_SIZE (optable); i++)
- {
- if (strlen (optable[i].in) == 3
- && memcmp (optable[i].in, opname + 2, 3) == 0)
- {
- strcat (result, "operator");
- strcat (result, optable[i].out);
- ret = 1;
- break;
- }
- }
- }
- }
- }
- else if (len >= 3
- && opname[0] == 'o'
- && opname[1] == 'p'
- && strchr (cplus_markers, opname[2]) != NULL)
- {
- /* see if it's an assignment expression */
- if (len >= 10 /* op$assign_ */
- && memcmp (opname + 3, "assign_", 7) == 0)
- {
- size_t i;
- for (i = 0; i < ARRAY_SIZE (optable); i++)
- {
- len1 = len - 10;
- if ((int) strlen (optable[i].in) == len1
- && memcmp (optable[i].in, opname + 10, len1) == 0)
- {
- strcat (result, "operator");
- strcat (result, optable[i].out);
- strcat (result, "=");
- ret = 1;
- break;
- }
- }
- }
- else
- {
- size_t i;
- for (i = 0; i < ARRAY_SIZE (optable); i++)
- {
- len1 = len - 3;
- if ((int) strlen (optable[i].in) == len1
- && memcmp (optable[i].in, opname + 3, len1) == 0)
- {
- strcat (result, "operator");
- strcat (result, optable[i].out);
- ret = 1;
- break;
- }
- }
- }
- }
- else if (len >= 5 && memcmp (opname, "type", 4) == 0
- && strchr (cplus_markers, opname[4]) != NULL)
- {
- /* type conversion operator */
- tem = opname + 5;
- if (do_type (work, &tem, &type))
- {
- strcat (result, "operator ");
- strncat (result, type.b, type.p - type.b);
- string_delete (&type);
- ret = 1;
- }
- }
- squangle_mop_up (work);
- return ret;
-
-}
-
-/* Takes operator name as e.g. "++" and returns mangled
- operator name (e.g. "postincrement_expr"), or NULL if not found.
-
- If OPTIONS & DMGL_ANSI == 1, return the ANSI name;
- if OPTIONS & DMGL_ANSI == 0, return the old GNU name. */
-
-const char *
-cplus_mangle_opname (const char *opname, int options)
-{
- size_t i;
- int len;
-
- len = strlen (opname);
- for (i = 0; i < ARRAY_SIZE (optable); i++)
- {
- if ((int) strlen (optable[i].out) == len
- && (options & DMGL_ANSI) == (optable[i].flags & DMGL_ANSI)
- && memcmp (optable[i].out, opname, len) == 0)
- return optable[i].in;
- }
- return (0);
-}
-
-/* Add a routine to set the demangling style to be sure it is valid and
- allow for any demangler initialization that maybe necessary. */
-
-enum demangling_styles
-cplus_demangle_set_style (enum demangling_styles style)
-{
- const struct demangler_engine *demangler = libiberty_demanglers;
-
- for (; demangler->demangling_style != unknown_demangling; ++demangler)
- if (style == demangler->demangling_style)
- {
- current_demangling_style = style;
- return current_demangling_style;
- }
-
- return unknown_demangling;
-}
-
-/* Do string name to style translation */
-
-enum demangling_styles
-cplus_demangle_name_to_style (const char *name)
-{
- const struct demangler_engine *demangler = libiberty_demanglers;
-
- for (; demangler->demangling_style != unknown_demangling; ++demangler)
- if (strcmp (name, demangler->demangling_style_name) == 0)
- return demangler->demangling_style;
-
- return unknown_demangling;
-}
-
-/* char *cplus_demangle (const char *mangled, int options)
-
- If MANGLED is a mangled function name produced by GNU C++, then
- a pointer to a @code{malloc}ed string giving a C++ representation
- of the name will be returned; otherwise NULL will be returned.
- It is the caller's responsibility to free the string which
- is returned.
-
- The OPTIONS arg may contain one or more of the following bits:
-
- DMGL_ANSI ANSI qualifiers such as `const' and `void' are
- included.
- DMGL_PARAMS Function parameters are included.
-
- For example,
-
- cplus_demangle ("foo__1Ai", DMGL_PARAMS) => "A::foo(int)"
- cplus_demangle ("foo__1Ai", DMGL_PARAMS | DMGL_ANSI) => "A::foo(int)"
- cplus_demangle ("foo__1Ai", 0) => "A::foo"
-
- cplus_demangle ("foo__1Afe", DMGL_PARAMS) => "A::foo(float,...)"
- cplus_demangle ("foo__1Afe", DMGL_PARAMS | DMGL_ANSI)=> "A::foo(float,...)"
- cplus_demangle ("foo__1Afe", 0) => "A::foo"
-
- Note that any leading underscores, or other such characters prepended by
- the compilation system, are presumed to have already been stripped from
- MANGLED. */
-
-char *
-cplus_demangle (const char *mangled, int options)
-{
- char *ret;
- struct work_stuff work[1];
-
- if (current_demangling_style == no_demangling)
- return xstrdup (mangled);
-
- memset ((char *) work, 0, sizeof (work));
- work->options = options;
- if ((work->options & DMGL_STYLE_MASK) == 0)
- work->options |= (int) current_demangling_style & DMGL_STYLE_MASK;
-
- /* The V3 ABI demangling is implemented elsewhere. */
- if (GNU_V3_DEMANGLING || AUTO_DEMANGLING)
- {
- ret = cplus_demangle_v3 (mangled, work->options);
- if (ret || GNU_V3_DEMANGLING)
- return ret;
- }
-
- if (JAVA_DEMANGLING)
- {
- ret = java_demangle_v3 (mangled);
- if (ret)
- return ret;
- }
-
- if (GNAT_DEMANGLING)
- return ada_demangle (mangled, options);
-
- ret = internal_cplus_demangle (work, mangled);
- squangle_mop_up (work);
- return (ret);
-}
-
-/* Demangle ada names. The encoding is documented in gcc/ada/exp_dbug.ads. */
-
-char *
-ada_demangle (const char *mangled, int option ATTRIBUTE_UNUSED)
-{
- int len0;
- const char* p;
- char *d;
- char *demangled;
-
- /* Discard leading _ada_, which is used for library level subprograms. */
- if (strncmp (mangled, "_ada_", 5) == 0)
- mangled += 5;
-
- /* All ada unit names are lower-case. */
- if (!ISLOWER (mangled[0]))
- goto unknown;
-
- /* Most of the demangling will trivially remove chars. Operator names
- may add one char but because they are always preceeded by '__' which is
- replaced by '.', they eventually never expand the size.
- A few special names such as '___elabs' add a few chars (at most 7), but
- they occur only once. */
- len0 = strlen (mangled) + 7 + 1;
- demangled = XNEWVEC (char, len0);
-
- d = demangled;
- p = mangled;
- while (1)
- {
- /* An entity names is expected. */
- if (ISLOWER (*p))
- {
- /* An identifier, which is always lower case. */
- do
- *d++ = *p++;
- while (ISLOWER(*p) || ISDIGIT (*p)
- || (p[0] == '_' && (ISLOWER (p[1]) || ISDIGIT (p[1]))));
- }
- else if (p[0] == 'O')
- {
- /* An operator name. */
- static const char * const operators[][2] =
- {{"Oabs", "abs"}, {"Oand", "and"}, {"Omod", "mod"},
- {"Onot", "not"}, {"Oor", "or"}, {"Orem", "rem"},
- {"Oxor", "xor"}, {"Oeq", "="}, {"One", "/="},
- {"Olt", "<"}, {"Ole", "<="}, {"Ogt", ">"},
- {"Oge", ">="}, {"Oadd", "+"}, {"Osubtract", "-"},
- {"Oconcat", "&"}, {"Omultiply", "*"}, {"Odivide", "/"},
- {"Oexpon", "**"}, {NULL, NULL}};
- int k;
-
- for (k = 0; operators[k][0] != NULL; k++)
- {
- size_t slen = strlen (operators[k][0]);
- if (strncmp (p, operators[k][0], slen) == 0)
- {
- p += slen;
- slen = strlen (operators[k][1]);
- *d++ = '"';
- memcpy (d, operators[k][1], slen);
- d += slen;
- *d++ = '"';
- break;
- }
- }
- /* Operator not found. */
- if (operators[k][0] == NULL)
- goto unknown;
- }
- else
- {
- /* Not a GNAT encoding. */
- goto unknown;
- }
-
- /* The name can be directly followed by some uppercase letters. */
- if (p[0] == 'T' && p[1] == 'K')
- {
- /* Task stuff. */
- if (p[2] == 'B' && p[3] == 0)
- {
- /* Subprogram for task body. */
- break;
- }
- else if (p[2] == '_' && p[3] == '_')
- {
- /* Inner declarations in a task. */
- p += 4;
- *d++ = '.';
- continue;
- }
- else
- goto unknown;
- }
- if (p[0] == 'E' && p[1] == 0)
- {
- /* Exception name. */
- goto unknown;
- }
- if ((p[0] == 'P' || p[0] == 'N') && p[1] == 0)
- {
- /* Protected type subprogram. */
- break;
- }
- if ((*p == 'N' || *p == 'S') && p[1] == 0)
- {
- /* Enumerated type name table. */
- goto unknown;
- }
- if (p[0] == 'X')
- {
- /* Body nested. */
- p++;
- while (p[0] == 'n' || p[0] == 'b')
- p++;
- }
- if (p[0] == 'S' && p[1] != 0 && (p[2] == '_' || p[2] == 0))
- {
- /* Stream operations. */
- const char *name;
- switch (p[1])
- {
- case 'R':
- name = "'Read";
- break;
- case 'W':
- name = "'Write";
- break;
- case 'I':
- name = "'Input";
- break;
- case 'O':
- name = "'Output";
- break;
- default:
- goto unknown;
- }
- p += 2;
- strcpy (d, name);
- d += strlen (name);
- }
- else if (p[0] == 'D')
- {
- /* Controlled type operation. */
- const char *name;
- switch (p[1])
- {
- case 'F':
- name = ".Finalize";
- break;
- case 'A':
- name = ".Adjust";
- break;
- default:
- goto unknown;
- }
- strcpy (d, name);
- d += strlen (name);
- break;
- }
-
- if (p[0] == '_')
- {
- /* Separator. */
- if (p[1] == '_')
- {
- /* Standard separator. Handled first. */
- p += 2;
-
- if (ISDIGIT (*p))
- {
- /* Overloading number. */
- do
- p++;
- while (ISDIGIT (*p) || (p[0] == '_' && ISDIGIT (p[1])));
- if (*p == 'X')
- {
- p++;
- while (p[0] == 'n' || p[0] == 'b')
- p++;
- }
- }
- else if (p[0] == '_' && p[1] != '_')
- {
- /* Special names. */
- static const char * const special[][2] = {
- { "_elabb", "'Elab_Body" },
- { "_elabs", "'Elab_Spec" },
- { "_size", "'Size" },
- { "_alignment", "'Alignment" },
- { "_assign", ".\":=\"" },
- { NULL, NULL }
- };
- int k;
-
- for (k = 0; special[k][0] != NULL; k++)
- {
- size_t slen = strlen (special[k][0]);
- if (strncmp (p, special[k][0], slen) == 0)
- {
- p += slen;
- slen = strlen (special[k][1]);
- memcpy (d, special[k][1], slen);
- d += slen;
- break;
- }
- }
- if (special[k][0] != NULL)
- break;
- else
- goto unknown;
- }
- else
- {
- *d++ = '.';
- continue;
- }
- }
- else if (p[1] == 'B' || p[1] == 'E')
- {
- /* Entry Body or barrier Evaluation. */
- p += 2;
- while (ISDIGIT (*p))
- p++;
- if (p[0] == 's' && p[1] == 0)
- break;
- else
- goto unknown;
- }
- else
- goto unknown;
- }
-
- if (p[0] == '.' && ISDIGIT (p[1]))
- {
- /* Nested subprogram. */
- p += 2;
- while (ISDIGIT (*p))
- p++;
- }
- if (*p == 0)
- {
- /* End of mangled name. */
- break;
- }
- else
- goto unknown;
- }
- *d = 0;
- return demangled;
-
- unknown:
- len0 = strlen (mangled);
- demangled = XNEWVEC (char, len0 + 3);
-
- if (mangled[0] == '<')
- strcpy (demangled, mangled);
- else
- sprintf (demangled, "<%s>", mangled);
-
- return demangled;
-}
-
-/* This function performs most of what cplus_demangle use to do, but
- to be able to demangle a name with a B, K or n code, we need to
- have a longer term memory of what types have been seen. The original
- now initializes and cleans up the squangle code info, while internal
- calls go directly to this routine to avoid resetting that info. */
-
-static char *
-internal_cplus_demangle (struct work_stuff *work, const char *mangled)
-{
-
- string decl;
- int success = 0;
- char *demangled = NULL;
- int s1, s2, s3, s4;
- s1 = work->constructor;
- s2 = work->destructor;
- s3 = work->static_type;
- s4 = work->type_quals;
- work->constructor = work->destructor = 0;
- work->type_quals = TYPE_UNQUALIFIED;
- work->dllimported = 0;
-
- if ((mangled != NULL) && (*mangled != '\0'))
- {
- string_init (&decl);
-
- /* First check to see if gnu style demangling is active and if the
- string to be demangled contains a CPLUS_MARKER. If so, attempt to
- recognize one of the gnu special forms rather than looking for a
- standard prefix. In particular, don't worry about whether there
- is a "__" string in the mangled string. Consider "_$_5__foo" for
- example. */
-
- if ((AUTO_DEMANGLING || GNU_DEMANGLING))
- {
- success = gnu_special (work, &mangled, &decl);
- }
- if (!success)
- {
- success = demangle_prefix (work, &mangled, &decl);
- }
- if (success && (*mangled != '\0'))
- {
- success = demangle_signature (work, &mangled, &decl);
- }
- if (work->constructor == 2)
- {
- string_prepend (&decl, "global constructors keyed to ");
- work->constructor = 0;
- }
- else if (work->destructor == 2)
- {
- string_prepend (&decl, "global destructors keyed to ");
- work->destructor = 0;
- }
- else if (work->dllimported == 1)
- {
- string_prepend (&decl, "import stub for ");
- work->dllimported = 0;
- }
- demangled = mop_up (work, &decl, success);
- }
- work->constructor = s1;
- work->destructor = s2;
- work->static_type = s3;
- work->type_quals = s4;
- return demangled;
-}
-
-
-/* Clear out and squangling related storage */
-static void
-squangle_mop_up (struct work_stuff *work)
-{
- /* clean up the B and K type mangling types. */
- forget_B_and_K_types (work);
- if (work -> btypevec != NULL)
- {
- free ((char *) work -> btypevec);
- }
- if (work -> ktypevec != NULL)
- {
- free ((char *) work -> ktypevec);
- }
-}
-
-
-/* Copy the work state and storage. */
-
-static void
-work_stuff_copy_to_from (struct work_stuff *to, struct work_stuff *from)
-{
- int i;
-
- delete_work_stuff (to);
-
- /* Shallow-copy scalars. */
- memcpy (to, from, sizeof (*to));
-
- /* Deep-copy dynamic storage. */
- if (from->typevec_size)
- to->typevec = XNEWVEC (char *, from->typevec_size);
-
- for (i = 0; i < from->ntypes; i++)
- {
- int len = strlen (from->typevec[i]) + 1;
-
- to->typevec[i] = XNEWVEC (char, len);
- memcpy (to->typevec[i], from->typevec[i], len);
- }
-
- if (from->ksize)
- to->ktypevec = XNEWVEC (char *, from->ksize);
-
- for (i = 0; i < from->numk; i++)
- {
- int len = strlen (from->ktypevec[i]) + 1;
-
- to->ktypevec[i] = XNEWVEC (char, len);
- memcpy (to->ktypevec[i], from->ktypevec[i], len);
- }
-
- if (from->bsize)
- to->btypevec = XNEWVEC (char *, from->bsize);
-
- for (i = 0; i < from->numb; i++)
- {
- int len = strlen (from->btypevec[i]) + 1;
-
- to->btypevec[i] = XNEWVEC (char , len);
- memcpy (to->btypevec[i], from->btypevec[i], len);
- }
-
- if (from->ntmpl_args)
- to->tmpl_argvec = XNEWVEC (char *, from->ntmpl_args);
-
- for (i = 0; i < from->ntmpl_args; i++)
- {
- int len = strlen (from->tmpl_argvec[i]) + 1;
-
- to->tmpl_argvec[i] = XNEWVEC (char, len);
- memcpy (to->tmpl_argvec[i], from->tmpl_argvec[i], len);
- }
-
- if (from->previous_argument)
- {
- to->previous_argument = XNEW (string);
- string_init (to->previous_argument);
- string_appends (to->previous_argument, from->previous_argument);
- }
-}
-
-
-/* Delete dynamic stuff in work_stuff that is not to be re-used. */
-
-static void
-delete_non_B_K_work_stuff (struct work_stuff *work)
-{
- /* Discard the remembered types, if any. */
-
- forget_types (work);
- if (work -> typevec != NULL)
- {
- free ((char *) work -> typevec);
- work -> typevec = NULL;
- work -> typevec_size = 0;
- }
- if (work->tmpl_argvec)
- {
- int i;
-
- for (i = 0; i < work->ntmpl_args; i++)
- free ((char*) work->tmpl_argvec[i]);
-
- free ((char*) work->tmpl_argvec);
- work->tmpl_argvec = NULL;
- }
- if (work->previous_argument)
- {
- string_delete (work->previous_argument);
- free ((char*) work->previous_argument);
- work->previous_argument = NULL;
- }
-}
-
-
-/* Delete all dynamic storage in work_stuff. */
-static void
-delete_work_stuff (struct work_stuff *work)
-{
- delete_non_B_K_work_stuff (work);
- squangle_mop_up (work);
-}
-
-
-/* Clear out any mangled storage */
-
-static char *
-mop_up (struct work_stuff *work, string *declp, int success)
-{
- char *demangled = NULL;
-
- delete_non_B_K_work_stuff (work);
-
- /* If demangling was successful, ensure that the demangled string is null
- terminated and return it. Otherwise, free the demangling decl. */
-
- if (!success)
- {
- string_delete (declp);
- }
- else
- {
- string_appendn (declp, "", 1);
- demangled = declp->b;
- }
- return (demangled);
-}
-
-/*
-
-LOCAL FUNCTION
-
- demangle_signature -- demangle the signature part of a mangled name
-
-SYNOPSIS
-
- static int
- demangle_signature (struct work_stuff *work, const char **mangled,
- string *declp);
-
-DESCRIPTION
-
- Consume and demangle the signature portion of the mangled name.
-
- DECLP is the string where demangled output is being built. At
- entry it contains the demangled root name from the mangled name
- prefix. I.E. either a demangled operator name or the root function
- name. In some special cases, it may contain nothing.
-
- *MANGLED points to the current unconsumed location in the mangled
- name. As tokens are consumed and demangling is performed, the
- pointer is updated to continuously point at the next token to
- be consumed.
-
- Demangling GNU style mangled names is nasty because there is no
- explicit token that marks the start of the outermost function
- argument list. */
-
-static int
-demangle_signature (struct work_stuff *work,
- const char **mangled, string *declp)
-{
- int success = 1;
- int func_done = 0;
- int expect_func = 0;
- int expect_return_type = 0;
- const char *oldmangled = NULL;
- string trawname;
- string tname;
-
- while (success && (**mangled != '\0'))
- {
- switch (**mangled)
- {
- case 'Q':
- oldmangled = *mangled;
- success = demangle_qualified (work, mangled, declp, 1, 0);
- if (success)
- remember_type (work, oldmangled, *mangled - oldmangled);
- if (AUTO_DEMANGLING || GNU_DEMANGLING)
- expect_func = 1;
- oldmangled = NULL;
- break;
-
- case 'K':
- oldmangled = *mangled;
- success = demangle_qualified (work, mangled, declp, 1, 0);
- if (AUTO_DEMANGLING || GNU_DEMANGLING)
- {
- expect_func = 1;
- }
- oldmangled = NULL;
- break;
-
- case 'S':
- /* Static member function */
- if (oldmangled == NULL)
- {
- oldmangled = *mangled;
- }
- (*mangled)++;
- work -> static_type = 1;
- break;
-
- case 'C':
- case 'V':
- case 'u':
- work->type_quals |= code_for_qualifier (**mangled);
-
- /* a qualified member function */
- if (oldmangled == NULL)
- oldmangled = *mangled;
- (*mangled)++;
- break;
-
- case 'L':
- /* Local class name follows after "Lnnn_" */
- if (HP_DEMANGLING)
- {
- while (**mangled && (**mangled != '_'))
- (*mangled)++;
- if (!**mangled)
- success = 0;
- else
- (*mangled)++;
- }
- else
- success = 0;
- break;
-
- case '0': case '1': case '2': case '3': case '4':
- case '5': case '6': case '7': case '8': case '9':
- if (oldmangled == NULL)
- {
- oldmangled = *mangled;
- }
- work->temp_start = -1; /* uppermost call to demangle_class */
- success = demangle_class (work, mangled, declp);
- if (success)
- {
- remember_type (work, oldmangled, *mangled - oldmangled);
- }
- if (AUTO_DEMANGLING || GNU_DEMANGLING || EDG_DEMANGLING)
- {
- /* EDG and others will have the "F", so we let the loop cycle
- if we are looking at one. */
- if (**mangled != 'F')
- expect_func = 1;
- }
- oldmangled = NULL;
- break;
-
- case 'B':
- {
- string s;
- success = do_type (work, mangled, &s);
- if (success)
- {
- string_append (&s, SCOPE_STRING (work));
- string_prepends (declp, &s);
- string_delete (&s);
- }
- oldmangled = NULL;
- expect_func = 1;
- }
- break;
-
- case 'F':
- /* Function */
- /* ARM/HP style demangling includes a specific 'F' character after
- the class name. For GNU style, it is just implied. So we can
- safely just consume any 'F' at this point and be compatible
- with either style. */
-
- oldmangled = NULL;
- func_done = 1;
- (*mangled)++;
-
- /* For lucid/ARM/HP style we have to forget any types we might
- have remembered up to this point, since they were not argument
- types. GNU style considers all types seen as available for
- back references. See comment in demangle_args() */
-
- if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING)
- {
- forget_types (work);
- }
- success = demangle_args (work, mangled, declp);
- /* After picking off the function args, we expect to either
- find the function return type (preceded by an '_') or the
- end of the string. */
- if (success && (AUTO_DEMANGLING || EDG_DEMANGLING) && **mangled == '_')
- {
- ++(*mangled);
- /* At this level, we do not care about the return type. */
- success = do_type (work, mangled, &tname);
- string_delete (&tname);
- }
-
- break;
-
- case 't':
- /* G++ Template */
- string_init(&trawname);
- string_init(&tname);
- if (oldmangled == NULL)
- {
- oldmangled = *mangled;
- }
- success = demangle_template (work, mangled, &tname,
- &trawname, 1, 1);
- if (success)
- {
- remember_type (work, oldmangled, *mangled - oldmangled);
- }
- string_append (&tname, SCOPE_STRING (work));
-
- string_prepends(declp, &tname);
- if (work -> destructor & 1)
- {
- string_prepend (&trawname, "~");
- string_appends (declp, &trawname);
- work->destructor -= 1;
- }
- if ((work->constructor & 1) || (work->destructor & 1))
- {
- string_appends (declp, &trawname);
- work->constructor -= 1;
- }
- string_delete(&trawname);
- string_delete(&tname);
- oldmangled = NULL;
- expect_func = 1;
- break;
-
- case '_':
- if ((AUTO_DEMANGLING || GNU_DEMANGLING) && expect_return_type)
- {
- /* Read the return type. */
- string return_type;
-
- (*mangled)++;
- success = do_type (work, mangled, &return_type);
- APPEND_BLANK (&return_type);
-
- string_prepends (declp, &return_type);
- string_delete (&return_type);
- break;
- }
- else
- /* At the outermost level, we cannot have a return type specified,
- so if we run into another '_' at this point we are dealing with
- a mangled name that is either bogus, or has been mangled by
- some algorithm we don't know how to deal with. So just
- reject the entire demangling. */
- /* However, "_nnn" is an expected suffix for alternate entry point
- numbered nnn for a function, with HP aCC, so skip over that
- without reporting failure. pai/1997-09-04 */
- if (HP_DEMANGLING)
- {
- (*mangled)++;
- while (**mangled && ISDIGIT ((unsigned char)**mangled))
- (*mangled)++;
- }
- else
- success = 0;
- break;
-
- case 'H':
- if (AUTO_DEMANGLING || GNU_DEMANGLING)
- {
- /* A G++ template function. Read the template arguments. */
- success = demangle_template (work, mangled, declp, 0, 0,
- 0);
- if (!(work->constructor & 1))
- expect_return_type = 1;
- (*mangled)++;
- break;
- }
- else
- /* fall through */
- {;}
-
- default:
- if (AUTO_DEMANGLING || GNU_DEMANGLING)
- {
- /* Assume we have stumbled onto the first outermost function
- argument token, and start processing args. */
- func_done = 1;
- success = demangle_args (work, mangled, declp);
- }
- else
- {
- /* Non-GNU demanglers use a specific token to mark the start
- of the outermost function argument tokens. Typically 'F',
- for ARM/HP-demangling, for example. So if we find something
- we are not prepared for, it must be an error. */
- success = 0;
- }
- break;
- }
- /*
- if (AUTO_DEMANGLING || GNU_DEMANGLING)
- */
- {
- if (success && expect_func)
- {
- func_done = 1;
- if (LUCID_DEMANGLING || ARM_DEMANGLING || EDG_DEMANGLING)
- {
- forget_types (work);
- }
- success = demangle_args (work, mangled, declp);
- /* Since template include the mangling of their return types,
- we must set expect_func to 0 so that we don't try do
- demangle more arguments the next time we get here. */
- expect_func = 0;
- }
- }
- }
- if (success && !func_done)
- {
- if (AUTO_DEMANGLING || GNU_DEMANGLING)
- {
- /* With GNU style demangling, bar__3foo is 'foo::bar(void)', and
- bar__3fooi is 'foo::bar(int)'. We get here when we find the
- first case, and need to ensure that the '(void)' gets added to
- the current declp. Note that with ARM/HP, the first case
- represents the name of a static data member 'foo::bar',
- which is in the current declp, so we leave it alone. */
- success = demangle_args (work, mangled, declp);
- }
- }
- if (success && PRINT_ARG_TYPES)
- {
- if (work->static_type)
- string_append (declp, " static");
- if (work->type_quals != TYPE_UNQUALIFIED)
- {
- APPEND_BLANK (declp);
- string_append (declp, qualifier_string (work->type_quals));
- }
- }
-
- return (success);
-}
-
-#if 0
-
-static int
-demangle_method_args (struct work_stuff *work, const char **mangled,
- string *declp)
-{
- int success = 0;
-
- if (work -> static_type)
- {
- string_append (declp, *mangled + 1);
- *mangled += strlen (*mangled);
- success = 1;
- }
- else
- {
- success = demangle_args (work, mangled, declp);
- }
- return (success);
-}
-
-#endif
-
-static int
-demangle_template_template_parm (struct work_stuff *work,
- const char **mangled, string *tname)
-{
- int i;
- int r;
- int need_comma = 0;
- int success = 1;
- string temp;
-
- string_append (tname, "template <");
- /* get size of template parameter list */
- if (get_count (mangled, &r))
- {
- for (i = 0; i < r; i++)
- {
- if (need_comma)
- {
- string_append (tname, ", ");
- }
-
- /* Z for type parameters */
- if (**mangled == 'Z')
- {
- (*mangled)++;
- string_append (tname, "class");
- }
- /* z for template parameters */
- else if (**mangled == 'z')
- {
- (*mangled)++;
- success =
- demangle_template_template_parm (work, mangled, tname);
- if (!success)
- {
- break;
- }
- }
- else
- {
- /* temp is initialized in do_type */
- success = do_type (work, mangled, &temp);
- if (success)
- {
- string_appends (tname, &temp);
- }
- string_delete(&temp);
- if (!success)
- {
- break;
- }
- }
- need_comma = 1;
- }
-
- }
- if (tname->p[-1] == '>')
- string_append (tname, " ");
- string_append (tname, "> class");
- return (success);
-}
-
-static int
-demangle_expression (struct work_stuff *work, const char **mangled,
- string *s, type_kind_t tk)
-{
- int need_operator = 0;
- int success;
-
- success = 1;
- string_appendn (s, "(", 1);
- (*mangled)++;
- while (success && **mangled != 'W' && **mangled != '\0')
- {
- if (need_operator)
- {
- size_t i;
- size_t len;
-
- success = 0;
-
- len = strlen (*mangled);
-
- for (i = 0; i < ARRAY_SIZE (optable); ++i)
- {
- size_t l = strlen (optable[i].in);
-
- if (l <= len
- && memcmp (optable[i].in, *mangled, l) == 0)
- {
- string_appendn (s, " ", 1);
- string_append (s, optable[i].out);
- string_appendn (s, " ", 1);
- success = 1;
- (*mangled) += l;
- break;
- }
- }
-
- if (!success)
- break;
- }
- else
- need_operator = 1;
-
- success = demangle_template_value_parm (work, mangled, s, tk);
- }
-
- if (**mangled != 'W')
- success = 0;
- else
- {
- string_appendn (s, ")", 1);
- (*mangled)++;
- }
-
- return success;
-}
-
-static int
-demangle_integral_value (struct work_stuff *work,
- const char **mangled, string *s)
-{
- int success;
-
- if (**mangled == 'E')
- success = demangle_expression (work, mangled, s, tk_integral);
- else if (**mangled == 'Q' || **mangled == 'K')
- success = demangle_qualified (work, mangled, s, 0, 1);
- else
- {
- int value;
-
- /* By default, we let the number decide whether we shall consume an
- underscore. */
- int multidigit_without_leading_underscore = 0;
- int leave_following_underscore = 0;
-
- success = 0;
-
- if (**mangled == '_')
- {
- if (mangled[0][1] == 'm')
- {
- /* Since consume_count_with_underscores does not handle the
- `m'-prefix we must do it here, using consume_count and
- adjusting underscores: we have to consume the underscore
- matching the prepended one. */
- multidigit_without_leading_underscore = 1;
- string_appendn (s, "-", 1);
- (*mangled) += 2;
- }
- else
- {
- /* Do not consume a following underscore;
- consume_count_with_underscores will consume what
- should be consumed. */
- leave_following_underscore = 1;
- }
- }
- else
- {
- /* Negative numbers are indicated with a leading `m'. */
- if (**mangled == 'm')
- {
- string_appendn (s, "-", 1);
- (*mangled)++;
- }
- /* Since consume_count_with_underscores does not handle
- multi-digit numbers that do not start with an underscore,
- and this number can be an integer template parameter,
- we have to call consume_count. */
- multidigit_without_leading_underscore = 1;
- /* These multi-digit numbers never end on an underscore,
- so if there is one then don't eat it. */
- leave_following_underscore = 1;
- }
-
- /* We must call consume_count if we expect to remove a trailing
- underscore, since consume_count_with_underscores expects
- the leading underscore (that we consumed) if it is to handle
- multi-digit numbers. */
- if (multidigit_without_leading_underscore)
- value = consume_count (mangled);
- else
- value = consume_count_with_underscores (mangled);
-
- if (value != -1)
- {
- char buf[INTBUF_SIZE];
- sprintf (buf, "%d", value);
- string_append (s, buf);
-
- /* Numbers not otherwise delimited, might have an underscore
- appended as a delimeter, which we should skip.
-
- ??? This used to always remove a following underscore, which
- is wrong. If other (arbitrary) cases are followed by an
- underscore, we need to do something more radical. */
-
- if ((value > 9 || multidigit_without_leading_underscore)
- && ! leave_following_underscore
- && **mangled == '_')
- (*mangled)++;
-
- /* All is well. */
- success = 1;
- }
- }
-
- return success;
-}
-
-/* Demangle the real value in MANGLED. */
-
-static int
-demangle_real_value (struct work_stuff *work,
- const char **mangled, string *s)
-{
- if (**mangled == 'E')
- return demangle_expression (work, mangled, s, tk_real);
-
- if (**mangled == 'm')
- {
- string_appendn (s, "-", 1);
- (*mangled)++;
- }
- while (ISDIGIT ((unsigned char)**mangled))
- {
- string_appendn (s, *mangled, 1);
- (*mangled)++;
- }
- if (**mangled == '.') /* fraction */
- {
- string_appendn (s, ".", 1);
- (*mangled)++;
- while (ISDIGIT ((unsigned char)**mangled))
- {
- string_appendn (s, *mangled, 1);
- (*mangled)++;
- }
- }
- if (**mangled == 'e') /* exponent */
- {
- string_appendn (s, "e", 1);
- (*mangled)++;
- while (ISDIGIT ((unsigned char)**mangled))
- {
- string_appendn (s, *mangled, 1);
- (*mangled)++;
- }
- }
-
- return 1;
-}
-
-static int
-demangle_template_value_parm (struct work_stuff *work, const char **mangled,
- string *s, type_kind_t tk)
-{
- int success = 1;
-
- if (**mangled == 'Y')
- {
- /* The next argument is a template parameter. */
- int idx;
-
- (*mangled)++;
- idx = consume_count_with_underscores (mangled);
- if (idx == -1
- || (work->tmpl_argvec && idx >= work->ntmpl_args)
- || consume_count_with_underscores (mangled) == -1)
- return -1;
- if (work->tmpl_argvec)
- string_append (s, work->tmpl_argvec[idx]);
- else
- string_append_template_idx (s, idx);
- }
- else if (tk == tk_integral)
- success = demangle_integral_value (work, mangled, s);
- else if (tk == tk_char)
- {
- char tmp[2];
- int val;
- if (**mangled == 'm')
- {
- string_appendn (s, "-", 1);
- (*mangled)++;
- }
- string_appendn (s, "'", 1);
- val = consume_count(mangled);
- if (val <= 0)
- success = 0;
- else
- {
- tmp[0] = (char)val;
- tmp[1] = '\0';
- string_appendn (s, &tmp[0], 1);
- string_appendn (s, "'", 1);
- }
- }
- else if (tk == tk_bool)
- {
- int val = consume_count (mangled);
- if (val == 0)
- string_appendn (s, "false", 5);
- else if (val == 1)
- string_appendn (s, "true", 4);
- else
- success = 0;
- }
- else if (tk == tk_real)
- success = demangle_real_value (work, mangled, s);
- else if (tk == tk_pointer || tk == tk_reference)
- {
- if (**mangled == 'Q')
- success = demangle_qualified (work, mangled, s,
- /*isfuncname=*/0,
- /*append=*/1);
- else
- {
- int symbol_len = consume_count (mangled);
- if (symbol_len == -1)
- return -1;
- if (symbol_len == 0)
- string_appendn (s, "0", 1);
- else
- {
- char *p = XNEWVEC (char, symbol_len + 1), *q;
- strncpy (p, *mangled, symbol_len);
- p [symbol_len] = '\0';
- /* We use cplus_demangle here, rather than
- internal_cplus_demangle, because the name of the entity
- mangled here does not make use of any of the squangling
- or type-code information we have built up thus far; it is
- mangled independently. */
- q = cplus_demangle (p, work->options);
- if (tk == tk_pointer)
- string_appendn (s, "&", 1);
- /* FIXME: Pointer-to-member constants should get a
- qualifying class name here. */
- if (q)
- {
- string_append (s, q);
- free (q);
- }
- else
- string_append (s, p);
- free (p);
- }
- *mangled += symbol_len;
- }
- }
-
- return success;
-}
-
-/* Demangle the template name in MANGLED. The full name of the
- template (e.g., S<int>) is placed in TNAME. The name without the
- template parameters (e.g. S) is placed in TRAWNAME if TRAWNAME is
- non-NULL. If IS_TYPE is nonzero, this template is a type template,
- not a function template. If both IS_TYPE and REMEMBER are nonzero,
- the template is remembered in the list of back-referenceable
- types. */
-
-static int
-demangle_template (struct work_stuff *work, const char **mangled,
- string *tname, string *trawname,
- int is_type, int remember)
-{
- int i;
- int r;
- int need_comma = 0;
- int success = 0;
- int is_java_array = 0;
- string temp;
-
- (*mangled)++;
- if (is_type)
- {
- /* get template name */
- if (**mangled == 'z')
- {
- int idx;
- (*mangled)++;
- (*mangled)++;
-
- idx = consume_count_with_underscores (mangled);
- if (idx == -1
- || (work->tmpl_argvec && idx >= work->ntmpl_args)
- || consume_count_with_underscores (mangled) == -1)
- return (0);
-
- if (work->tmpl_argvec)
- {
- string_append (tname, work->tmpl_argvec[idx]);
- if (trawname)
- string_append (trawname, work->tmpl_argvec[idx]);
- }
- else
- {
- string_append_template_idx (tname, idx);
- if (trawname)
- string_append_template_idx (trawname, idx);
- }
- }
- else
- {
- if ((r = consume_count (mangled)) <= 0
- || (int) strlen (*mangled) < r)
- {
- return (0);
- }
- is_java_array = (work -> options & DMGL_JAVA)
- && strncmp (*mangled, "JArray1Z", 8) == 0;
- if (! is_java_array)
- {
- string_appendn (tname, *mangled, r);
- }
- if (trawname)
- string_appendn (trawname, *mangled, r);
- *mangled += r;
- }
- }
- if (!is_java_array)
- string_append (tname, "<");
- /* get size of template parameter list */
- if (!get_count (mangled, &r))
- {
- return (0);
- }
- if (!is_type)
- {
- /* Create an array for saving the template argument values. */
- work->tmpl_argvec = XNEWVEC (char *, r);
- work->ntmpl_args = r;
- for (i = 0; i < r; i++)
- work->tmpl_argvec[i] = 0;
- }
- for (i = 0; i < r; i++)
- {
- if (need_comma)
- {
- string_append (tname, ", ");
- }
- /* Z for type parameters */
- if (**mangled == 'Z')
- {
- (*mangled)++;
- /* temp is initialized in do_type */
- success = do_type (work, mangled, &temp);
- if (success)
- {
- string_appends (tname, &temp);
-
- if (!is_type)
- {
- /* Save the template argument. */
- int len = temp.p - temp.b;
- work->tmpl_argvec[i] = XNEWVEC (char, len + 1);
- memcpy (work->tmpl_argvec[i], temp.b, len);
- work->tmpl_argvec[i][len] = '\0';
- }
- }
- string_delete(&temp);
- if (!success)
- {
- break;
- }
- }
- /* z for template parameters */
- else if (**mangled == 'z')
- {
- int r2;
- (*mangled)++;
- success = demangle_template_template_parm (work, mangled, tname);
-
- if (success
- && (r2 = consume_count (mangled)) > 0
- && (int) strlen (*mangled) >= r2)
- {
- string_append (tname, " ");
- string_appendn (tname, *mangled, r2);
- if (!is_type)
- {
- /* Save the template argument. */
- int len = r2;
- work->tmpl_argvec[i] = XNEWVEC (char, len + 1);
- memcpy (work->tmpl_argvec[i], *mangled, len);
- work->tmpl_argvec[i][len] = '\0';
- }
- *mangled += r2;
- }
- if (!success)
- {
- break;
- }
- }
- else
- {
- string param;
- string* s;
-
- /* otherwise, value parameter */
-
- /* temp is initialized in do_type */
- success = do_type (work, mangled, &temp);
- string_delete(&temp);
- if (!success)
- break;
-
- if (!is_type)
- {
- s = &param;
- string_init (s);
- }
- else
- s = tname;
-
- success = demangle_template_value_parm (work, mangled, s,
- (type_kind_t) success);
-
- if (!success)
- {
- if (!is_type)
- string_delete (s);
- success = 0;
- break;
- }
-
- if (!is_type)
- {
- int len = s->p - s->b;
- work->tmpl_argvec[i] = XNEWVEC (char, len + 1);
- memcpy (work->tmpl_argvec[i], s->b, len);
- work->tmpl_argvec[i][len] = '\0';
-
- string_appends (tname, s);
- string_delete (s);
- }
- }
- need_comma = 1;
- }
- if (is_java_array)
- {
- string_append (tname, "[]");
- }
- else
- {
- if (tname->p[-1] == '>')
- string_append (tname, " ");
- string_append (tname, ">");
- }
-
- if (is_type && remember)
- {
- const int bindex = register_Btype (work);
- remember_Btype (work, tname->b, LEN_STRING (tname), bindex);
- }
-
- /*
- if (work -> static_type)
- {
- string_append (declp, *mangled + 1);
- *mangled += strlen (*mangled);
- success = 1;
- }
- else
- {
- success = demangle_args (work, mangled, declp);
- }
- }
- */
- return (success);
-}
-
-static int
-arm_pt (struct work_stuff *work, const char *mangled,
- int n, const char **anchor, const char **args)
-{
- /* Check if ARM template with "__pt__" in it ("parameterized type") */
- /* Allow HP also here, because HP's cfront compiler follows ARM to some extent */
- if ((ARM_DEMANGLING || HP_DEMANGLING) && (*anchor = strstr (mangled, "__pt__")))
- {
- int len;
- *args = *anchor + 6;
- len = consume_count (args);
- if (len == -1)
- return 0;
- if (*args + len == mangled + n && **args == '_')
- {
- ++*args;
- return 1;
- }
- }
- if (AUTO_DEMANGLING || EDG_DEMANGLING)
- {
- if ((*anchor = strstr (mangled, "__tm__"))
- || (*anchor = strstr (mangled, "__ps__"))
- || (*anchor = strstr (mangled, "__pt__")))
- {
- int len;
- *args = *anchor + 6;
- len = consume_count (args);
- if (len == -1)
- return 0;
- if (*args + len == mangled + n && **args == '_')
- {
- ++*args;
- return 1;
- }
- }
- else if ((*anchor = strstr (mangled, "__S")))
- {
- int len;
- *args = *anchor + 3;
- len = consume_count (args);
- if (len == -1)
- return 0;
- if (*args + len == mangled + n && **args == '_')
- {
- ++*args;
- return 1;
- }
- }
- }
-
- return 0;
-}
-
-static void
-demangle_arm_hp_template (struct work_stuff *work, const char **mangled,
- int n, string *declp)
-{
- const char *p;
- const char *args;
- const char *e = *mangled + n;
- string arg;
-
- /* Check for HP aCC template spec: classXt1t2 where t1, t2 are
- template args */
- if (HP_DEMANGLING && ((*mangled)[n] == 'X'))
- {
- char *start_spec_args = NULL;
- int hold_options;
-
- /* First check for and omit template specialization pseudo-arguments,
- such as in "Spec<#1,#1.*>" */
- start_spec_args = strchr (*mangled, '<');
- if (start_spec_args && (start_spec_args - *mangled < n))
- string_appendn (declp, *mangled, start_spec_args - *mangled);
- else
- string_appendn (declp, *mangled, n);
- (*mangled) += n + 1;
- string_init (&arg);
- if (work->temp_start == -1) /* non-recursive call */
- work->temp_start = declp->p - declp->b;
-
- /* We want to unconditionally demangle parameter types in
- template parameters. */
- hold_options = work->options;
- work->options |= DMGL_PARAMS;
-
- string_append (declp, "<");
- while (1)
- {
- string_delete (&arg);
- switch (**mangled)
- {
- case 'T':
- /* 'T' signals a type parameter */
- (*mangled)++;
- if (!do_type (work, mangled, &arg))
- goto hpacc_template_args_done;
- break;
-
- case 'U':
- case 'S':
- /* 'U' or 'S' signals an integral value */
- if (!do_hpacc_template_const_value (work, mangled, &arg))
- goto hpacc_template_args_done;
- break;
-
- case 'A':
- /* 'A' signals a named constant expression (literal) */
- if (!do_hpacc_template_literal (work, mangled, &arg))
- goto hpacc_template_args_done;
- break;
-
- default:
- /* Today, 1997-09-03, we have only the above types
- of template parameters */
- /* FIXME: maybe this should fail and return null */
- goto hpacc_template_args_done;
- }
- string_appends (declp, &arg);
- /* Check if we're at the end of template args.
- 0 if at end of static member of template class,
- _ if done with template args for a function */
- if ((**mangled == '\000') || (**mangled == '_'))
- break;
- else
- string_append (declp, ",");
- }
- hpacc_template_args_done:
- string_append (declp, ">");
- string_delete (&arg);
- if (**mangled == '_')
- (*mangled)++;
- work->options = hold_options;
- return;
- }
- /* ARM template? (Also handles HP cfront extensions) */
- else if (arm_pt (work, *mangled, n, &p, &args))
- {
- int hold_options;
- string type_str;
-
- string_init (&arg);
- string_appendn (declp, *mangled, p - *mangled);
- if (work->temp_start == -1) /* non-recursive call */
- work->temp_start = declp->p - declp->b;
-
- /* We want to unconditionally demangle parameter types in
- template parameters. */
- hold_options = work->options;
- work->options |= DMGL_PARAMS;
-
- string_append (declp, "<");
- /* should do error checking here */
- while (args < e) {
- string_delete (&arg);
-
- /* Check for type or literal here */
- switch (*args)
- {
- /* HP cfront extensions to ARM for template args */
- /* spec: Xt1Lv1 where t1 is a type, v1 is a literal value */
- /* FIXME: We handle only numeric literals for HP cfront */
- case 'X':
- /* A typed constant value follows */
- args++;
- if (!do_type (work, &args, &type_str))
- goto cfront_template_args_done;
- string_append (&arg, "(");
- string_appends (&arg, &type_str);
- string_delete (&type_str);
- string_append (&arg, ")");
- if (*args != 'L')
- goto cfront_template_args_done;
- args++;
- /* Now snarf a literal value following 'L' */
- if (!snarf_numeric_literal (&args, &arg))
- goto cfront_template_args_done;
- break;
-
- case 'L':
- /* Snarf a literal following 'L' */
- args++;
- if (!snarf_numeric_literal (&args, &arg))
- goto cfront_template_args_done;
- break;
- default:
- /* Not handling other HP cfront stuff */
- {
- const char* old_args = args;
- if (!do_type (work, &args, &arg))
- goto cfront_template_args_done;
-
- /* Fail if we didn't make any progress: prevent infinite loop. */
- if (args == old_args)
- {
- work->options = hold_options;
- return;
- }
- }
- }
- string_appends (declp, &arg);
- string_append (declp, ",");
- }
- cfront_template_args_done:
- string_delete (&arg);
- if (args >= e)
- --declp->p; /* remove extra comma */
- string_append (declp, ">");
- work->options = hold_options;
- }
- else if (n>10 && strncmp (*mangled, "_GLOBAL_", 8) == 0
- && (*mangled)[9] == 'N'
- && (*mangled)[8] == (*mangled)[10]
- && strchr (cplus_markers, (*mangled)[8]))
- {
- /* A member of the anonymous namespace. */
- string_append (declp, "{anonymous}");
- }
- else
- {
- if (work->temp_start == -1) /* non-recursive call only */
- work->temp_start = 0; /* disable in recursive calls */
- string_appendn (declp, *mangled, n);
- }
- *mangled += n;
-}
-
-/* Extract a class name, possibly a template with arguments, from the
- mangled string; qualifiers, local class indicators, etc. have
- already been dealt with */
-
-static int
-demangle_class_name (struct work_stuff *work, const char **mangled,
- string *declp)
-{
- int n;
- int success = 0;
-
- n = consume_count (mangled);
- if (n == -1)
- return 0;
- if ((int) strlen (*mangled) >= n)
- {
- demangle_arm_hp_template (work, mangled, n, declp);
- success = 1;
- }
-
- return (success);
-}
-
-/*
-
-LOCAL FUNCTION
-
- demangle_class -- demangle a mangled class sequence
-
-SYNOPSIS
-
- static int
- demangle_class (struct work_stuff *work, const char **mangled,
- strint *declp)
-
-DESCRIPTION
-
- DECLP points to the buffer into which demangling is being done.
-
- *MANGLED points to the current token to be demangled. On input,
- it points to a mangled class (I.E. "3foo", "13verylongclass", etc.)
- On exit, it points to the next token after the mangled class on
- success, or the first unconsumed token on failure.
-
- If the CONSTRUCTOR or DESTRUCTOR flags are set in WORK, then
- we are demangling a constructor or destructor. In this case
- we prepend "class::class" or "class::~class" to DECLP.
-
- Otherwise, we prepend "class::" to the current DECLP.
-
- Reset the constructor/destructor flags once they have been
- "consumed". This allows demangle_class to be called later during
- the same demangling, to do normal class demangling.
-
- Returns 1 if demangling is successful, 0 otherwise.
-
-*/
-
-static int
-demangle_class (struct work_stuff *work, const char **mangled, string *declp)
-{
- int success = 0;
- int btype;
- string class_name;
- char *save_class_name_end = 0;
-
- string_init (&class_name);
- btype = register_Btype (work);
- if (demangle_class_name (work, mangled, &class_name))
- {
- save_class_name_end = class_name.p;
- if ((work->constructor & 1) || (work->destructor & 1))
- {
- /* adjust so we don't include template args */
- if (work->temp_start && (work->temp_start != -1))
- {
- class_name.p = class_name.b + work->temp_start;
- }
- string_prepends (declp, &class_name);
- if (work -> destructor & 1)
- {
- string_prepend (declp, "~");
- work -> destructor -= 1;
- }
- else
- {
- work -> constructor -= 1;
- }
- }
- class_name.p = save_class_name_end;
- remember_Ktype (work, class_name.b, LEN_STRING(&class_name));
- remember_Btype (work, class_name.b, LEN_STRING(&class_name), btype);
- string_prepend (declp, SCOPE_STRING (work));
- string_prepends (declp, &class_name);
- success = 1;
- }
- string_delete (&class_name);
- return (success);
-}
-
-
-/* Called when there's a "__" in the mangled name, with `scan' pointing to
- the rightmost guess.
-
- Find the correct "__"-sequence where the function name ends and the
- signature starts, which is ambiguous with GNU mangling.
- Call demangle_signature here, so we can make sure we found the right
- one; *mangled will be consumed so caller will not make further calls to
- demangle_signature. */
-
-static int
-iterate_demangle_function (struct work_stuff *work, const char **mangled,
- string *declp, const char *scan)
-{
- const char *mangle_init = *mangled;
- int success = 0;
- string decl_init;
- struct work_stuff work_init;
-
- if (*(scan + 2) == '\0')
- return 0;
-
- /* Do not iterate for some demangling modes, or if there's only one
- "__"-sequence. This is the normal case. */
- if (ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING
- || strstr (scan + 2, "__") == NULL)
- return demangle_function_name (work, mangled, declp, scan);
-
- /* Save state so we can restart if the guess at the correct "__" was
- wrong. */
- string_init (&decl_init);
- string_appends (&decl_init, declp);
- memset (&work_init, 0, sizeof work_init);
- work_stuff_copy_to_from (&work_init, work);
-
- /* Iterate over occurrences of __, allowing names and types to have a
- "__" sequence in them. We must start with the first (not the last)
- occurrence, since "__" most often occur between independent mangled
- parts, hence starting at the last occurence inside a signature
- might get us a "successful" demangling of the signature. */
-
- while (scan[2])
- {
- if (demangle_function_name (work, mangled, declp, scan))
- {
- success = demangle_signature (work, mangled, declp);
- if (success)
- break;
- }
-
- /* Reset demangle state for the next round. */
- *mangled = mangle_init;
- string_clear (declp);
- string_appends (declp, &decl_init);
- work_stuff_copy_to_from (work, &work_init);
-
- /* Leave this underscore-sequence. */
- scan += 2;
-
- /* Scan for the next "__" sequence. */
- while (*scan && (scan[0] != '_' || scan[1] != '_'))
- scan++;
-
- /* Move to last "__" in this sequence. */
- while (*scan && *scan == '_')
- scan++;
- scan -= 2;
- }
-
- /* Delete saved state. */
- delete_work_stuff (&work_init);
- string_delete (&decl_init);
-
- return success;
-}
-
-/*
-
-LOCAL FUNCTION
-
- demangle_prefix -- consume the mangled name prefix and find signature
-
-SYNOPSIS
-
- static int
- demangle_prefix (struct work_stuff *work, const char **mangled,
- string *declp);
-
-DESCRIPTION
-
- Consume and demangle the prefix of the mangled name.
- While processing the function name root, arrange to call
- demangle_signature if the root is ambiguous.
-
- DECLP points to the string buffer into which demangled output is
- placed. On entry, the buffer is empty. On exit it contains
- the root function name, the demangled operator name, or in some
- special cases either nothing or the completely demangled result.
-
- MANGLED points to the current pointer into the mangled name. As each
- token of the mangled name is consumed, it is updated. Upon entry
- the current mangled name pointer points to the first character of
- the mangled name. Upon exit, it should point to the first character
- of the signature if demangling was successful, or to the first
- unconsumed character if demangling of the prefix was unsuccessful.
-
- Returns 1 on success, 0 otherwise.
- */
-
-static int
-demangle_prefix (struct work_stuff *work, const char **mangled,
- string *declp)
-{
- int success = 1;
- const char *scan;
- int i;
-
- if (strlen(*mangled) > 6
- && (strncmp(*mangled, "_imp__", 6) == 0
- || strncmp(*mangled, "__imp_", 6) == 0))
- {
- /* it's a symbol imported from a PE dynamic library. Check for both
- new style prefix _imp__ and legacy __imp_ used by older versions
- of dlltool. */
- (*mangled) += 6;
- work->dllimported = 1;
- }
- else if (strlen(*mangled) >= 11 && strncmp(*mangled, "_GLOBAL_", 8) == 0)
- {
- char *marker = strchr (cplus_markers, (*mangled)[8]);
- if (marker != NULL && *marker == (*mangled)[10])
- {
- if ((*mangled)[9] == 'D')
- {
- /* it's a GNU global destructor to be executed at program exit */
- (*mangled) += 11;
- work->destructor = 2;
- if (gnu_special (work, mangled, declp))
- return success;
- }
- else if ((*mangled)[9] == 'I')
- {
- /* it's a GNU global constructor to be executed at program init */
- (*mangled) += 11;
- work->constructor = 2;
- if (gnu_special (work, mangled, declp))
- return success;
- }
- }
- }
- else if ((ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) && strncmp(*mangled, "__std__", 7) == 0)
- {
- /* it's a ARM global destructor to be executed at program exit */
- (*mangled) += 7;
- work->destructor = 2;
- }
- else if ((ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING) && strncmp(*mangled, "__sti__", 7) == 0)
- {
- /* it's a ARM global constructor to be executed at program initial */
- (*mangled) += 7;
- work->constructor = 2;
- }
-
- /* This block of code is a reduction in strength time optimization
- of:
- scan = strstr (*mangled, "__"); */
-
- {
- scan = *mangled;
-
- do {
- scan = strchr (scan, '_');
- } while (scan != NULL && *++scan != '_');
-
- if (scan != NULL) --scan;
- }
-
- if (scan != NULL)
- {
- /* We found a sequence of two or more '_', ensure that we start at
- the last pair in the sequence. */
- i = strspn (scan, "_");
- if (i > 2)
- {
- scan += (i - 2);
- }
- }
-
- if (scan == NULL)
- {
- success = 0;
- }
- else if (work -> static_type)
- {
- if (!ISDIGIT ((unsigned char)scan[0]) && (scan[0] != 't'))
- {
- success = 0;
- }
- }
- else if ((scan == *mangled)
- && (ISDIGIT ((unsigned char)scan[2]) || (scan[2] == 'Q')
- || (scan[2] == 't') || (scan[2] == 'K') || (scan[2] == 'H')))
- {
- /* The ARM says nothing about the mangling of local variables.
- But cfront mangles local variables by prepending __<nesting_level>
- to them. As an extension to ARM demangling we handle this case. */
- if ((LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING)
- && ISDIGIT ((unsigned char)scan[2]))
- {
- *mangled = scan + 2;
- consume_count (mangled);
- string_append (declp, *mangled);
- *mangled += strlen (*mangled);
- success = 1;
- }
- else
- {
- /* A GNU style constructor starts with __[0-9Qt]. But cfront uses
- names like __Q2_3foo3bar for nested type names. So don't accept
- this style of constructor for cfront demangling. A GNU
- style member-template constructor starts with 'H'. */
- if (!(LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING))
- work -> constructor += 1;
- *mangled = scan + 2;
- }
- }
- else if (ARM_DEMANGLING && scan[2] == 'p' && scan[3] == 't')
- {
- /* Cfront-style parameterized type. Handled later as a signature. */
- success = 1;
-
- /* ARM template? */
- demangle_arm_hp_template (work, mangled, strlen (*mangled), declp);
- }
- else if (EDG_DEMANGLING && ((scan[2] == 't' && scan[3] == 'm')
- || (scan[2] == 'p' && scan[3] == 's')
- || (scan[2] == 'p' && scan[3] == 't')))
- {
- /* EDG-style parameterized type. Handled later as a signature. */
- success = 1;
-
- /* EDG template? */
- demangle_arm_hp_template (work, mangled, strlen (*mangled), declp);
- }
- else if ((scan == *mangled) && !ISDIGIT ((unsigned char)scan[2])
- && (scan[2] != 't'))
- {
- /* Mangled name starts with "__". Skip over any leading '_' characters,
- then find the next "__" that separates the prefix from the signature.
- */
- if (!(ARM_DEMANGLING || LUCID_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING)
- || (arm_special (mangled, declp) == 0))
- {
- while (*scan == '_')
- {
- scan++;
- }
- if ((scan = strstr (scan, "__")) == NULL || (*(scan + 2) == '\0'))
- {
- /* No separator (I.E. "__not_mangled"), or empty signature
- (I.E. "__not_mangled_either__") */
- success = 0;
- }
- else
- return iterate_demangle_function (work, mangled, declp, scan);
- }
- }
- else if (*(scan + 2) != '\0')
- {
- /* Mangled name does not start with "__" but does have one somewhere
- in there with non empty stuff after it. Looks like a global
- function name. Iterate over all "__":s until the right
- one is found. */
- return iterate_demangle_function (work, mangled, declp, scan);
- }
- else
- {
- /* Doesn't look like a mangled name */
- success = 0;
- }
-
- if (!success && (work->constructor == 2 || work->destructor == 2))
- {
- string_append (declp, *mangled);
- *mangled += strlen (*mangled);
- success = 1;
- }
- return (success);
-}
-
-/*
-
-LOCAL FUNCTION
-
- gnu_special -- special handling of gnu mangled strings
-
-SYNOPSIS
-
- static int
- gnu_special (struct work_stuff *work, const char **mangled,
- string *declp);
-
-
-DESCRIPTION
-
- Process some special GNU style mangling forms that don't fit
- the normal pattern. For example:
-
- _$_3foo (destructor for class foo)
- _vt$foo (foo virtual table)
- _vt$foo$bar (foo::bar virtual table)
- __vt_foo (foo virtual table, new style with thunks)
- _3foo$varname (static data member)
- _Q22rs2tu$vw (static data member)
- __t6vector1Zii (constructor with template)
- __thunk_4__$_7ostream (virtual function thunk)
- */
-
-static int
-gnu_special (struct work_stuff *work, const char **mangled, string *declp)
-{
- int n;
- int success = 1;
- const char *p;
-
- if ((*mangled)[0] == '_'
- && strchr (cplus_markers, (*mangled)[1]) != NULL
- && (*mangled)[2] == '_')
- {
- /* Found a GNU style destructor, get past "_<CPLUS_MARKER>_" */
- (*mangled) += 3;
- work -> destructor += 1;
- }
- else if ((*mangled)[0] == '_'
- && (((*mangled)[1] == '_'
- && (*mangled)[2] == 'v'
- && (*mangled)[3] == 't'
- && (*mangled)[4] == '_')
- || ((*mangled)[1] == 'v'
- && (*mangled)[2] == 't'
- && strchr (cplus_markers, (*mangled)[3]) != NULL)))
- {
- /* Found a GNU style virtual table, get past "_vt<CPLUS_MARKER>"
- and create the decl. Note that we consume the entire mangled
- input string, which means that demangle_signature has no work
- to do. */
- if ((*mangled)[2] == 'v')
- (*mangled) += 5; /* New style, with thunks: "__vt_" */
- else
- (*mangled) += 4; /* Old style, no thunks: "_vt<CPLUS_MARKER>" */
- while (**mangled != '\0')
- {
- switch (**mangled)
- {
- case 'Q':
- case 'K':
- success = demangle_qualified (work, mangled, declp, 0, 1);
- break;
- case 't':
- success = demangle_template (work, mangled, declp, 0, 1,
- 1);
- break;
- default:
- if (ISDIGIT((unsigned char)*mangled[0]))
- {
- n = consume_count(mangled);
- /* We may be seeing a too-large size, or else a
- ".<digits>" indicating a static local symbol. In
- any case, declare victory and move on; *don't* try
- to use n to allocate. */
- if (n > (int) strlen (*mangled))
- {
- success = 1;
- break;
- }
- }
- else
- {
- n = strcspn (*mangled, cplus_markers);
- }
- string_appendn (declp, *mangled, n);
- (*mangled) += n;
- }
-
- p = strpbrk (*mangled, cplus_markers);
- if (success && ((p == NULL) || (p == *mangled)))
- {
- if (p != NULL)
- {
- string_append (declp, SCOPE_STRING (work));
- (*mangled)++;
- }
- }
- else
- {
- success = 0;
- break;
- }
- }
- if (success)
- string_append (declp, " virtual table");
- }
- else if ((*mangled)[0] == '_'
- && (strchr("0123456789Qt", (*mangled)[1]) != NULL)
- && (p = strpbrk (*mangled, cplus_markers)) != NULL)
- {
- /* static data member, "_3foo$varname" for example */
- (*mangled)++;
- switch (**mangled)
- {
- case 'Q':
- case 'K':
- success = demangle_qualified (work, mangled, declp, 0, 1);
- break;
- case 't':
- success = demangle_template (work, mangled, declp, 0, 1, 1);
- break;
- default:
- n = consume_count (mangled);
- if (n < 0 || n > (long) strlen (*mangled))
- {
- success = 0;
- break;
- }
-
- if (n > 10 && strncmp (*mangled, "_GLOBAL_", 8) == 0
- && (*mangled)[9] == 'N'
- && (*mangled)[8] == (*mangled)[10]
- && strchr (cplus_markers, (*mangled)[8]))
- {
- /* A member of the anonymous namespace. There's information
- about what identifier or filename it was keyed to, but
- it's just there to make the mangled name unique; we just
- step over it. */
- string_append (declp, "{anonymous}");
- (*mangled) += n;
-
- /* Now p points to the marker before the N, so we need to
- update it to the first marker after what we consumed. */
- p = strpbrk (*mangled, cplus_markers);
- break;
- }
-
- string_appendn (declp, *mangled, n);
- (*mangled) += n;
- }
- if (success && (p == *mangled))
- {
- /* Consumed everything up to the cplus_marker, append the
- variable name. */
- (*mangled)++;
- string_append (declp, SCOPE_STRING (work));
- n = strlen (*mangled);
- string_appendn (declp, *mangled, n);
- (*mangled) += n;
- }
- else
- {
- success = 0;
- }
- }
- else if (strncmp (*mangled, "__thunk_", 8) == 0)
- {
- int delta;
-
- (*mangled) += 8;
- delta = consume_count (mangled);
- if (delta == -1)
- success = 0;
- else
- {
- char *method = internal_cplus_demangle (work, ++*mangled);
-
- if (method)
- {
- char buf[50];
- sprintf (buf, "virtual function thunk (delta:%d) for ", -delta);
- string_append (declp, buf);
- string_append (declp, method);
- free (method);
- n = strlen (*mangled);
- (*mangled) += n;
- }
- else
- {
- success = 0;
- }
- }
- }
- else if (strncmp (*mangled, "__t", 3) == 0
- && ((*mangled)[3] == 'i' || (*mangled)[3] == 'f'))
- {
- p = (*mangled)[3] == 'i' ? " type_info node" : " type_info function";
- (*mangled) += 4;
- switch (**mangled)
- {
- case 'Q':
- case 'K':
- success = demangle_qualified (work, mangled, declp, 0, 1);
- break;
- case 't':
- success = demangle_template (work, mangled, declp, 0, 1, 1);
- break;
- default:
- success = do_type (work, mangled, declp);
- break;
- }
- if (success && **mangled != '\0')
- success = 0;
- if (success)
- string_append (declp, p);
- }
- else
- {
- success = 0;
- }
- return (success);
-}
-
-static void
-recursively_demangle(struct work_stuff *work, const char **mangled,
- string *result, int namelength)
-{
- char * recurse = (char *)NULL;
- char * recurse_dem = (char *)NULL;
-
- recurse = XNEWVEC (char, namelength + 1);
- memcpy (recurse, *mangled, namelength);
- recurse[namelength] = '\000';
-
- recurse_dem = cplus_demangle (recurse, work->options);
-
- if (recurse_dem)
- {
- string_append (result, recurse_dem);
- free (recurse_dem);
- }
- else
- {
- string_appendn (result, *mangled, namelength);
- }
- free (recurse);
- *mangled += namelength;
-}
-
-/*
-
-LOCAL FUNCTION
-
- arm_special -- special handling of ARM/lucid mangled strings
-
-SYNOPSIS
-
- static int
- arm_special (const char **mangled,
- string *declp);
-
-
-DESCRIPTION
-
- Process some special ARM style mangling forms that don't fit
- the normal pattern. For example:
-
- __vtbl__3foo (foo virtual table)
- __vtbl__3foo__3bar (bar::foo virtual table)
-
- */
-
-static int
-arm_special (const char **mangled, string *declp)
-{
- int n;
- int success = 1;
- const char *scan;
-
- if (strncmp (*mangled, ARM_VTABLE_STRING, ARM_VTABLE_STRLEN) == 0)
- {
- /* Found a ARM style virtual table, get past ARM_VTABLE_STRING
- and create the decl. Note that we consume the entire mangled
- input string, which means that demangle_signature has no work
- to do. */
- scan = *mangled + ARM_VTABLE_STRLEN;
- while (*scan != '\0') /* first check it can be demangled */
- {
- n = consume_count (&scan);
- if (n == -1)
- {
- return (0); /* no good */
- }
- scan += n;
- if (scan[0] == '_' && scan[1] == '_')
- {
- scan += 2;
- }
- }
- (*mangled) += ARM_VTABLE_STRLEN;
- while (**mangled != '\0')
- {
- n = consume_count (mangled);
- if (n == -1
- || n > (long) strlen (*mangled))
- return 0;
- string_prependn (declp, *mangled, n);
- (*mangled) += n;
- if ((*mangled)[0] == '_' && (*mangled)[1] == '_')
- {
- string_prepend (declp, "::");
- (*mangled) += 2;
- }
- }
- string_append (declp, " virtual table");
- }
- else
- {
- success = 0;
- }
- return (success);
-}
-
-/*
-
-LOCAL FUNCTION
-
- demangle_qualified -- demangle 'Q' qualified name strings
-
-SYNOPSIS
-
- static int
- demangle_qualified (struct work_stuff *, const char *mangled,
- string *result, int isfuncname, int append);
-
-DESCRIPTION
-
- Demangle a qualified name, such as "Q25Outer5Inner" which is
- the mangled form of "Outer::Inner". The demangled output is
- prepended or appended to the result string according to the
- state of the append flag.
-
- If isfuncname is nonzero, then the qualified name we are building
- is going to be used as a member function name, so if it is a
- constructor or destructor function, append an appropriate
- constructor or destructor name. I.E. for the above example,
- the result for use as a constructor is "Outer::Inner::Inner"
- and the result for use as a destructor is "Outer::Inner::~Inner".
-
-BUGS
-
- Numeric conversion is ASCII dependent (FIXME).
-
- */
-
-static int
-demangle_qualified (struct work_stuff *work, const char **mangled,
- string *result, int isfuncname, int append)
-{
- int qualifiers = 0;
- int success = 1;
- char num[2];
- string temp;
- string last_name;
- int bindex = register_Btype (work);
-
- /* We only make use of ISFUNCNAME if the entity is a constructor or
- destructor. */
- isfuncname = (isfuncname
- && ((work->constructor & 1) || (work->destructor & 1)));
-
- string_init (&temp);
- string_init (&last_name);
-
- if ((*mangled)[0] == 'K')
- {
- /* Squangling qualified name reuse */
- int idx;
- (*mangled)++;
- idx = consume_count_with_underscores (mangled);
- if (idx == -1 || idx >= work -> numk)
- success = 0;
- else
- string_append (&temp, work -> ktypevec[idx]);
- }
- else
- switch ((*mangled)[1])
- {
- case '_':
- /* GNU mangled name with more than 9 classes. The count is preceded
- by an underscore (to distinguish it from the <= 9 case) and followed
- by an underscore. */
- (*mangled)++;
- qualifiers = consume_count_with_underscores (mangled);
- if (qualifiers == -1)
- success = 0;
- break;
-
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- /* The count is in a single digit. */
- num[0] = (*mangled)[1];
- num[1] = '\0';
- qualifiers = atoi (num);
-
- /* If there is an underscore after the digit, skip it. This is
- said to be for ARM-qualified names, but the ARM makes no
- mention of such an underscore. Perhaps cfront uses one. */
- if ((*mangled)[2] == '_')
- {
- (*mangled)++;
- }
- (*mangled) += 2;
- break;
-
- case '0':
- default:
- success = 0;
- }
-
- if (!success)
- return success;
-
- /* Pick off the names and collect them in the temp buffer in the order
- in which they are found, separated by '::'. */
-
- while (qualifiers-- > 0)
- {
- int remember_K = 1;
- string_clear (&last_name);
-
- if (*mangled[0] == '_')
- (*mangled)++;
-
- if (*mangled[0] == 't')
- {
- /* Here we always append to TEMP since we will want to use
- the template name without the template parameters as a
- constructor or destructor name. The appropriate
- (parameter-less) value is returned by demangle_template
- in LAST_NAME. We do not remember the template type here,
- in order to match the G++ mangling algorithm. */
- success = demangle_template(work, mangled, &temp,
- &last_name, 1, 0);
- if (!success)
- break;
- }
- else if (*mangled[0] == 'K')
- {
- int idx;
- (*mangled)++;
- idx = consume_count_with_underscores (mangled);
- if (idx == -1 || idx >= work->numk)
- success = 0;
- else
- string_append (&temp, work->ktypevec[idx]);
- remember_K = 0;
-
- if (!success) break;
- }
- else
- {
- if (EDG_DEMANGLING)
- {
- int namelength;
- /* Now recursively demangle the qualifier
- * This is necessary to deal with templates in
- * mangling styles like EDG */
- namelength = consume_count (mangled);
- if (namelength == -1)
- {
- success = 0;
- break;
- }
- recursively_demangle(work, mangled, &temp, namelength);
- }
- else
- {
- string_delete (&last_name);
- success = do_type (work, mangled, &last_name);
- if (!success)
- break;
- string_appends (&temp, &last_name);
- }
- }
-
- if (remember_K)
- remember_Ktype (work, temp.b, LEN_STRING (&temp));
-
- if (qualifiers > 0)
- string_append (&temp, SCOPE_STRING (work));
- }
-
- remember_Btype (work, temp.b, LEN_STRING (&temp), bindex);
-
- /* If we are using the result as a function name, we need to append
- the appropriate '::' separated constructor or destructor name.
- We do this here because this is the most convenient place, where
- we already have a pointer to the name and the length of the name. */
-
- if (isfuncname)
- {
- string_append (&temp, SCOPE_STRING (work));
- if (work -> destructor & 1)
- string_append (&temp, "~");
- string_appends (&temp, &last_name);
- }
-
- /* Now either prepend the temp buffer to the result, or append it,
- depending upon the state of the append flag. */
-
- if (append)
- string_appends (result, &temp);
- else
- {
- if (!STRING_EMPTY (result))
- string_append (&temp, SCOPE_STRING (work));
- string_prepends (result, &temp);
- }
-
- string_delete (&last_name);
- string_delete (&temp);
- return (success);
-}
-
-/*
-
-LOCAL FUNCTION
-
- get_count -- convert an ascii count to integer, consuming tokens
-
-SYNOPSIS
-
- static int
- get_count (const char **type, int *count)
-
-DESCRIPTION
-
- Assume that *type points at a count in a mangled name; set
- *count to its value, and set *type to the next character after
- the count. There are some weird rules in effect here.
-
- If *type does not point at a string of digits, return zero.
-
- If *type points at a string of digits followed by an
- underscore, set *count to their value as an integer, advance
- *type to point *after the underscore, and return 1.
-
- If *type points at a string of digits not followed by an
- underscore, consume only the first digit. Set *count to its
- value as an integer, leave *type pointing after that digit,
- and return 1.
-
- The excuse for this odd behavior: in the ARM and HP demangling
- styles, a type can be followed by a repeat count of the form
- `Nxy', where:
-
- `x' is a single digit specifying how many additional copies
- of the type to append to the argument list, and
-
- `y' is one or more digits, specifying the zero-based index of
- the first repeated argument in the list. Yes, as you're
- unmangling the name you can figure this out yourself, but
- it's there anyway.
-
- So, for example, in `bar__3fooFPiN51', the first argument is a
- pointer to an integer (`Pi'), and then the next five arguments
- are the same (`N5'), and the first repeat is the function's
- second argument (`1').
-*/
-
-static int
-get_count (const char **type, int *count)
-{
- const char *p;
- int n;
-
- if (!ISDIGIT ((unsigned char)**type))
- return (0);
- else
- {
- *count = **type - '0';
- (*type)++;
- if (ISDIGIT ((unsigned char)**type))
- {
- p = *type;
- n = *count;
- do
- {
- n *= 10;
- n += *p - '0';
- p++;
- }
- while (ISDIGIT ((unsigned char)*p));
- if (*p == '_')
- {
- *type = p + 1;
- *count = n;
- }
- }
- }
- return (1);
-}
-
-/* RESULT will be initialised here; it will be freed on failure. The
- value returned is really a type_kind_t. */
-
-static int
-do_type (struct work_stuff *work, const char **mangled, string *result)
-{
- int n;
- int done;
- int success;
- string decl;
- const char *remembered_type;
- int type_quals;
- type_kind_t tk = tk_none;
-
- string_init (&decl);
- string_init (result);
-
- done = 0;
- success = 1;
- while (success && !done)
- {
- int member;
- switch (**mangled)
- {
-
- /* A pointer type */
- case 'P':
- case 'p':
- (*mangled)++;
- if (! (work -> options & DMGL_JAVA))
- string_prepend (&decl, "*");
- if (tk == tk_none)
- tk = tk_pointer;
- break;
-
- /* A reference type */
- case 'R':
- (*mangled)++;
- string_prepend (&decl, "&");
- if (tk == tk_none)
- tk = tk_reference;
- break;
-
- /* An array */
- case 'A':
- {
- ++(*mangled);
- if (!STRING_EMPTY (&decl)
- && (decl.b[0] == '*' || decl.b[0] == '&'))
- {
- string_prepend (&decl, "(");
- string_append (&decl, ")");
- }
- string_append (&decl, "[");
- if (**mangled != '_')
- success = demangle_template_value_parm (work, mangled, &decl,
- tk_integral);
- if (**mangled == '_')
- ++(*mangled);
- string_append (&decl, "]");
- break;
- }
-
- /* A back reference to a previously seen type */
- case 'T':
- (*mangled)++;
- if (!get_count (mangled, &n) || n >= work -> ntypes)
- {
- success = 0;
- }
- else
- {
- remembered_type = work -> typevec[n];
- mangled = &remembered_type;
- }
- break;
-
- /* A function */
- case 'F':
- (*mangled)++;
- if (!STRING_EMPTY (&decl)
- && (decl.b[0] == '*' || decl.b[0] == '&'))
- {
- string_prepend (&decl, "(");
- string_append (&decl, ")");
- }
- /* After picking off the function args, we expect to either find the
- function return type (preceded by an '_') or the end of the
- string. */
- if (!demangle_nested_args (work, mangled, &decl)
- || (**mangled != '_' && **mangled != '\0'))
- {
- success = 0;
- break;
- }
- if (success && (**mangled == '_'))
- (*mangled)++;
- break;
-
- case 'M':
- case 'O':
- {
- type_quals = TYPE_UNQUALIFIED;
-
- member = **mangled == 'M';
- (*mangled)++;
-
- string_append (&decl, ")");
-
- /* We don't need to prepend `::' for a qualified name;
- demangle_qualified will do that for us. */
- if (**mangled != 'Q')
- string_prepend (&decl, SCOPE_STRING (work));
-
- if (ISDIGIT ((unsigned char)**mangled))
- {
- n = consume_count (mangled);
- if (n == -1
- || (int) strlen (*mangled) < n)
- {
- success = 0;
- break;
- }
- string_prependn (&decl, *mangled, n);
- *mangled += n;
- }
- else if (**mangled == 'X' || **mangled == 'Y')
- {
- string temp;
- do_type (work, mangled, &temp);
- string_prepends (&decl, &temp);
- string_delete (&temp);
- }
- else if (**mangled == 't')
- {
- string temp;
- string_init (&temp);
- success = demangle_template (work, mangled, &temp,
- NULL, 1, 1);
- if (success)
- {
- string_prependn (&decl, temp.b, temp.p - temp.b);
- string_delete (&temp);
- }
- else
- break;
- }
- else if (**mangled == 'Q')
- {
- success = demangle_qualified (work, mangled, &decl,
- /*isfuncnam=*/0,
- /*append=*/0);
- if (!success)
- break;
- }
- else
- {
- success = 0;
- break;
- }
-
- string_prepend (&decl, "(");
- if (member)
- {
- switch (**mangled)
- {
- case 'C':
- case 'V':
- case 'u':
- type_quals |= code_for_qualifier (**mangled);
- (*mangled)++;
- break;
-
- default:
- break;
- }
-
- if (*(*mangled)++ != 'F')
- {
- success = 0;
- break;
- }
- }
- if ((member && !demangle_nested_args (work, mangled, &decl))
- || **mangled != '_')
- {
- success = 0;
- break;
- }
- (*mangled)++;
- if (! PRINT_ANSI_QUALIFIERS)
- {
- break;
- }
- if (type_quals != TYPE_UNQUALIFIED)
- {
- APPEND_BLANK (&decl);
- string_append (&decl, qualifier_string (type_quals));
- }
- break;
- }
- case 'G':
- (*mangled)++;
- break;
-
- case 'C':
- case 'V':
- case 'u':
- if (PRINT_ANSI_QUALIFIERS)
- {
- if (!STRING_EMPTY (&decl))
- string_prepend (&decl, " ");
-
- string_prepend (&decl, demangle_qualifier (**mangled));
- }
- (*mangled)++;
- break;
- /*
- }
- */
-
- /* fall through */
- default:
- done = 1;
- break;
- }
- }
-
- if (success) switch (**mangled)
- {
- /* A qualified name, such as "Outer::Inner". */
- case 'Q':
- case 'K':
- {
- success = demangle_qualified (work, mangled, result, 0, 1);
- break;
- }
-
- /* A back reference to a previously seen squangled type */
- case 'B':
- (*mangled)++;
- if (!get_count (mangled, &n) || n >= work -> numb)
- success = 0;
- else
- string_append (result, work->btypevec[n]);
- break;
-
- case 'X':
- case 'Y':
- /* A template parm. We substitute the corresponding argument. */
- {
- int idx;
-
- (*mangled)++;
- idx = consume_count_with_underscores (mangled);
-
- if (idx == -1
- || (work->tmpl_argvec && idx >= work->ntmpl_args)
- || consume_count_with_underscores (mangled) == -1)
- {
- success = 0;
- break;
- }
-
- if (work->tmpl_argvec)
- string_append (result, work->tmpl_argvec[idx]);
- else
- string_append_template_idx (result, idx);
-
- success = 1;
- }
- break;
-
- default:
- success = demangle_fund_type (work, mangled, result);
- if (tk == tk_none)
- tk = (type_kind_t) success;
- break;
- }
-
- if (success)
- {
- if (!STRING_EMPTY (&decl))
- {
- string_append (result, " ");
- string_appends (result, &decl);
- }
- }
- else
- string_delete (result);
- string_delete (&decl);
-
- if (success)
- /* Assume an integral type, if we're not sure. */
- return (int) ((tk == tk_none) ? tk_integral : tk);
- else
- return 0;
-}
-
-/* Given a pointer to a type string that represents a fundamental type
- argument (int, long, unsigned int, etc) in TYPE, a pointer to the
- string in which the demangled output is being built in RESULT, and
- the WORK structure, decode the types and add them to the result.
-
- For example:
-
- "Ci" => "const int"
- "Sl" => "signed long"
- "CUs" => "const unsigned short"
-
- The value returned is really a type_kind_t. */
-
-static int
-demangle_fund_type (struct work_stuff *work,
- const char **mangled, string *result)
-{
- int done = 0;
- int success = 1;
- char buf[INTBUF_SIZE + 5 /* 'int%u_t' */];
- unsigned int dec = 0;
- type_kind_t tk = tk_integral;
-
- /* First pick off any type qualifiers. There can be more than one. */
-
- while (!done)
- {
- switch (**mangled)
- {
- case 'C':
- case 'V':
- case 'u':
- if (PRINT_ANSI_QUALIFIERS)
- {
- if (!STRING_EMPTY (result))
- string_prepend (result, " ");
- string_prepend (result, demangle_qualifier (**mangled));
- }
- (*mangled)++;
- break;
- case 'U':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "unsigned");
- break;
- case 'S': /* signed char only */
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "signed");
- break;
- case 'J':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "__complex");
- break;
- default:
- done = 1;
- break;
- }
- }
-
- /* Now pick off the fundamental type. There can be only one. */
-
- switch (**mangled)
- {
- case '\0':
- case '_':
- break;
- case 'v':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "void");
- break;
- case 'x':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "long long");
- break;
- case 'l':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "long");
- break;
- case 'i':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "int");
- break;
- case 's':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "short");
- break;
- case 'b':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "bool");
- tk = tk_bool;
- break;
- case 'c':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "char");
- tk = tk_char;
- break;
- case 'w':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "wchar_t");
- tk = tk_char;
- break;
- case 'r':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "long double");
- tk = tk_real;
- break;
- case 'd':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "double");
- tk = tk_real;
- break;
- case 'f':
- (*mangled)++;
- APPEND_BLANK (result);
- string_append (result, "float");
- tk = tk_real;
- break;
- case 'G':
- (*mangled)++;
- if (!ISDIGIT ((unsigned char)**mangled))
- {
- success = 0;
- break;
- }
- case 'I':
- (*mangled)++;
- if (**mangled == '_')
- {
- int i;
- (*mangled)++;
- for (i = 0;
- i < (long) sizeof (buf) - 1 && **mangled && **mangled != '_';
- (*mangled)++, i++)
- buf[i] = **mangled;
- if (**mangled != '_')
- {
- success = 0;
- break;
- }
- buf[i] = '\0';
- (*mangled)++;
- }
- else
- {
- strncpy (buf, *mangled, 2);
- buf[2] = '\0';
- *mangled += min (strlen (*mangled), 2);
- }
- sscanf (buf, "%x", &dec);
- sprintf (buf, "int%u_t", dec);
- APPEND_BLANK (result);
- string_append (result, buf);
- break;
-
- /* fall through */
- /* An explicit type, such as "6mytype" or "7integer" */
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- {
- int bindex = register_Btype (work);
- string btype;
- string_init (&btype);
- if (demangle_class_name (work, mangled, &btype)) {
- remember_Btype (work, btype.b, LEN_STRING (&btype), bindex);
- APPEND_BLANK (result);
- string_appends (result, &btype);
- }
- else
- success = 0;
- string_delete (&btype);
- break;
- }
- case 't':
- {
- string btype;
- string_init (&btype);
- success = demangle_template (work, mangled, &btype, 0, 1, 1);
- string_appends (result, &btype);
- string_delete (&btype);
- break;
- }
- default:
- success = 0;
- break;
- }
-
- return success ? ((int) tk) : 0;
-}
-
-
-/* Handle a template's value parameter for HP aCC (extension from ARM)
- **mangled points to 'S' or 'U' */
-
-static int
-do_hpacc_template_const_value (struct work_stuff *work ATTRIBUTE_UNUSED,
- const char **mangled, string *result)
-{
- int unsigned_const;
-
- if (**mangled != 'U' && **mangled != 'S')
- return 0;
-
- unsigned_const = (**mangled == 'U');
-
- (*mangled)++;
-
- switch (**mangled)
- {
- case 'N':
- string_append (result, "-");
- /* fall through */
- case 'P':
- (*mangled)++;
- break;
- case 'M':
- /* special case for -2^31 */
- string_append (result, "-2147483648");
- (*mangled)++;
- return 1;
- default:
- return 0;
- }
-
- /* We have to be looking at an integer now */
- if (!(ISDIGIT ((unsigned char)**mangled)))
- return 0;
-
- /* We only deal with integral values for template
- parameters -- so it's OK to look only for digits */
- while (ISDIGIT ((unsigned char)**mangled))
- {
- char_str[0] = **mangled;
- string_append (result, char_str);
- (*mangled)++;
- }
-
- if (unsigned_const)
- string_append (result, "U");
-
- /* FIXME? Some day we may have 64-bit (or larger :-) ) constants
- with L or LL suffixes. pai/1997-09-03 */
-
- return 1; /* success */
-}
-
-/* Handle a template's literal parameter for HP aCC (extension from ARM)
- **mangled is pointing to the 'A' */
-
-static int
-do_hpacc_template_literal (struct work_stuff *work, const char **mangled,
- string *result)
-{
- int literal_len = 0;
- char * recurse;
- char * recurse_dem;
-
- if (**mangled != 'A')
- return 0;
-
- (*mangled)++;
-
- literal_len = consume_count (mangled);
-
- if (literal_len <= 0)
- return 0;
-
- /* Literal parameters are names of arrays, functions, etc. and the
- canonical representation uses the address operator */
- string_append (result, "&");
-
- /* Now recursively demangle the literal name */
- recurse = XNEWVEC (char, literal_len + 1);
- memcpy (recurse, *mangled, literal_len);
- recurse[literal_len] = '\000';
-
- recurse_dem = cplus_demangle (recurse, work->options);
-
- if (recurse_dem)
- {
- string_append (result, recurse_dem);
- free (recurse_dem);
- }
- else
- {
- string_appendn (result, *mangled, literal_len);
- }
- (*mangled) += literal_len;
- free (recurse);
-
- return 1;
-}
-
-static int
-snarf_numeric_literal (const char **args, string *arg)
-{
- if (**args == '-')
- {
- char_str[0] = '-';
- string_append (arg, char_str);
- (*args)++;
- }
- else if (**args == '+')
- (*args)++;
-
- if (!ISDIGIT ((unsigned char)**args))
- return 0;
-
- while (ISDIGIT ((unsigned char)**args))
- {
- char_str[0] = **args;
- string_append (arg, char_str);
- (*args)++;
- }
-
- return 1;
-}
-
-/* Demangle the next argument, given by MANGLED into RESULT, which
- *should be an uninitialized* string. It will be initialized here,
- and free'd should anything go wrong. */
-
-static int
-do_arg (struct work_stuff *work, const char **mangled, string *result)
-{
- /* Remember where we started so that we can record the type, for
- non-squangling type remembering. */
- const char *start = *mangled;
-
- string_init (result);
-
- if (work->nrepeats > 0)
- {
- --work->nrepeats;
-
- if (work->previous_argument == 0)
- return 0;
-
- /* We want to reissue the previous type in this argument list. */
- string_appends (result, work->previous_argument);
- return 1;
- }
-
- if (**mangled == 'n')
- {
- /* A squangling-style repeat. */
- (*mangled)++;
- work->nrepeats = consume_count(mangled);
-
- if (work->nrepeats <= 0)
- /* This was not a repeat count after all. */
- return 0;
-
- if (work->nrepeats > 9)
- {
- if (**mangled != '_')
- /* The repeat count should be followed by an '_' in this
- case. */
- return 0;
- else
- (*mangled)++;
- }
-
- /* Now, the repeat is all set up. */
- return do_arg (work, mangled, result);
- }
-
- /* Save the result in WORK->previous_argument so that we can find it
- if it's repeated. Note that saving START is not good enough: we
- do not want to add additional types to the back-referenceable
- type vector when processing a repeated type. */
- if (work->previous_argument)
- string_delete (work->previous_argument);
- else
- work->previous_argument = XNEW (string);
-
- if (!do_type (work, mangled, work->previous_argument))
- return 0;
-
- string_appends (result, work->previous_argument);
-
- remember_type (work, start, *mangled - start);
- return 1;
-}
-
-static void
-remember_type (struct work_stuff *work, const char *start, int len)
-{
- char *tem;
-
- if (work->forgetting_types)
- return;
-
- if (work -> ntypes >= work -> typevec_size)
- {
- if (work -> typevec_size == 0)
- {
- work -> typevec_size = 3;
- work -> typevec = XNEWVEC (char *, work->typevec_size);
- }
- else
- {
- work -> typevec_size *= 2;
- work -> typevec
- = XRESIZEVEC (char *, work->typevec, work->typevec_size);
- }
- }
- tem = XNEWVEC (char, len + 1);
- memcpy (tem, start, len);
- tem[len] = '\0';
- work -> typevec[work -> ntypes++] = tem;
-}
-
-
-/* Remember a K type class qualifier. */
-static void
-remember_Ktype (struct work_stuff *work, const char *start, int len)
-{
- char *tem;
-
- if (work -> numk >= work -> ksize)
- {
- if (work -> ksize == 0)
- {
- work -> ksize = 5;
- work -> ktypevec = XNEWVEC (char *, work->ksize);
- }
- else
- {
- work -> ksize *= 2;
- work -> ktypevec
- = XRESIZEVEC (char *, work->ktypevec, work->ksize);
- }
- }
- tem = XNEWVEC (char, len + 1);
- memcpy (tem, start, len);
- tem[len] = '\0';
- work -> ktypevec[work -> numk++] = tem;
-}
-
-/* Register a B code, and get an index for it. B codes are registered
- as they are seen, rather than as they are completed, so map<temp<char> >
- registers map<temp<char> > as B0, and temp<char> as B1 */
-
-static int
-register_Btype (struct work_stuff *work)
-{
- int ret;
-
- if (work -> numb >= work -> bsize)
- {
- if (work -> bsize == 0)
- {
- work -> bsize = 5;
- work -> btypevec = XNEWVEC (char *, work->bsize);
- }
- else
- {
- work -> bsize *= 2;
- work -> btypevec
- = XRESIZEVEC (char *, work->btypevec, work->bsize);
- }
- }
- ret = work -> numb++;
- work -> btypevec[ret] = NULL;
- return(ret);
-}
-
-/* Store a value into a previously registered B code type. */
-
-static void
-remember_Btype (struct work_stuff *work, const char *start,
- int len, int index)
-{
- char *tem;
-
- tem = XNEWVEC (char, len + 1);
- memcpy (tem, start, len);
- tem[len] = '\0';
- work -> btypevec[index] = tem;
-}
-
-/* Lose all the info related to B and K type codes. */
-static void
-forget_B_and_K_types (struct work_stuff *work)
-{
- int i;
-
- while (work -> numk > 0)
- {
- i = --(work -> numk);
- if (work -> ktypevec[i] != NULL)
- {
- free (work -> ktypevec[i]);
- work -> ktypevec[i] = NULL;
- }
- }
-
- while (work -> numb > 0)
- {
- i = --(work -> numb);
- if (work -> btypevec[i] != NULL)
- {
- free (work -> btypevec[i]);
- work -> btypevec[i] = NULL;
- }
- }
-}
-/* Forget the remembered types, but not the type vector itself. */
-
-static void
-forget_types (struct work_stuff *work)
-{
- int i;
-
- while (work -> ntypes > 0)
- {
- i = --(work -> ntypes);
- if (work -> typevec[i] != NULL)
- {
- free (work -> typevec[i]);
- work -> typevec[i] = NULL;
- }
- }
-}
-
-/* Process the argument list part of the signature, after any class spec
- has been consumed, as well as the first 'F' character (if any). For
- example:
-
- "__als__3fooRT0" => process "RT0"
- "complexfunc5__FPFPc_PFl_i" => process "PFPc_PFl_i"
-
- DECLP must be already initialised, usually non-empty. It won't be freed
- on failure.
-
- Note that g++ differs significantly from ARM and lucid style mangling
- with regards to references to previously seen types. For example, given
- the source fragment:
-
- class foo {
- public:
- foo::foo (int, foo &ia, int, foo &ib, int, foo &ic);
- };
-
- foo::foo (int, foo &ia, int, foo &ib, int, foo &ic) { ia = ib = ic; }
- void foo (int, foo &ia, int, foo &ib, int, foo &ic) { ia = ib = ic; }
-
- g++ produces the names:
-
- __3fooiRT0iT2iT2
- foo__FiR3fooiT1iT1
-
- while lcc (and presumably other ARM style compilers as well) produces:
-
- foo__FiR3fooT1T2T1T2
- __ct__3fooFiR3fooT1T2T1T2
-
- Note that g++ bases its type numbers starting at zero and counts all
- previously seen types, while lucid/ARM bases its type numbers starting
- at one and only considers types after it has seen the 'F' character
- indicating the start of the function args. For lucid/ARM style, we
- account for this difference by discarding any previously seen types when
- we see the 'F' character, and subtracting one from the type number
- reference.
-
- */
-
-static int
-demangle_args (struct work_stuff *work, const char **mangled,
- string *declp)
-{
- string arg;
- int need_comma = 0;
- int r;
- int t;
- const char *tem;
- char temptype;
-
- if (PRINT_ARG_TYPES)
- {
- string_append (declp, "(");
- if (**mangled == '\0')
- {
- string_append (declp, "void");
- }
- }
-
- while ((**mangled != '_' && **mangled != '\0' && **mangled != 'e')
- || work->nrepeats > 0)
- {
- if ((**mangled == 'N') || (**mangled == 'T'))
- {
- temptype = *(*mangled)++;
-
- if (temptype == 'N')
- {
- if (!get_count (mangled, &r))
- {
- return (0);
- }
- }
- else
- {
- r = 1;
- }
- if ((HP_DEMANGLING || ARM_DEMANGLING || EDG_DEMANGLING) && work -> ntypes >= 10)
- {
- /* If we have 10 or more types we might have more than a 1 digit
- index so we'll have to consume the whole count here. This
- will lose if the next thing is a type name preceded by a
- count but it's impossible to demangle that case properly
- anyway. Eg if we already have 12 types is T12Pc "(..., type1,
- Pc, ...)" or "(..., type12, char *, ...)" */
- if ((t = consume_count(mangled)) <= 0)
- {
- return (0);
- }
- }
- else
- {
- if (!get_count (mangled, &t))
- {
- return (0);
- }
- }
- if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING)
- {
- t--;
- }
- /* Validate the type index. Protect against illegal indices from
- malformed type strings. */
- if ((t < 0) || (t >= work -> ntypes))
- {
- return (0);
- }
- while (work->nrepeats > 0 || --r >= 0)
- {
- tem = work -> typevec[t];
- if (need_comma && PRINT_ARG_TYPES)
- {
- string_append (declp, ", ");
- }
- if (!do_arg (work, &tem, &arg))
- {
- return (0);
- }
- if (PRINT_ARG_TYPES)
- {
- string_appends (declp, &arg);
- }
- string_delete (&arg);
- need_comma = 1;
- }
- }
- else
- {
- if (need_comma && PRINT_ARG_TYPES)
- string_append (declp, ", ");
- if (!do_arg (work, mangled, &arg))
- return (0);
- if (PRINT_ARG_TYPES)
- string_appends (declp, &arg);
- string_delete (&arg);
- need_comma = 1;
- }
- }
-
- if (**mangled == 'e')
- {
- (*mangled)++;
- if (PRINT_ARG_TYPES)
- {
- if (need_comma)
- {
- string_append (declp, ",");
- }
- string_append (declp, "...");
- }
- }
-
- if (PRINT_ARG_TYPES)
- {
- string_append (declp, ")");
- }
- return (1);
-}
-
-/* Like demangle_args, but for demangling the argument lists of function
- and method pointers or references, not top-level declarations. */
-
-static int
-demangle_nested_args (struct work_stuff *work, const char **mangled,
- string *declp)
-{
- string* saved_previous_argument;
- int result;
- int saved_nrepeats;
-
- /* The G++ name-mangling algorithm does not remember types on nested
- argument lists, unless -fsquangling is used, and in that case the
- type vector updated by remember_type is not used. So, we turn
- off remembering of types here. */
- ++work->forgetting_types;
-
- /* For the repeat codes used with -fsquangling, we must keep track of
- the last argument. */
- saved_previous_argument = work->previous_argument;
- saved_nrepeats = work->nrepeats;
- work->previous_argument = 0;
- work->nrepeats = 0;
-
- /* Actually demangle the arguments. */
- result = demangle_args (work, mangled, declp);
-
- /* Restore the previous_argument field. */
- if (work->previous_argument)
- {
- string_delete (work->previous_argument);
- free ((char *) work->previous_argument);
- }
- work->previous_argument = saved_previous_argument;
- --work->forgetting_types;
- work->nrepeats = saved_nrepeats;
-
- return result;
-}
-
-/* Returns 1 if a valid function name was found or 0 otherwise. */
-
-static int
-demangle_function_name (struct work_stuff *work, const char **mangled,
- string *declp, const char *scan)
-{
- size_t i;
- string type;
- const char *tem;
-
- string_appendn (declp, (*mangled), scan - (*mangled));
- string_need (declp, 1);
- *(declp -> p) = '\0';
-
- /* Consume the function name, including the "__" separating the name
- from the signature. We are guaranteed that SCAN points to the
- separator. */
-
- (*mangled) = scan + 2;
- /* We may be looking at an instantiation of a template function:
- foo__Xt1t2_Ft3t4, where t1, t2, ... are template arguments and a
- following _F marks the start of the function arguments. Handle
- the template arguments first. */
-
- if (HP_DEMANGLING && (**mangled == 'X'))
- {
- demangle_arm_hp_template (work, mangled, 0, declp);
- /* This leaves MANGLED pointing to the 'F' marking func args */
- }
-
- if (LUCID_DEMANGLING || ARM_DEMANGLING || HP_DEMANGLING || EDG_DEMANGLING)
- {
-
- /* See if we have an ARM style constructor or destructor operator.
- If so, then just record it, clear the decl, and return.
- We can't build the actual constructor/destructor decl until later,
- when we recover the class name from the signature. */
-
- if (strcmp (declp -> b, "__ct") == 0)
- {
- work -> constructor += 1;
- string_clear (declp);
- return 1;
- }
- else if (strcmp (declp -> b, "__dt") == 0)
- {
- work -> destructor += 1;
- string_clear (declp);
- return 1;
- }
- }
-
- if (declp->p - declp->b >= 3
- && declp->b[0] == 'o'
- && declp->b[1] == 'p'
- && strchr (cplus_markers, declp->b[2]) != NULL)
- {
- /* see if it's an assignment expression */
- if (declp->p - declp->b >= 10 /* op$assign_ */
- && memcmp (declp->b + 3, "assign_", 7) == 0)
- {
- for (i = 0; i < ARRAY_SIZE (optable); i++)
- {
- int len = declp->p - declp->b - 10;
- if ((int) strlen (optable[i].in) == len
- && memcmp (optable[i].in, declp->b + 10, len) == 0)
- {
- string_clear (declp);
- string_append (declp, "operator");
- string_append (declp, optable[i].out);
- string_append (declp, "=");
- break;
- }
- }
- }
- else
- {
- for (i = 0; i < ARRAY_SIZE (optable); i++)
- {
- int len = declp->p - declp->b - 3;
- if ((int) strlen (optable[i].in) == len
- && memcmp (optable[i].in, declp->b + 3, len) == 0)
- {
- string_clear (declp);
- string_append (declp, "operator");
- string_append (declp, optable[i].out);
- break;
- }
- }
- }
- }
- else if (declp->p - declp->b >= 5 && memcmp (declp->b, "type", 4) == 0
- && strchr (cplus_markers, declp->b[4]) != NULL)
- {
- /* type conversion operator */
- tem = declp->b + 5;
- if (do_type (work, &tem, &type))
- {
- string_clear (declp);
- string_append (declp, "operator ");
- string_appends (declp, &type);
- string_delete (&type);
- }
- }
- else if (declp->b[0] == '_' && declp->b[1] == '_'
- && declp->b[2] == 'o' && declp->b[3] == 'p')
- {
- /* ANSI. */
- /* type conversion operator. */
- tem = declp->b + 4;
- if (do_type (work, &tem, &type))
- {
- string_clear (declp);
- string_append (declp, "operator ");
- string_appends (declp, &type);
- string_delete (&type);
- }
- }
- else if (declp->b[0] == '_' && declp->b[1] == '_'
- && ISLOWER((unsigned char)declp->b[2])
- && ISLOWER((unsigned char)declp->b[3]))
- {
- if (declp->b[4] == '\0')
- {
- /* Operator. */
- for (i = 0; i < ARRAY_SIZE (optable); i++)
- {
- if (strlen (optable[i].in) == 2
- && memcmp (optable[i].in, declp->b + 2, 2) == 0)
- {
- string_clear (declp);
- string_append (declp, "operator");
- string_append (declp, optable[i].out);
- break;
- }
- }
- }
- else
- {
- if (declp->b[2] == 'a' && declp->b[5] == '\0')
- {
- /* Assignment. */
- for (i = 0; i < ARRAY_SIZE (optable); i++)
- {
- if (strlen (optable[i].in) == 3
- && memcmp (optable[i].in, declp->b + 2, 3) == 0)
- {
- string_clear (declp);
- string_append (declp, "operator");
- string_append (declp, optable[i].out);
- break;
- }
- }
- }
- }
- }
-
- /* If a function name was obtained but it's not valid, we were not
- successful. */
- if (LEN_STRING (declp) == 1 && declp->b[0] == '.')
- return 0;
- else
- return 1;
-}
-
-/* a mini string-handling package */
-
-static void
-string_need (string *s, int n)
-{
- int tem;
-
- if (s->b == NULL)
- {
- if (n < 32)
- {
- n = 32;
- }
- s->p = s->b = XNEWVEC (char, n);
- s->e = s->b + n;
- }
- else if (s->e - s->p < n)
- {
- tem = s->p - s->b;
- n += tem;
- n *= 2;
- s->b = XRESIZEVEC (char, s->b, n);
- s->p = s->b + tem;
- s->e = s->b + n;
- }
-}
-
-static void
-string_delete (string *s)
-{
- if (s->b != NULL)
- {
- free (s->b);
- s->b = s->e = s->p = NULL;
- }
-}
-
-static void
-string_init (string *s)
-{
- s->b = s->p = s->e = NULL;
-}
-
-static void
-string_clear (string *s)
-{
- s->p = s->b;
-}
-
-#if 0
-
-static int
-string_empty (string *s)
-{
- return (s->b == s->p);
-}
-
-#endif
-
-static void
-string_append (string *p, const char *s)
-{
- int n;
- if (s == NULL || *s == '\0')
- return;
- n = strlen (s);
- string_need (p, n);
- memcpy (p->p, s, n);
- p->p += n;
-}
-
-static void
-string_appends (string *p, string *s)
-{
- int n;
-
- if (s->b != s->p)
- {
- n = s->p - s->b;
- string_need (p, n);
- memcpy (p->p, s->b, n);
- p->p += n;
- }
-}
-
-static void
-string_appendn (string *p, const char *s, int n)
-{
- if (n != 0)
- {
- string_need (p, n);
- memcpy (p->p, s, n);
- p->p += n;
- }
-}
-
-static void
-string_prepend (string *p, const char *s)
-{
- if (s != NULL && *s != '\0')
- {
- string_prependn (p, s, strlen (s));
- }
-}
-
-static void
-string_prepends (string *p, string *s)
-{
- if (s->b != s->p)
- {
- string_prependn (p, s->b, s->p - s->b);
- }
-}
-
-static void
-string_prependn (string *p, const char *s, int n)
-{
- char *q;
-
- if (n != 0)
- {
- string_need (p, n);
- for (q = p->p - 1; q >= p->b; q--)
- {
- q[n] = q[0];
- }
- memcpy (p->b, s, n);
- p->p += n;
- }
-}
-
-static void
-string_append_template_idx (string *s, int idx)
-{
- char buf[INTBUF_SIZE + 1 /* 'T' */];
- sprintf(buf, "T%d", idx);
- string_append (s, buf);
-}
diff --git a/gcc-4.7/libiberty/crc32.c b/gcc-4.7/libiberty/crc32.c
deleted file mode 100644
index 12d9be07c..000000000
--- a/gcc-4.7/libiberty/crc32.c
+++ /dev/null
@@ -1,181 +0,0 @@
-/* crc32.c
- Copyright (C) 2009, 2011 Free Software Foundation, Inc.
-
- This file is part of the libiberty library.
-
- This file is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- In addition to the permissions in the GNU General Public License, the
- Free Software Foundation gives you unlimited permission to link the
- compiled version of this file into combinations with other programs,
- and to distribute those combinations without any restriction coming
- from the use of this file. (The General Public License restrictions
- do apply in other respects; for example, they cover modification of
- the file, and distribution when not linked into a combined
- executable.)
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "libiberty.h"
-
-/* This table was generated by the following program. This matches
- what gdb does.
-
- #include <stdio.h>
-
- int
- main ()
- {
- int i, j;
- unsigned int c;
- int table[256];
-
- for (i = 0; i < 256; i++)
- {
- for (c = i << 24, j = 8; j > 0; --j)
- c = c & 0x80000000 ? (c << 1) ^ 0x04c11db7 : (c << 1);
- table[i] = c;
- }
-
- printf ("static const unsigned int crc32_table[] =\n{\n");
- for (i = 0; i < 256; i += 4)
- {
- printf (" 0x%08x, 0x%08x, 0x%08x, 0x%08x",
- table[i + 0], table[i + 1], table[i + 2], table[i + 3]);
- if (i + 4 < 256)
- putchar (',');
- putchar ('\n');
- }
- printf ("};\n");
- return 0;
- }
-
- For more information on CRC, see, e.g.,
- http://www.ross.net/crc/download/crc_v3.txt. */
-
-static const unsigned int crc32_table[] =
-{
- 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9,
- 0x130476dc, 0x17c56b6b, 0x1a864db2, 0x1e475005,
- 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61,
- 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd,
- 0x4c11db70, 0x48d0c6c7, 0x4593e01e, 0x4152fda9,
- 0x5f15adac, 0x5bd4b01b, 0x569796c2, 0x52568b75,
- 0x6a1936c8, 0x6ed82b7f, 0x639b0da6, 0x675a1011,
- 0x791d4014, 0x7ddc5da3, 0x709f7b7a, 0x745e66cd,
- 0x9823b6e0, 0x9ce2ab57, 0x91a18d8e, 0x95609039,
- 0x8b27c03c, 0x8fe6dd8b, 0x82a5fb52, 0x8664e6e5,
- 0xbe2b5b58, 0xbaea46ef, 0xb7a96036, 0xb3687d81,
- 0xad2f2d84, 0xa9ee3033, 0xa4ad16ea, 0xa06c0b5d,
- 0xd4326d90, 0xd0f37027, 0xddb056fe, 0xd9714b49,
- 0xc7361b4c, 0xc3f706fb, 0xceb42022, 0xca753d95,
- 0xf23a8028, 0xf6fb9d9f, 0xfbb8bb46, 0xff79a6f1,
- 0xe13ef6f4, 0xe5ffeb43, 0xe8bccd9a, 0xec7dd02d,
- 0x34867077, 0x30476dc0, 0x3d044b19, 0x39c556ae,
- 0x278206ab, 0x23431b1c, 0x2e003dc5, 0x2ac12072,
- 0x128e9dcf, 0x164f8078, 0x1b0ca6a1, 0x1fcdbb16,
- 0x018aeb13, 0x054bf6a4, 0x0808d07d, 0x0cc9cdca,
- 0x7897ab07, 0x7c56b6b0, 0x71159069, 0x75d48dde,
- 0x6b93dddb, 0x6f52c06c, 0x6211e6b5, 0x66d0fb02,
- 0x5e9f46bf, 0x5a5e5b08, 0x571d7dd1, 0x53dc6066,
- 0x4d9b3063, 0x495a2dd4, 0x44190b0d, 0x40d816ba,
- 0xaca5c697, 0xa864db20, 0xa527fdf9, 0xa1e6e04e,
- 0xbfa1b04b, 0xbb60adfc, 0xb6238b25, 0xb2e29692,
- 0x8aad2b2f, 0x8e6c3698, 0x832f1041, 0x87ee0df6,
- 0x99a95df3, 0x9d684044, 0x902b669d, 0x94ea7b2a,
- 0xe0b41de7, 0xe4750050, 0xe9362689, 0xedf73b3e,
- 0xf3b06b3b, 0xf771768c, 0xfa325055, 0xfef34de2,
- 0xc6bcf05f, 0xc27dede8, 0xcf3ecb31, 0xcbffd686,
- 0xd5b88683, 0xd1799b34, 0xdc3abded, 0xd8fba05a,
- 0x690ce0ee, 0x6dcdfd59, 0x608edb80, 0x644fc637,
- 0x7a089632, 0x7ec98b85, 0x738aad5c, 0x774bb0eb,
- 0x4f040d56, 0x4bc510e1, 0x46863638, 0x42472b8f,
- 0x5c007b8a, 0x58c1663d, 0x558240e4, 0x51435d53,
- 0x251d3b9e, 0x21dc2629, 0x2c9f00f0, 0x285e1d47,
- 0x36194d42, 0x32d850f5, 0x3f9b762c, 0x3b5a6b9b,
- 0x0315d626, 0x07d4cb91, 0x0a97ed48, 0x0e56f0ff,
- 0x1011a0fa, 0x14d0bd4d, 0x19939b94, 0x1d528623,
- 0xf12f560e, 0xf5ee4bb9, 0xf8ad6d60, 0xfc6c70d7,
- 0xe22b20d2, 0xe6ea3d65, 0xeba91bbc, 0xef68060b,
- 0xd727bbb6, 0xd3e6a601, 0xdea580d8, 0xda649d6f,
- 0xc423cd6a, 0xc0e2d0dd, 0xcda1f604, 0xc960ebb3,
- 0xbd3e8d7e, 0xb9ff90c9, 0xb4bcb610, 0xb07daba7,
- 0xae3afba2, 0xaafbe615, 0xa7b8c0cc, 0xa379dd7b,
- 0x9b3660c6, 0x9ff77d71, 0x92b45ba8, 0x9675461f,
- 0x8832161a, 0x8cf30bad, 0x81b02d74, 0x857130c3,
- 0x5d8a9099, 0x594b8d2e, 0x5408abf7, 0x50c9b640,
- 0x4e8ee645, 0x4a4ffbf2, 0x470cdd2b, 0x43cdc09c,
- 0x7b827d21, 0x7f436096, 0x7200464f, 0x76c15bf8,
- 0x68860bfd, 0x6c47164a, 0x61043093, 0x65c52d24,
- 0x119b4be9, 0x155a565e, 0x18197087, 0x1cd86d30,
- 0x029f3d35, 0x065e2082, 0x0b1d065b, 0x0fdc1bec,
- 0x3793a651, 0x3352bbe6, 0x3e119d3f, 0x3ad08088,
- 0x2497d08d, 0x2056cd3a, 0x2d15ebe3, 0x29d4f654,
- 0xc5a92679, 0xc1683bce, 0xcc2b1d17, 0xc8ea00a0,
- 0xd6ad50a5, 0xd26c4d12, 0xdf2f6bcb, 0xdbee767c,
- 0xe3a1cbc1, 0xe760d676, 0xea23f0af, 0xeee2ed18,
- 0xf0a5bd1d, 0xf464a0aa, 0xf9278673, 0xfde69bc4,
- 0x89b8fd09, 0x8d79e0be, 0x803ac667, 0x84fbdbd0,
- 0x9abc8bd5, 0x9e7d9662, 0x933eb0bb, 0x97ffad0c,
- 0xafb010b1, 0xab710d06, 0xa6322bdf, 0xa2f33668,
- 0xbcb4666d, 0xb8757bda, 0xb5365d03, 0xb1f740b4
-};
-
-/*
-
-@deftypefn Extension {unsigned int} crc32 (const unsigned char *@var{buf}, @
- int @var{len}, unsigned int @var{init})
-
-Compute the 32-bit CRC of @var{buf} which has length @var{len}. The
-starting value is @var{init}; this may be used to compute the CRC of
-data split across multiple buffers by passing the return value of each
-call as the @var{init} parameter of the next.
-
-This is intended to match the CRC used by the @command{gdb} remote
-protocol for the @samp{qCRC} command. In order to get the same
-results as gdb for a block of data, you must pass the first CRC
-parameter as @code{0xffffffff}.
-
-This CRC can be specified as:
-
- Width : 32
- Poly : 0x04c11db7
- Init : parameter, typically 0xffffffff
- RefIn : false
- RefOut : false
- XorOut : 0
-
-This differs from the "standard" CRC-32 algorithm in that the values
-are not reflected, and there is no final XOR value. These differences
-make it easy to compose the values of multiple blocks.
-
-@end deftypefn
-
-*/
-
-unsigned int
-xcrc32 (const unsigned char *buf, int len, unsigned int init)
-{
- unsigned int crc = init;
- while (len--)
- {
- crc = (crc << 8) ^ crc32_table[((crc >> 24) ^ *buf) & 255];
- buf++;
- }
- return crc;
-}
diff --git a/gcc-4.7/libiberty/dyn-string.c b/gcc-4.7/libiberty/dyn-string.c
deleted file mode 100644
index faa8d9477..000000000
--- a/gcc-4.7/libiberty/dyn-string.c
+++ /dev/null
@@ -1,397 +0,0 @@
-/* An abstract string datatype.
- Copyright (C) 1998, 1999, 2000, 2002, 2004 Free Software Foundation, Inc.
- Contributed by Mark Mitchell (mark@markmitchell.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.
-
-In addition to the permissions in the GNU General Public License, the
-Free Software Foundation gives you unlimited permission to link the
-compiled version of this file into combinations with other programs,
-and to distribute those combinations without any restriction coming
-from the use of this file. (The General Public License restrictions
-do apply in other respects; for example, they cover modification of
-the file, and distribution when not linked into a combined
-executable.)
-
-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, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h>
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include "libiberty.h"
-#include "dyn-string.h"
-
-/* Performs in-place initialization of a dyn_string struct. This
- function can be used with a dyn_string struct on the stack or
- embedded in another object. The contents of of the string itself
- are still dynamically allocated. The string initially is capable
- of holding at least SPACE characeters, including the terminating
- NUL. If SPACE is 0, it will silently be increated to 1.
-
- If RETURN_ON_ALLOCATION_FAILURE is defined and memory allocation
- fails, returns 0. Otherwise returns 1. */
-
-int
-dyn_string_init (struct dyn_string *ds_struct_ptr, int space)
-{
- /* We need at least one byte in which to store the terminating NUL. */
- if (space == 0)
- space = 1;
-
-#ifdef RETURN_ON_ALLOCATION_FAILURE
- ds_struct_ptr->s = (char *) malloc (space);
- if (ds_struct_ptr->s == NULL)
- return 0;
-#else
- ds_struct_ptr->s = XNEWVEC (char, space);
-#endif
- ds_struct_ptr->allocated = space;
- ds_struct_ptr->length = 0;
- ds_struct_ptr->s[0] = '\0';
-
- return 1;
-}
-
-/* Create a new dynamic string capable of holding at least SPACE
- characters, including the terminating NUL. If SPACE is 0, it will
- be silently increased to 1. If RETURN_ON_ALLOCATION_FAILURE is
- defined and memory allocation fails, returns NULL. Otherwise
- returns the newly allocated string. */
-
-dyn_string_t
-dyn_string_new (int space)
-{
- dyn_string_t result;
-#ifdef RETURN_ON_ALLOCATION_FAILURE
- result = (dyn_string_t) malloc (sizeof (struct dyn_string));
- if (result == NULL)
- return NULL;
- if (!dyn_string_init (result, space))
- {
- free (result);
- return NULL;
- }
-#else
- result = XNEW (struct dyn_string);
- dyn_string_init (result, space);
-#endif
- return result;
-}
-
-/* Free the memory used by DS. */
-
-void
-dyn_string_delete (dyn_string_t ds)
-{
- free (ds->s);
- free (ds);
-}
-
-/* Returns the contents of DS in a buffer allocated with malloc. It
- is the caller's responsibility to deallocate the buffer using free.
- DS is then set to the empty string. Deletes DS itself. */
-
-char*
-dyn_string_release (dyn_string_t ds)
-{
- /* Store the old buffer. */
- char* result = ds->s;
- /* The buffer is no longer owned by DS. */
- ds->s = NULL;
- /* Delete DS. */
- free (ds);
- /* Return the old buffer. */
- return result;
-}
-
-/* Increase the capacity of DS so it can hold at least SPACE
- characters, plus the terminating NUL. This function will not (at
- present) reduce the capacity of DS. Returns DS on success.
-
- If RETURN_ON_ALLOCATION_FAILURE is defined and a memory allocation
- operation fails, deletes DS and returns NULL. */
-
-dyn_string_t
-dyn_string_resize (dyn_string_t ds, int space)
-{
- int new_allocated = ds->allocated;
-
- /* Increase SPACE to hold the NUL termination. */
- ++space;
-
- /* Increase allocation by factors of two. */
- while (space > new_allocated)
- new_allocated *= 2;
-
- if (new_allocated != ds->allocated)
- {
- ds->allocated = new_allocated;
- /* We actually need more space. */
-#ifdef RETURN_ON_ALLOCATION_FAILURE
- ds->s = (char *) realloc (ds->s, ds->allocated);
- if (ds->s == NULL)
- {
- free (ds);
- return NULL;
- }
-#else
- ds->s = XRESIZEVEC (char, ds->s, ds->allocated);
-#endif
- }
-
- return ds;
-}
-
-/* Sets the contents of DS to the empty string. */
-
-void
-dyn_string_clear (dyn_string_t ds)
-{
- /* A dyn_string always has room for at least the NUL terminator. */
- ds->s[0] = '\0';
- ds->length = 0;
-}
-
-/* Makes the contents of DEST the same as the contents of SRC. DEST
- and SRC must be distinct. Returns 1 on success. On failure, if
- RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */
-
-int
-dyn_string_copy (dyn_string_t dest, dyn_string_t src)
-{
- if (dest == src)
- abort ();
-
- /* Make room in DEST. */
- if (dyn_string_resize (dest, src->length) == NULL)
- return 0;
- /* Copy DEST into SRC. */
- strcpy (dest->s, src->s);
- /* Update the size of DEST. */
- dest->length = src->length;
- return 1;
-}
-
-/* Copies SRC, a NUL-terminated string, into DEST. Returns 1 on
- success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST
- and returns 0. */
-
-int
-dyn_string_copy_cstr (dyn_string_t dest, const char *src)
-{
- int length = strlen (src);
- /* Make room in DEST. */
- if (dyn_string_resize (dest, length) == NULL)
- return 0;
- /* Copy DEST into SRC. */
- strcpy (dest->s, src);
- /* Update the size of DEST. */
- dest->length = length;
- return 1;
-}
-
-/* Inserts SRC at the beginning of DEST. DEST is expanded as
- necessary. SRC and DEST must be distinct. Returns 1 on success.
- On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and
- returns 0. */
-
-int
-dyn_string_prepend (dyn_string_t dest, dyn_string_t src)
-{
- return dyn_string_insert (dest, 0, src);
-}
-
-/* Inserts SRC, a NUL-terminated string, at the beginning of DEST.
- DEST is expanded as necessary. Returns 1 on success. On failure,
- if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */
-
-int
-dyn_string_prepend_cstr (dyn_string_t dest, const char *src)
-{
- return dyn_string_insert_cstr (dest, 0, src);
-}
-
-/* Inserts SRC into DEST starting at position POS. DEST is expanded
- as necessary. SRC and DEST must be distinct. Returns 1 on
- success. On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST
- and returns 0. */
-
-int
-dyn_string_insert (dyn_string_t dest, int pos, dyn_string_t src)
-{
- int i;
-
- if (src == dest)
- abort ();
-
- if (dyn_string_resize (dest, dest->length + src->length) == NULL)
- return 0;
- /* Make room for the insertion. Be sure to copy the NUL. */
- for (i = dest->length; i >= pos; --i)
- dest->s[i + src->length] = dest->s[i];
- /* Splice in the new stuff. */
- strncpy (dest->s + pos, src->s, src->length);
- /* Compute the new length. */
- dest->length += src->length;
- return 1;
-}
-
-/* Inserts SRC, a NUL-terminated string, into DEST starting at
- position POS. DEST is expanded as necessary. Returns 1 on
- success. On failure, RETURN_ON_ALLOCATION_FAILURE, deletes DEST
- and returns 0. */
-
-int
-dyn_string_insert_cstr (dyn_string_t dest, int pos, const char *src)
-{
- int i;
- int length = strlen (src);
-
- if (dyn_string_resize (dest, dest->length + length) == NULL)
- return 0;
- /* Make room for the insertion. Be sure to copy the NUL. */
- for (i = dest->length; i >= pos; --i)
- dest->s[i + length] = dest->s[i];
- /* Splice in the new stuff. */
- strncpy (dest->s + pos, src, length);
- /* Compute the new length. */
- dest->length += length;
- return 1;
-}
-
-/* Inserts character C into DEST starting at position POS. DEST is
- expanded as necessary. Returns 1 on success. On failure,
- RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */
-
-int
-dyn_string_insert_char (dyn_string_t dest, int pos, int c)
-{
- int i;
-
- if (dyn_string_resize (dest, dest->length + 1) == NULL)
- return 0;
- /* Make room for the insertion. Be sure to copy the NUL. */
- for (i = dest->length; i >= pos; --i)
- dest->s[i + 1] = dest->s[i];
- /* Add the new character. */
- dest->s[pos] = c;
- /* Compute the new length. */
- ++dest->length;
- return 1;
-}
-
-/* Append S to DS, resizing DS if necessary. Returns 1 on success.
- On failure, if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and
- returns 0. */
-
-int
-dyn_string_append (dyn_string_t dest, dyn_string_t s)
-{
- if (dyn_string_resize (dest, dest->length + s->length) == 0)
- return 0;
- strcpy (dest->s + dest->length, s->s);
- dest->length += s->length;
- return 1;
-}
-
-/* Append the NUL-terminated string S to DS, resizing DS if necessary.
- Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE,
- deletes DEST and returns 0. */
-
-int
-dyn_string_append_cstr (dyn_string_t dest, const char *s)
-{
- int len = strlen (s);
-
- /* The new length is the old length plus the size of our string, plus
- one for the null at the end. */
- if (dyn_string_resize (dest, dest->length + len) == NULL)
- return 0;
- strcpy (dest->s + dest->length, s);
- dest->length += len;
- return 1;
-}
-
-/* Appends C to the end of DEST. Returns 1 on success. On failure,
- if RETURN_ON_ALLOCATION_FAILURE, deletes DEST and returns 0. */
-
-int
-dyn_string_append_char (dyn_string_t dest, int c)
-{
- /* Make room for the extra character. */
- if (dyn_string_resize (dest, dest->length + 1) == NULL)
- return 0;
- /* Append the character; it will overwrite the old NUL. */
- dest->s[dest->length] = c;
- /* Add a new NUL at the end. */
- dest->s[dest->length + 1] = '\0';
- /* Update the length. */
- ++(dest->length);
- return 1;
-}
-
-/* Sets the contents of DEST to the substring of SRC starting at START
- and ending before END. START must be less than or equal to END,
- and both must be between zero and the length of SRC, inclusive.
- Returns 1 on success. On failure, if RETURN_ON_ALLOCATION_FAILURE,
- deletes DEST and returns 0. */
-
-int
-dyn_string_substring (dyn_string_t dest, dyn_string_t src,
- int start, int end)
-{
- int i;
- int length = end - start;
-
- if (start > end || start > src->length || end > src->length)
- abort ();
-
- /* Make room for the substring. */
- if (dyn_string_resize (dest, length) == NULL)
- return 0;
- /* Copy the characters in the substring, */
- for (i = length; --i >= 0; )
- dest->s[i] = src->s[start + i];
- /* NUL-terimate the result. */
- dest->s[length] = '\0';
- /* Record the length of the substring. */
- dest->length = length;
-
- return 1;
-}
-
-/* Returns non-zero if DS1 and DS2 have the same contents. */
-
-int
-dyn_string_eq (dyn_string_t ds1, dyn_string_t ds2)
-{
- /* If DS1 and DS2 have different lengths, they must not be the same. */
- if (ds1->length != ds2->length)
- return 0;
- else
- return !strcmp (ds1->s, ds2->s);
-}
diff --git a/gcc-4.7/libiberty/fdmatch.c b/gcc-4.7/libiberty/fdmatch.c
deleted file mode 100644
index f613cb3c0..000000000
--- a/gcc-4.7/libiberty/fdmatch.c
+++ /dev/null
@@ -1,68 +0,0 @@
-/* Compare two open file descriptors to see if they refer to the same file.
- Copyright (C) 1991 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-
-/*
-
-@deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2})
-
-Check to see if two open file descriptors refer to the same file.
-This is useful, for example, when we have an open file descriptor for
-an unnamed file, and the name of a file that we believe to correspond
-to that fd. This can happen when we are exec'd with an already open
-file (@code{stdout} for example) or from the SVR4 @file{/proc} calls
-that return open file descriptors for mapped address spaces. All we
-have to do is open the file by name and check the two file descriptors
-for a match, which is done by comparing major and minor device numbers
-and inode numbers.
-
-@end deftypefn
-
-BUGS
-
- (FIXME: does this work for networks?)
- It works for NFS, which assigns a device number to each mount.
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-#include <sys/types.h>
-#include <sys/stat.h>
-
-int fdmatch (int fd1, int fd2)
-{
- struct stat sbuf1;
- struct stat sbuf2;
-
- if ((fstat (fd1, &sbuf1) == 0) &&
- (fstat (fd2, &sbuf2) == 0) &&
- (sbuf1.st_dev == sbuf2.st_dev) &&
- (sbuf1.st_ino == sbuf2.st_ino))
- {
- return (1);
- }
- else
- {
- return (0);
- }
-}
diff --git a/gcc-4.7/libiberty/ffs.c b/gcc-4.7/libiberty/ffs.c
deleted file mode 100644
index 603cbe8ed..000000000
--- a/gcc-4.7/libiberty/ffs.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* ffs -- Find the first bit set in the parameter
-
-@deftypefn Supplemental int ffs (int @var{valu})
-
-Find the first (least significant) bit set in @var{valu}. Bits are
-numbered from right to left, starting with bit 1 (corresponding to the
-value 1). If @var{valu} is zero, zero is returned.
-
-@end deftypefn
-
-*/
-
-int
-ffs (register int valu)
-{
- register int bit;
-
- if (valu == 0)
- return 0;
-
- for (bit = 1; !(valu & 1); bit++)
- valu >>= 1;
-
- return bit;
-}
-
diff --git a/gcc-4.7/libiberty/fibheap.c b/gcc-4.7/libiberty/fibheap.c
deleted file mode 100644
index a37ee4ef2..000000000
--- a/gcc-4.7/libiberty/fibheap.c
+++ /dev/null
@@ -1,486 +0,0 @@
-/* A Fibonacci heap datatype.
- Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
- Contributed by Daniel Berlin (dan@cgsoftware.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, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#include "libiberty.h"
-#include "fibheap.h"
-
-
-#define FIBHEAPKEY_MIN LONG_MIN
-
-static void fibheap_ins_root (fibheap_t, fibnode_t);
-static void fibheap_rem_root (fibheap_t, fibnode_t);
-static void fibheap_consolidate (fibheap_t);
-static void fibheap_link (fibheap_t, fibnode_t, fibnode_t);
-static void fibheap_cut (fibheap_t, fibnode_t, fibnode_t);
-static void fibheap_cascading_cut (fibheap_t, fibnode_t);
-static fibnode_t fibheap_extr_min_node (fibheap_t);
-static int fibheap_compare (fibheap_t, fibnode_t, fibnode_t);
-static int fibheap_comp_data (fibheap_t, fibheapkey_t, void *, fibnode_t);
-static fibnode_t fibnode_new (void);
-static void fibnode_insert_after (fibnode_t, fibnode_t);
-#define fibnode_insert_before(a, b) fibnode_insert_after (a->left, b)
-static fibnode_t fibnode_remove (fibnode_t);
-
-
-/* Create a new fibonacci heap. */
-fibheap_t
-fibheap_new (void)
-{
- return (fibheap_t) xcalloc (1, sizeof (struct fibheap));
-}
-
-/* Create a new fibonacci heap node. */
-static fibnode_t
-fibnode_new (void)
-{
- fibnode_t node;
-
- node = (fibnode_t) xcalloc (1, sizeof *node);
- node->left = node;
- node->right = node;
-
- return node;
-}
-
-static inline int
-fibheap_compare (fibheap_t heap ATTRIBUTE_UNUSED, fibnode_t a, fibnode_t b)
-{
- if (a->key < b->key)
- return -1;
- if (a->key > b->key)
- return 1;
- return 0;
-}
-
-static inline int
-fibheap_comp_data (fibheap_t heap, fibheapkey_t key, void *data, fibnode_t b)
-{
- struct fibnode a;
-
- a.key = key;
- a.data = data;
-
- return fibheap_compare (heap, &a, b);
-}
-
-/* Insert DATA, with priority KEY, into HEAP. */
-fibnode_t
-fibheap_insert (fibheap_t heap, fibheapkey_t key, void *data)
-{
- fibnode_t node;
-
- /* Create the new node. */
- node = fibnode_new ();
-
- /* Set the node's data. */
- node->data = data;
- node->key = key;
-
- /* Insert it into the root list. */
- fibheap_ins_root (heap, node);
-
- /* If their was no minimum, or this key is less than the min,
- it's the new min. */
- if (heap->min == NULL || node->key < heap->min->key)
- heap->min = node;
-
- heap->nodes++;
-
- return node;
-}
-
-/* Return the data of the minimum node (if we know it). */
-void *
-fibheap_min (fibheap_t heap)
-{
- /* If there is no min, we can't easily return it. */
- if (heap->min == NULL)
- return NULL;
- return heap->min->data;
-}
-
-/* Return the key of the minimum node (if we know it). */
-fibheapkey_t
-fibheap_min_key (fibheap_t heap)
-{
- /* If there is no min, we can't easily return it. */
- if (heap->min == NULL)
- return 0;
- return heap->min->key;
-}
-
-/* Union HEAPA and HEAPB into a new heap. */
-fibheap_t
-fibheap_union (fibheap_t heapa, fibheap_t heapb)
-{
- fibnode_t a_root, b_root, temp;
-
- /* If one of the heaps is empty, the union is just the other heap. */
- if ((a_root = heapa->root) == NULL)
- {
- free (heapa);
- return heapb;
- }
- if ((b_root = heapb->root) == NULL)
- {
- free (heapb);
- return heapa;
- }
-
- /* Merge them to the next nodes on the opposite chain. */
- a_root->left->right = b_root;
- b_root->left->right = a_root;
- temp = a_root->left;
- a_root->left = b_root->left;
- b_root->left = temp;
- heapa->nodes += heapb->nodes;
-
- /* And set the new minimum, if it's changed. */
- if (fibheap_compare (heapa, heapb->min, heapa->min) < 0)
- heapa->min = heapb->min;
-
- free (heapb);
- return heapa;
-}
-
-/* Extract the data of the minimum node from HEAP. */
-void *
-fibheap_extract_min (fibheap_t heap)
-{
- fibnode_t z;
- void *ret = NULL;
-
- /* If we don't have a min set, it means we have no nodes. */
- if (heap->min != NULL)
- {
- /* Otherwise, extract the min node, free the node, and return the
- node's data. */
- z = fibheap_extr_min_node (heap);
- ret = z->data;
- free (z);
- }
-
- return ret;
-}
-
-/* Replace both the KEY and the DATA associated with NODE. */
-void *
-fibheap_replace_key_data (fibheap_t heap, fibnode_t node,
- fibheapkey_t key, void *data)
-{
- void *odata;
- fibheapkey_t okey;
- fibnode_t y;
-
- /* If we wanted to, we could actually do a real increase by redeleting and
- inserting. However, this would require O (log n) time. So just bail out
- for now. */
- if (fibheap_comp_data (heap, key, data, node) > 0)
- return NULL;
-
- odata = node->data;
- okey = node->key;
- node->data = data;
- node->key = key;
- y = node->parent;
-
- /* Short-circuit if the key is the same, as we then don't have to
- do anything. Except if we're trying to force the new node to
- be the new minimum for delete. */
- if (okey == key && okey != FIBHEAPKEY_MIN)
- return odata;
-
- /* These two compares are specifically <= 0 to make sure that in the case
- of equality, a node we replaced the data on, becomes the new min. This
- is needed so that delete's call to extractmin gets the right node. */
- if (y != NULL && fibheap_compare (heap, node, y) <= 0)
- {
- fibheap_cut (heap, node, y);
- fibheap_cascading_cut (heap, y);
- }
-
- if (fibheap_compare (heap, node, heap->min) <= 0)
- heap->min = node;
-
- return odata;
-}
-
-/* Replace the DATA associated with NODE. */
-void *
-fibheap_replace_data (fibheap_t heap, fibnode_t node, void *data)
-{
- return fibheap_replace_key_data (heap, node, node->key, data);
-}
-
-/* Replace the KEY associated with NODE. */
-fibheapkey_t
-fibheap_replace_key (fibheap_t heap, fibnode_t node, fibheapkey_t key)
-{
- int okey = node->key;
- fibheap_replace_key_data (heap, node, key, node->data);
- return okey;
-}
-
-/* Delete NODE from HEAP. */
-void *
-fibheap_delete_node (fibheap_t heap, fibnode_t node)
-{
- void *ret = node->data;
-
- /* To perform delete, we just make it the min key, and extract. */
- fibheap_replace_key (heap, node, FIBHEAPKEY_MIN);
- if (node != heap->min)
- {
- fprintf (stderr, "Can't force minimum on fibheap.\n");
- abort ();
- }
- fibheap_extract_min (heap);
-
- return ret;
-}
-
-/* Delete HEAP. */
-void
-fibheap_delete (fibheap_t heap)
-{
- while (heap->min != NULL)
- free (fibheap_extr_min_node (heap));
-
- free (heap);
-}
-
-/* Determine if HEAP is empty. */
-int
-fibheap_empty (fibheap_t heap)
-{
- return heap->nodes == 0;
-}
-
-/* Extract the minimum node of the heap. */
-static fibnode_t
-fibheap_extr_min_node (fibheap_t heap)
-{
- fibnode_t ret = heap->min;
- fibnode_t x, y, orig;
-
- /* Attach the child list of the minimum node to the root list of the heap.
- If there is no child list, we don't do squat. */
- for (x = ret->child, orig = NULL; x != orig && x != NULL; x = y)
- {
- if (orig == NULL)
- orig = x;
- y = x->right;
- x->parent = NULL;
- fibheap_ins_root (heap, x);
- }
-
- /* Remove the old root. */
- fibheap_rem_root (heap, ret);
- heap->nodes--;
-
- /* If we are left with no nodes, then the min is NULL. */
- if (heap->nodes == 0)
- heap->min = NULL;
- else
- {
- /* Otherwise, consolidate to find new minimum, as well as do the reorg
- work that needs to be done. */
- heap->min = ret->right;
- fibheap_consolidate (heap);
- }
-
- return ret;
-}
-
-/* Insert NODE into the root list of HEAP. */
-static void
-fibheap_ins_root (fibheap_t heap, fibnode_t node)
-{
- /* If the heap is currently empty, the new node becomes the singleton
- circular root list. */
- if (heap->root == NULL)
- {
- heap->root = node;
- node->left = node;
- node->right = node;
- return;
- }
-
- /* Otherwise, insert it in the circular root list between the root
- and it's right node. */
- fibnode_insert_after (heap->root, node);
-}
-
-/* Remove NODE from the rootlist of HEAP. */
-static void
-fibheap_rem_root (fibheap_t heap, fibnode_t node)
-{
- if (node->left == node)
- heap->root = NULL;
- else
- heap->root = fibnode_remove (node);
-}
-
-/* Consolidate the heap. */
-static void
-fibheap_consolidate (fibheap_t heap)
-{
- fibnode_t a[1 + 8 * sizeof (long)];
- fibnode_t w;
- fibnode_t y;
- fibnode_t x;
- int i;
- int d;
- int D;
-
- D = 1 + 8 * sizeof (long);
-
- memset (a, 0, sizeof (fibnode_t) * D);
-
- while ((w = heap->root) != NULL)
- {
- x = w;
- fibheap_rem_root (heap, w);
- d = x->degree;
- while (a[d] != NULL)
- {
- y = a[d];
- if (fibheap_compare (heap, x, y) > 0)
- {
- fibnode_t temp;
- temp = x;
- x = y;
- y = temp;
- }
- fibheap_link (heap, y, x);
- a[d] = NULL;
- d++;
- }
- a[d] = x;
- }
- heap->min = NULL;
- for (i = 0; i < D; i++)
- if (a[i] != NULL)
- {
- fibheap_ins_root (heap, a[i]);
- if (heap->min == NULL || fibheap_compare (heap, a[i], heap->min) < 0)
- heap->min = a[i];
- }
-}
-
-/* Make NODE a child of PARENT. */
-static void
-fibheap_link (fibheap_t heap ATTRIBUTE_UNUSED,
- fibnode_t node, fibnode_t parent)
-{
- if (parent->child == NULL)
- parent->child = node;
- else
- fibnode_insert_before (parent->child, node);
- node->parent = parent;
- parent->degree++;
- node->mark = 0;
-}
-
-/* Remove NODE from PARENT's child list. */
-static void
-fibheap_cut (fibheap_t heap, fibnode_t node, fibnode_t parent)
-{
- fibnode_remove (node);
- parent->degree--;
- fibheap_ins_root (heap, node);
- node->parent = NULL;
- node->mark = 0;
-}
-
-static void
-fibheap_cascading_cut (fibheap_t heap, fibnode_t y)
-{
- fibnode_t z;
-
- while ((z = y->parent) != NULL)
- {
- if (y->mark == 0)
- {
- y->mark = 1;
- return;
- }
- else
- {
- fibheap_cut (heap, y, z);
- y = z;
- }
- }
-}
-
-static void
-fibnode_insert_after (fibnode_t a, fibnode_t b)
-{
- if (a == a->right)
- {
- a->right = b;
- a->left = b;
- b->right = a;
- b->left = a;
- }
- else
- {
- b->right = a->right;
- a->right->left = b;
- a->right = b;
- b->left = a;
- }
-}
-
-static fibnode_t
-fibnode_remove (fibnode_t node)
-{
- fibnode_t ret;
-
- if (node == node->left)
- ret = NULL;
- else
- ret = node->left;
-
- if (node->parent != NULL && node->parent->child == node)
- node->parent->child = ret;
-
- node->right->left = node->left;
- node->left->right = node->right;
-
- node->parent = NULL;
- node->left = node;
- node->right = node;
-
- return ret;
-}
diff --git a/gcc-4.7/libiberty/filename_cmp.c b/gcc-4.7/libiberty/filename_cmp.c
deleted file mode 100644
index 5179f8dd1..000000000
--- a/gcc-4.7/libiberty/filename_cmp.c
+++ /dev/null
@@ -1,143 +0,0 @@
-/* File name comparison routine.
-
- Copyright (C) 2007 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "filenames.h"
-#include "safe-ctype.h"
-
-/*
-
-@deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2})
-
-Return zero if the two file names @var{s1} and @var{s2} are equivalent.
-If not equivalent, the returned value is similar to what @code{strcmp}
-would return. In other words, it returns a negative value if @var{s1}
-is less than @var{s2}, or a positive value if @var{s2} is greater than
-@var{s2}.
-
-This function does not normalize file names. As a result, this function
-will treat filenames that are spelled differently as different even in
-the case when the two filenames point to the same underlying file.
-However, it does handle the fact that on DOS-like file systems, forward
-and backward slashes are equal.
-
-@end deftypefn
-
-*/
-
-int
-filename_cmp (const char *s1, const char *s2)
-{
-#if !defined(HAVE_DOS_BASED_FILE_SYSTEM) \
- && !defined(HAVE_CASE_INSENSITIVE_FILE_SYSTEM)
- return strcmp(s1, s2);
-#else
- for (;;)
- {
- int c1 = *s1;
- int c2 = *s2;
-
-#if defined (HAVE_CASE_INSENSITIVE_FILE_SYSTEM)
- c1 = TOLOWER (c1);
- c2 = TOLOWER (c2);
-#endif
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- /* On DOS-based file systems, the '/' and the '\' are equivalent. */
- if (c1 == '/')
- c1 = '\\';
- if (c2 == '/')
- c2 = '\\';
-#endif
-
- if (c1 != c2)
- return (c1 - c2);
-
- if (c1 == '\0')
- return 0;
-
- s1++;
- s2++;
- }
-#endif
-}
-
-/*
-
-@deftypefn Extension int filename_ncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
-
-Return zero if the two file names @var{s1} and @var{s2} are equivalent
-in range @var{n}.
-If not equivalent, the returned value is similar to what @code{strncmp}
-would return. In other words, it returns a negative value if @var{s1}
-is less than @var{s2}, or a positive value if @var{s2} is greater than
-@var{s2}.
-
-This function does not normalize file names. As a result, this function
-will treat filenames that are spelled differently as different even in
-the case when the two filenames point to the same underlying file.
-However, it does handle the fact that on DOS-like file systems, forward
-and backward slashes are equal.
-
-@end deftypefn
-
-*/
-
-int
-filename_ncmp (const char *s1, const char *s2, size_t n)
-{
-#if !defined(HAVE_DOS_BASED_FILE_SYSTEM) \
- && !defined(HAVE_CASE_INSENSITIVE_FILE_SYSTEM)
- return strncmp(s1, s2, n);
-#else
- if (!n)
- return 0;
- for (; n > 0; --n)
- {
- int c1 = *s1;
- int c2 = *s2;
-
-#if defined (HAVE_CASE_INSENSITIVE_FILE_SYSTEM)
- c1 = TOLOWER (c1);
- c2 = TOLOWER (c2);
-#endif
-
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- /* On DOS-based file systems, the '/' and the '\' are equivalent. */
- if (c1 == '/')
- c1 = '\\';
- if (c2 == '/')
- c2 = '\\';
-#endif
-
- if (c1 == '\0' || c1 != c2)
- return (c1 - c2);
-
- s1++;
- s2++;
- }
- return 0;
-#endif
-}
diff --git a/gcc-4.7/libiberty/floatformat.c b/gcc-4.7/libiberty/floatformat.c
deleted file mode 100644
index 1116c6311..000000000
--- a/gcc-4.7/libiberty/floatformat.c
+++ /dev/null
@@ -1,775 +0,0 @@
-/* IEEE floating point support routines, for GDB, the GNU Debugger.
- Copyright 1991, 1994, 1999, 2000, 2003, 2005, 2006, 2010
- Free Software Foundation, Inc.
-
-This file is part of GDB.
-
-This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* This is needed to pick up the NAN macro on some systems. */
-#define _GNU_SOURCE
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <math.h>
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-/* On some platforms, <float.h> provides DBL_QNAN. */
-#ifdef STDC_HEADERS
-#include <float.h>
-#endif
-
-#include "ansidecl.h"
-#include "libiberty.h"
-#include "floatformat.h"
-
-#ifndef INFINITY
-#ifdef HUGE_VAL
-#define INFINITY HUGE_VAL
-#else
-#define INFINITY (1.0 / 0.0)
-#endif
-#endif
-
-#ifndef NAN
-#ifdef DBL_QNAN
-#define NAN DBL_QNAN
-#else
-#define NAN (0.0 / 0.0)
-#endif
-#endif
-
-static int mant_bits_set (const struct floatformat *, const unsigned char *);
-static unsigned long get_field (const unsigned char *,
- enum floatformat_byteorders,
- unsigned int,
- unsigned int,
- unsigned int);
-static int floatformat_always_valid (const struct floatformat *fmt,
- const void *from);
-
-static int
-floatformat_always_valid (const struct floatformat *fmt ATTRIBUTE_UNUSED,
- const void *from ATTRIBUTE_UNUSED)
-{
- return 1;
-}
-
-/* The odds that CHAR_BIT will be anything but 8 are low enough that I'm not
- going to bother with trying to muck around with whether it is defined in
- a system header, what we do if not, etc. */
-#define FLOATFORMAT_CHAR_BIT 8
-
-/* floatformats for IEEE half, single and double, big and little endian. */
-const struct floatformat floatformat_ieee_half_big =
-{
- floatformat_big, 16, 0, 1, 5, 15, 31, 6, 10,
- floatformat_intbit_no,
- "floatformat_ieee_half_big",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_ieee_half_little =
-{
- floatformat_little, 16, 0, 1, 5, 15, 31, 6, 10,
- floatformat_intbit_no,
- "floatformat_ieee_half_little",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_ieee_single_big =
-{
- floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23,
- floatformat_intbit_no,
- "floatformat_ieee_single_big",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_ieee_single_little =
-{
- floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23,
- floatformat_intbit_no,
- "floatformat_ieee_single_little",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_ieee_double_big =
-{
- floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52,
- floatformat_intbit_no,
- "floatformat_ieee_double_big",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_ieee_double_little =
-{
- floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52,
- floatformat_intbit_no,
- "floatformat_ieee_double_little",
- floatformat_always_valid,
- NULL
-};
-
-/* floatformat for IEEE double, little endian byte order, with big endian word
- ordering, as on the ARM. */
-
-const struct floatformat floatformat_ieee_double_littlebyte_bigword =
-{
- floatformat_littlebyte_bigword, 64, 0, 1, 11, 1023, 2047, 12, 52,
- floatformat_intbit_no,
- "floatformat_ieee_double_littlebyte_bigword",
- floatformat_always_valid,
- NULL
-};
-
-/* floatformat for VAX. Not quite IEEE, but close enough. */
-
-const struct floatformat floatformat_vax_f =
-{
- floatformat_vax, 32, 0, 1, 8, 129, 0, 9, 23,
- floatformat_intbit_no,
- "floatformat_vax_f",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_vax_d =
-{
- floatformat_vax, 64, 0, 1, 8, 129, 0, 9, 55,
- floatformat_intbit_no,
- "floatformat_vax_d",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_vax_g =
-{
- floatformat_vax, 64, 0, 1, 11, 1025, 0, 12, 52,
- floatformat_intbit_no,
- "floatformat_vax_g",
- floatformat_always_valid,
- NULL
-};
-
-static int floatformat_i387_ext_is_valid (const struct floatformat *fmt,
- const void *from);
-
-static int
-floatformat_i387_ext_is_valid (const struct floatformat *fmt, const void *from)
-{
- /* In the i387 double-extended format, if the exponent is all ones,
- then the integer bit must be set. If the exponent is neither 0
- nor ~0, the intbit must also be set. Only if the exponent is
- zero can it be zero, and then it must be zero. */
- unsigned long exponent, int_bit;
- const unsigned char *ufrom = (const unsigned char *) from;
-
- exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
- fmt->exp_start, fmt->exp_len);
- int_bit = get_field (ufrom, fmt->byteorder, fmt->totalsize,
- fmt->man_start, 1);
-
- if ((exponent == 0) != (int_bit == 0))
- return 0;
- else
- return 1;
-}
-
-const struct floatformat floatformat_i387_ext =
-{
- floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
- floatformat_intbit_yes,
- "floatformat_i387_ext",
- floatformat_i387_ext_is_valid,
- NULL
-};
-const struct floatformat floatformat_m68881_ext =
-{
- /* Note that the bits from 16 to 31 are unused. */
- floatformat_big, 96, 0, 1, 15, 0x3fff, 0x7fff, 32, 64,
- floatformat_intbit_yes,
- "floatformat_m68881_ext",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_i960_ext =
-{
- /* Note that the bits from 0 to 15 are unused. */
- floatformat_little, 96, 16, 17, 15, 0x3fff, 0x7fff, 32, 64,
- floatformat_intbit_yes,
- "floatformat_i960_ext",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_m88110_ext =
-{
- floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
- floatformat_intbit_yes,
- "floatformat_m88110_ext",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_m88110_harris_ext =
-{
- /* Harris uses raw format 128 bytes long, but the number is just an ieee
- double, and the last 64 bits are wasted. */
- floatformat_big,128, 0, 1, 11, 0x3ff, 0x7ff, 12, 52,
- floatformat_intbit_no,
- "floatformat_m88110_ext_harris",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_arm_ext_big =
-{
- /* Bits 1 to 16 are unused. */
- floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
- floatformat_intbit_yes,
- "floatformat_arm_ext_big",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_arm_ext_littlebyte_bigword =
-{
- /* Bits 1 to 16 are unused. */
- floatformat_littlebyte_bigword, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
- floatformat_intbit_yes,
- "floatformat_arm_ext_littlebyte_bigword",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_ia64_spill_big =
-{
- floatformat_big, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
- floatformat_intbit_yes,
- "floatformat_ia64_spill_big",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_ia64_spill_little =
-{
- floatformat_little, 128, 0, 1, 17, 65535, 0x1ffff, 18, 64,
- floatformat_intbit_yes,
- "floatformat_ia64_spill_little",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_ia64_quad_big =
-{
- floatformat_big, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
- floatformat_intbit_no,
- "floatformat_ia64_quad_big",
- floatformat_always_valid,
- NULL
-};
-const struct floatformat floatformat_ia64_quad_little =
-{
- floatformat_little, 128, 0, 1, 15, 16383, 0x7fff, 16, 112,
- floatformat_intbit_no,
- "floatformat_ia64_quad_little",
- floatformat_always_valid,
- NULL
-};
-
-static int
-floatformat_ibm_long_double_is_valid (const struct floatformat *fmt,
- const void *from)
-{
- const unsigned char *ufrom = (const unsigned char *) from;
- const struct floatformat *hfmt = fmt->split_half;
- long top_exp, bot_exp;
- int top_nan = 0;
-
- top_exp = get_field (ufrom, hfmt->byteorder, hfmt->totalsize,
- hfmt->exp_start, hfmt->exp_len);
- bot_exp = get_field (ufrom + 8, hfmt->byteorder, hfmt->totalsize,
- hfmt->exp_start, hfmt->exp_len);
-
- if ((unsigned long) top_exp == hfmt->exp_nan)
- top_nan = mant_bits_set (hfmt, ufrom);
-
- /* A NaN is valid with any low part. */
- if (top_nan)
- return 1;
-
- /* An infinity, zero or denormal requires low part 0 (positive or
- negative). */
- if ((unsigned long) top_exp == hfmt->exp_nan || top_exp == 0)
- {
- if (bot_exp != 0)
- return 0;
-
- return !mant_bits_set (hfmt, ufrom + 8);
- }
-
- /* The top part is now a finite normal value. The long double value
- is the sum of the two parts, and the top part must equal the
- result of rounding the long double value to nearest double. Thus
- the bottom part must be <= 0.5ulp of the top part in absolute
- value, and if it is < 0.5ulp then the long double is definitely
- valid. */
- if (bot_exp < top_exp - 53)
- return 1;
- if (bot_exp > top_exp - 53 && bot_exp != 0)
- return 0;
- if (bot_exp == 0)
- {
- /* The bottom part is 0 or denormal. Determine which, and if
- denormal the first two set bits. */
- int first_bit = -1, second_bit = -1, cur_bit;
- for (cur_bit = 0; (unsigned int) cur_bit < hfmt->man_len; cur_bit++)
- if (get_field (ufrom + 8, hfmt->byteorder, hfmt->totalsize,
- hfmt->man_start + cur_bit, 1))
- {
- if (first_bit == -1)
- first_bit = cur_bit;
- else
- {
- second_bit = cur_bit;
- break;
- }
- }
- /* Bottom part 0 is OK. */
- if (first_bit == -1)
- return 1;
- /* The real exponent of the bottom part is -first_bit. */
- if (-first_bit < top_exp - 53)
- return 1;
- if (-first_bit > top_exp - 53)
- return 0;
- /* The bottom part is at least 0.5ulp of the top part. For this
- to be OK, the bottom part must be exactly 0.5ulp (i.e. no
- more bits set) and the top part must have last bit 0. */
- if (second_bit != -1)
- return 0;
- return !get_field (ufrom, hfmt->byteorder, hfmt->totalsize,
- hfmt->man_start + hfmt->man_len - 1, 1);
- }
- else
- {
- /* The bottom part is at least 0.5ulp of the top part. For this
- to be OK, it must be exactly 0.5ulp (i.e. no explicit bits
- set) and the top part must have last bit 0. */
- if (get_field (ufrom, hfmt->byteorder, hfmt->totalsize,
- hfmt->man_start + hfmt->man_len - 1, 1))
- return 0;
- return !mant_bits_set (hfmt, ufrom + 8);
- }
-}
-
-const struct floatformat floatformat_ibm_long_double =
-{
- floatformat_big, 128, 0, 1, 11, 1023, 2047, 12, 52,
- floatformat_intbit_no,
- "floatformat_ibm_long_double",
- floatformat_ibm_long_double_is_valid,
- &floatformat_ieee_double_big
-};
-
-
-#ifndef min
-#define min(a, b) ((a) < (b) ? (a) : (b))
-#endif
-
-/* Return 1 if any bits are explicitly set in the mantissa of UFROM,
- format FMT, 0 otherwise. */
-static int
-mant_bits_set (const struct floatformat *fmt, const unsigned char *ufrom)
-{
- unsigned int mant_bits, mant_off;
- int mant_bits_left;
-
- mant_off = fmt->man_start;
- mant_bits_left = fmt->man_len;
- while (mant_bits_left > 0)
- {
- mant_bits = min (mant_bits_left, 32);
-
- if (get_field (ufrom, fmt->byteorder, fmt->totalsize,
- mant_off, mant_bits) != 0)
- return 1;
-
- mant_off += mant_bits;
- mant_bits_left -= mant_bits;
- }
- return 0;
-}
-
-/* Extract a field which starts at START and is LEN bits long. DATA and
- TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */
-static unsigned long
-get_field (const unsigned char *data, enum floatformat_byteorders order,
- unsigned int total_len, unsigned int start, unsigned int len)
-{
- unsigned long result = 0;
- unsigned int cur_byte;
- int lo_bit, hi_bit, cur_bitshift = 0;
- int nextbyte = (order == floatformat_little) ? 1 : -1;
-
- /* Start is in big-endian bit order! Fix that first. */
- start = total_len - (start + len);
-
- /* Start at the least significant part of the field. */
- if (order == floatformat_little)
- cur_byte = start / FLOATFORMAT_CHAR_BIT;
- else
- cur_byte = (total_len - start - 1) / FLOATFORMAT_CHAR_BIT;
-
- lo_bit = start % FLOATFORMAT_CHAR_BIT;
- hi_bit = min (lo_bit + len, FLOATFORMAT_CHAR_BIT);
-
- do
- {
- unsigned int shifted = *(data + cur_byte) >> lo_bit;
- unsigned int bits = hi_bit - lo_bit;
- unsigned int mask = (1 << bits) - 1;
- result |= (shifted & mask) << cur_bitshift;
- len -= bits;
- cur_bitshift += bits;
- cur_byte += nextbyte;
- lo_bit = 0;
- hi_bit = min (len, FLOATFORMAT_CHAR_BIT);
- }
- while (len != 0);
-
- return result;
-}
-
-/* Convert from FMT to a double.
- FROM is the address of the extended float.
- Store the double in *TO. */
-
-void
-floatformat_to_double (const struct floatformat *fmt,
- const void *from, double *to)
-{
- const unsigned char *ufrom = (const unsigned char *) from;
- double dto;
- long exponent;
- unsigned long mant;
- unsigned int mant_bits, mant_off;
- int mant_bits_left;
- int special_exponent; /* It's a NaN, denorm or zero */
-
- /* Split values are not handled specially, since the top half has
- the correctly rounded double value (in the only supported case of
- split values). */
-
- exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
- fmt->exp_start, fmt->exp_len);
-
- /* If the exponent indicates a NaN, we don't have information to
- decide what to do. So we handle it like IEEE, except that we
- don't try to preserve the type of NaN. FIXME. */
- if ((unsigned long) exponent == fmt->exp_nan)
- {
- int nan = mant_bits_set (fmt, ufrom);
-
- /* On certain systems (such as GNU/Linux), the use of the
- INFINITY macro below may generate a warning that can not be
- silenced due to a bug in GCC (PR preprocessor/11931). The
- preprocessor fails to recognise the __extension__ keyword in
- conjunction with the GNU/C99 extension for hexadecimal
- floating point constants and will issue a warning when
- compiling with -pedantic. */
- if (nan)
- dto = NAN;
- else
- dto = INFINITY;
-
- if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
- dto = -dto;
-
- *to = dto;
-
- return;
- }
-
- mant_bits_left = fmt->man_len;
- mant_off = fmt->man_start;
- dto = 0.0;
-
- special_exponent = exponent == 0 || (unsigned long) exponent == fmt->exp_nan;
-
- /* Don't bias zero's, denorms or NaNs. */
- if (!special_exponent)
- exponent -= fmt->exp_bias;
-
- /* Build the result algebraically. Might go infinite, underflow, etc;
- who cares. */
-
- /* If this format uses a hidden bit, explicitly add it in now. Otherwise,
- increment the exponent by one to account for the integer bit. */
-
- if (!special_exponent)
- {
- if (fmt->intbit == floatformat_intbit_no)
- dto = ldexp (1.0, exponent);
- else
- exponent++;
- }
-
- while (mant_bits_left > 0)
- {
- mant_bits = min (mant_bits_left, 32);
-
- mant = get_field (ufrom, fmt->byteorder, fmt->totalsize,
- mant_off, mant_bits);
-
- /* Handle denormalized numbers. FIXME: What should we do for
- non-IEEE formats? */
- if (special_exponent && exponent == 0 && mant != 0)
- dto += ldexp ((double)mant,
- (- fmt->exp_bias
- - mant_bits
- - (mant_off - fmt->man_start)
- + 1));
- else
- dto += ldexp ((double)mant, exponent - mant_bits);
- if (exponent != 0)
- exponent -= mant_bits;
- mant_off += mant_bits;
- mant_bits_left -= mant_bits;
- }
-
- /* Negate it if negative. */
- if (get_field (ufrom, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1))
- dto = -dto;
- *to = dto;
-}
-
-static void put_field (unsigned char *, enum floatformat_byteorders,
- unsigned int,
- unsigned int,
- unsigned int,
- unsigned long);
-
-/* Set a field which starts at START and is LEN bits long. DATA and
- TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */
-static void
-put_field (unsigned char *data, enum floatformat_byteorders order,
- unsigned int total_len, unsigned int start, unsigned int len,
- unsigned long stuff_to_put)
-{
- unsigned int cur_byte;
- int lo_bit, hi_bit;
- int nextbyte = (order == floatformat_little) ? 1 : -1;
-
- /* Start is in big-endian bit order! Fix that first. */
- start = total_len - (start + len);
-
- /* Start at the least significant part of the field. */
- if (order == floatformat_little)
- cur_byte = start / FLOATFORMAT_CHAR_BIT;
- else
- cur_byte = (total_len - start - 1) / FLOATFORMAT_CHAR_BIT;
-
- lo_bit = start % FLOATFORMAT_CHAR_BIT;
- hi_bit = min (lo_bit + len, FLOATFORMAT_CHAR_BIT);
-
- do
- {
- unsigned char *byte_ptr = data + cur_byte;
- unsigned int bits = hi_bit - lo_bit;
- unsigned int mask = ((1 << bits) - 1) << lo_bit;
- *byte_ptr = (*byte_ptr & ~mask) | ((stuff_to_put << lo_bit) & mask);
- stuff_to_put >>= bits;
- len -= bits;
- cur_byte += nextbyte;
- lo_bit = 0;
- hi_bit = min (len, FLOATFORMAT_CHAR_BIT);
- }
- while (len != 0);
-}
-
-/* The converse: convert the double *FROM to an extended float
- and store where TO points. Neither FROM nor TO have any alignment
- restrictions. */
-
-void
-floatformat_from_double (const struct floatformat *fmt,
- const double *from, void *to)
-{
- double dfrom;
- int exponent;
- double mant;
- unsigned int mant_bits, mant_off;
- int mant_bits_left;
- unsigned char *uto = (unsigned char *) to;
-
- dfrom = *from;
- memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT);
-
- /* Split values are not handled specially, since a bottom half of
- zero is correct for any value representable as double (in the
- only supported case of split values). */
-
- /* If negative, set the sign bit. */
- if (dfrom < 0)
- {
- put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1);
- dfrom = -dfrom;
- }
-
- if (dfrom == 0)
- {
- /* 0.0. */
- return;
- }
-
- if (dfrom != dfrom)
- {
- /* NaN. */
- put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
- fmt->exp_len, fmt->exp_nan);
- /* Be sure it's not infinity, but NaN value is irrelevant. */
- put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start,
- 32, 1);
- return;
- }
-
- if (dfrom + dfrom == dfrom)
- {
- /* This can only happen for an infinite value (or zero, which we
- already handled above). */
- put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
- fmt->exp_len, fmt->exp_nan);
- return;
- }
-
- mant = frexp (dfrom, &exponent);
- if (exponent + fmt->exp_bias - 1 > 0)
- put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
- fmt->exp_len, exponent + fmt->exp_bias - 1);
- else
- {
- /* Handle a denormalized number. FIXME: What should we do for
- non-IEEE formats? */
- put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start,
- fmt->exp_len, 0);
- mant = ldexp (mant, exponent + fmt->exp_bias - 1);
- }
-
- mant_bits_left = fmt->man_len;
- mant_off = fmt->man_start;
- while (mant_bits_left > 0)
- {
- unsigned long mant_long;
- mant_bits = mant_bits_left < 32 ? mant_bits_left : 32;
-
- mant *= 4294967296.0;
- mant_long = (unsigned long)mant;
- mant -= mant_long;
-
- /* If the integer bit is implicit, and we are not creating a
- denormalized number, then we need to discard it. */
- if ((unsigned int) mant_bits_left == fmt->man_len
- && fmt->intbit == floatformat_intbit_no
- && exponent + fmt->exp_bias - 1 > 0)
- {
- mant_long &= 0x7fffffff;
- mant_bits -= 1;
- }
- else if (mant_bits < 32)
- {
- /* The bits we want are in the most significant MANT_BITS bits of
- mant_long. Move them to the least significant. */
- mant_long >>= 32 - mant_bits;
- }
-
- put_field (uto, fmt->byteorder, fmt->totalsize,
- mant_off, mant_bits, mant_long);
- mant_off += mant_bits;
- mant_bits_left -= mant_bits;
- }
-}
-
-/* Return non-zero iff the data at FROM is a valid number in format FMT. */
-
-int
-floatformat_is_valid (const struct floatformat *fmt, const void *from)
-{
- return fmt->is_valid (fmt, from);
-}
-
-
-#ifdef IEEE_DEBUG
-
-#include <stdio.h>
-
-/* This is to be run on a host which uses IEEE floating point. */
-
-void
-ieee_test (double n)
-{
- double result;
-
- floatformat_to_double (&floatformat_ieee_double_little, &n, &result);
- if ((n != result && (! isnan (n) || ! isnan (result)))
- || (n < 0 && result >= 0)
- || (n >= 0 && result < 0))
- printf ("Differ(to): %.20g -> %.20g\n", n, result);
-
- floatformat_from_double (&floatformat_ieee_double_little, &n, &result);
- if ((n != result && (! isnan (n) || ! isnan (result)))
- || (n < 0 && result >= 0)
- || (n >= 0 && result < 0))
- printf ("Differ(from): %.20g -> %.20g\n", n, result);
-
-#if 0
- {
- char exten[16];
-
- floatformat_from_double (&floatformat_m68881_ext, &n, exten);
- floatformat_to_double (&floatformat_m68881_ext, exten, &result);
- if (n != result)
- printf ("Differ(to+from): %.20g -> %.20g\n", n, result);
- }
-#endif
-
-#if IEEE_DEBUG > 1
- /* This is to be run on a host which uses 68881 format. */
- {
- long double ex = *(long double *)exten;
- if (ex != n)
- printf ("Differ(from vs. extended): %.20g\n", n);
- }
-#endif
-}
-
-int
-main (void)
-{
- ieee_test (0.0);
- ieee_test (0.5);
- ieee_test (256.0);
- ieee_test (0.12345);
- ieee_test (234235.78907234);
- ieee_test (-512.0);
- ieee_test (-0.004321);
- ieee_test (1.2E-70);
- ieee_test (1.2E-316);
- ieee_test (4.9406564584124654E-324);
- ieee_test (- 4.9406564584124654E-324);
- ieee_test (- 0.0);
- ieee_test (- INFINITY);
- ieee_test (- NAN);
- ieee_test (INFINITY);
- ieee_test (NAN);
- return 0;
-}
-#endif
diff --git a/gcc-4.7/libiberty/fnmatch.c b/gcc-4.7/libiberty/fnmatch.c
deleted file mode 100644
index fc897be2c..000000000
--- a/gcc-4.7/libiberty/fnmatch.c
+++ /dev/null
@@ -1,220 +0,0 @@
-/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
-
-NOTE: This source is derived from an old version taken from the GNU C
-Library (glibc).
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#if defined (CONFIG_BROKETS)
-/* We use <config.h> instead of "config.h" so that a compilation
- using -I. -I$srcdir will use ./config.h rather than $srcdir/config.h
- (which it would do because it found this file in $srcdir). */
-#include <config.h>
-#else
-#include "config.h"
-#endif
-#endif
-
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-/* This code to undef const added in libiberty. */
-#ifndef __STDC__
-/* This is a separate conditional since some stdc systems
- reject `defined (const)'. */
-#ifndef const
-#define const
-#endif
-#endif
-
-#include <errno.h>
-#include <fnmatch.h>
-#include <safe-ctype.h>
-
-/* Comment out all this code if we are using the GNU C Library, and are not
- actually compiling the library itself. This code is part of the GNU C
- Library, but also included in many other GNU distributions. Compiling
- and linking in this code is a waste when using the GNU C library
- (especially if it is a shared library). Rather than having every GNU
- program understand `configure --with-gnu-libc' and omit the object files,
- it is simpler to just do this in the source for each such file. */
-
-#if defined (_LIBC) || !defined (__GNU_LIBRARY__)
-
-
-#if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS)
-extern int errno;
-#endif
-
-/* Match STRING against the filename pattern PATTERN, returning zero if
- it matches, nonzero if not. */
-int
-fnmatch (const char *pattern, const char *string, int flags)
-{
- register const char *p = pattern, *n = string;
- register unsigned char c;
-
-#define FOLD(c) ((flags & FNM_CASEFOLD) ? TOLOWER (c) : (c))
-
- while ((c = *p++) != '\0')
- {
- c = FOLD (c);
-
- switch (c)
- {
- case '?':
- if (*n == '\0')
- return FNM_NOMATCH;
- else if ((flags & FNM_FILE_NAME) && *n == '/')
- return FNM_NOMATCH;
- else if ((flags & FNM_PERIOD) && *n == '.' &&
- (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
- return FNM_NOMATCH;
- break;
-
- case '\\':
- if (!(flags & FNM_NOESCAPE))
- {
- c = *p++;
- c = FOLD (c);
- }
- if (FOLD ((unsigned char)*n) != c)
- return FNM_NOMATCH;
- break;
-
- case '*':
- if ((flags & FNM_PERIOD) && *n == '.' &&
- (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
- return FNM_NOMATCH;
-
- for (c = *p++; c == '?' || c == '*'; c = *p++, ++n)
- if (((flags & FNM_FILE_NAME) && *n == '/') ||
- (c == '?' && *n == '\0'))
- return FNM_NOMATCH;
-
- if (c == '\0')
- return 0;
-
- {
- unsigned char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c;
- c1 = FOLD (c1);
- for (--p; *n != '\0'; ++n)
- if ((c == '[' || FOLD ((unsigned char)*n) == c1) &&
- fnmatch (p, n, flags & ~FNM_PERIOD) == 0)
- return 0;
- return FNM_NOMATCH;
- }
-
- case '[':
- {
- /* Nonzero if the sense of the character class is inverted. */
- register int negate;
-
- if (*n == '\0')
- return FNM_NOMATCH;
-
- if ((flags & FNM_PERIOD) && *n == '.' &&
- (n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
- return FNM_NOMATCH;
-
- negate = (*p == '!' || *p == '^');
- if (negate)
- ++p;
-
- c = *p++;
- for (;;)
- {
- register unsigned char cstart = c, cend = c;
-
- if (!(flags & FNM_NOESCAPE) && c == '\\')
- cstart = cend = *p++;
-
- cstart = cend = FOLD (cstart);
-
- if (c == '\0')
- /* [ (unterminated) loses. */
- return FNM_NOMATCH;
-
- c = *p++;
- c = FOLD (c);
-
- if ((flags & FNM_FILE_NAME) && c == '/')
- /* [/] can never match. */
- return FNM_NOMATCH;
-
- if (c == '-' && *p != ']')
- {
- cend = *p++;
- if (!(flags & FNM_NOESCAPE) && cend == '\\')
- cend = *p++;
- if (cend == '\0')
- return FNM_NOMATCH;
- cend = FOLD (cend);
-
- c = *p++;
- }
-
- if (FOLD ((unsigned char)*n) >= cstart
- && FOLD ((unsigned char)*n) <= cend)
- goto matched;
-
- if (c == ']')
- break;
- }
- if (!negate)
- return FNM_NOMATCH;
- break;
-
- matched:;
- /* Skip the rest of the [...] that already matched. */
- while (c != ']')
- {
- if (c == '\0')
- /* [... (unterminated) loses. */
- return FNM_NOMATCH;
-
- c = *p++;
- if (!(flags & FNM_NOESCAPE) && c == '\\')
- /* XXX 1003.2d11 is unclear if this is right. */
- ++p;
- }
- if (negate)
- return FNM_NOMATCH;
- }
- break;
-
- default:
- if (c != FOLD ((unsigned char)*n))
- return FNM_NOMATCH;
- }
-
- ++n;
- }
-
- if (*n == '\0')
- return 0;
-
- if ((flags & FNM_LEADING_DIR) && *n == '/')
- /* The FNM_LEADING_DIR flag says that "foo*" matches "foobar/frobozz". */
- return 0;
-
- return FNM_NOMATCH;
-}
-
-#endif /* _LIBC or not __GNU_LIBRARY__. */
diff --git a/gcc-4.7/libiberty/fnmatch.txh b/gcc-4.7/libiberty/fnmatch.txh
deleted file mode 100644
index b5a93734b..000000000
--- a/gcc-4.7/libiberty/fnmatch.txh
+++ /dev/null
@@ -1,49 +0,0 @@
-@deftypefn Replacement int fnmatch (const char *@var{pattern}, @
- const char *@var{string}, int @var{flags})
-
-Matches @var{string} against @var{pattern}, returning zero if it
-matches, @code{FNM_NOMATCH} if not. @var{pattern} may contain the
-wildcards @code{?} to match any one character, @code{*} to match any
-zero or more characters, or a set of alternate characters in square
-brackets, like @samp{[a-gt8]}, which match one character (@code{a}
-through @code{g}, or @code{t}, or @code{8}, in this example) if that one
-character is in the set. A set may be inverted (i.e., match anything
-except what's in the set) by giving @code{^} or @code{!} as the first
-character in the set. To include those characters in the set, list them
-as anything other than the first character of the set. To include a
-dash in the set, list it last in the set. A backslash character makes
-the following character not special, so for example you could match
-against a literal asterisk with @samp{\*}. To match a literal
-backslash, use @samp{\\}.
-
-@code{flags} controls various aspects of the matching process, and is a
-boolean OR of zero or more of the following values (defined in
-@code{<fnmatch.h>}):
-
-@table @code
-
-@item FNM_PATHNAME
-@itemx FNM_FILE_NAME
-@var{string} is assumed to be a path name. No wildcard will ever match
-@code{/}.
-
-@item FNM_NOESCAPE
-Do not interpret backslashes as quoting the following special character.
-
-@item FNM_PERIOD
-A leading period (at the beginning of @var{string}, or if
-@code{FNM_PATHNAME} after a slash) is not matched by @code{*} or
-@code{?} but must be matched explicitly.
-
-@item FNM_LEADING_DIR
-Means that @var{string} also matches @var{pattern} if some initial part
-of @var{string} matches, and is followed by @code{/} and zero or more
-characters. For example, @samp{foo*} would match either @samp{foobar}
-or @samp{foobar/grill}.
-
-@item FNM_CASEFOLD
-Ignores case when performing the comparison.
-
-@end table
-
-@end deftypefn
diff --git a/gcc-4.7/libiberty/fopen_unlocked.c b/gcc-4.7/libiberty/fopen_unlocked.c
deleted file mode 100644
index d1f78c462..000000000
--- a/gcc-4.7/libiberty/fopen_unlocked.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* Implement fopen_unlocked and related functions.
- Copyright (C) 2005, 2011 Free Software Foundation, Inc.
- Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Extension void unlock_stream (FILE * @var{stream})
-
-If the OS supports it, ensure that the supplied stream is setup to
-avoid any multi-threaded locking. Otherwise leave the @code{FILE}
-pointer unchanged. If the @var{stream} is @code{NULL} do nothing.
-
-@end deftypefn
-
-@deftypefn Extension void unlock_std_streams (void)
-
-If the OS supports it, ensure that the standard I/O streams,
-@code{stdin}, @code{stdout} and @code{stderr} are setup to avoid any
-multi-threaded locking. Otherwise do nothing.
-
-@end deftypefn
-
-@deftypefn Extension {FILE *} fopen_unlocked (const char *@var{path}, @
- const char * @var{mode})
-
-Opens and returns a @code{FILE} pointer via @code{fopen}. If the
-operating system supports it, ensure that the stream is setup to avoid
-any multi-threaded locking. Otherwise return the @code{FILE} pointer
-unchanged.
-
-@end deftypefn
-
-@deftypefn Extension {FILE *} fdopen_unlocked (int @var{fildes}, @
- const char * @var{mode})
-
-Opens and returns a @code{FILE} pointer via @code{fdopen}. If the
-operating system supports it, ensure that the stream is setup to avoid
-any multi-threaded locking. Otherwise return the @code{FILE} pointer
-unchanged.
-
-@end deftypefn
-
-@deftypefn Extension {FILE *} freopen_unlocked (const char * @var{path}, @
- const char * @var{mode}, FILE * @var{stream})
-
-Opens and returns a @code{FILE} pointer via @code{freopen}. If the
-operating system supports it, ensure that the stream is setup to avoid
-any multi-threaded locking. Otherwise return the @code{FILE} pointer
-unchanged.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#ifdef HAVE_STDIO_EXT_H
-#include <stdio_ext.h>
-#endif
-
-#include "libiberty.h"
-
-/* This is an inline helper function to consolidate attempts to unlock
- a stream. */
-
-static inline void
-unlock_1 (FILE *const fp ATTRIBUTE_UNUSED)
-{
-#if defined(HAVE___FSETLOCKING) && defined(FSETLOCKING_BYCALLER)
- if (fp)
- __fsetlocking (fp, FSETLOCKING_BYCALLER);
-#endif
-}
-
-void
-unlock_stream (FILE *fp)
-{
- unlock_1 (fp);
-}
-
-void
-unlock_std_streams (void)
-{
- unlock_1 (stdin);
- unlock_1 (stdout);
- unlock_1 (stderr);
-}
-
-FILE *
-fopen_unlocked (const char *path, const char *mode)
-{
- FILE *const fp = fopen (path, mode);
- unlock_1 (fp);
- return fp;
-}
-
-FILE *
-fdopen_unlocked (int fildes, const char *mode)
-{
- FILE *const fp = fdopen (fildes, mode);
- unlock_1 (fp);
- return fp;
-}
-
-FILE *
-freopen_unlocked (const char *path, const char *mode, FILE *stream)
-{
- FILE *const fp = freopen (path, mode, stream);
- unlock_1 (fp);
- return fp;
-}
diff --git a/gcc-4.7/libiberty/functions.texi b/gcc-4.7/libiberty/functions.texi
deleted file mode 100644
index c9df186be..000000000
--- a/gcc-4.7/libiberty/functions.texi
+++ /dev/null
@@ -1,1940 +0,0 @@
-@c Automatically generated from *.c and others (the comments before
-@c each entry tell you which file and where in that file). DO NOT EDIT!
-@c Edit the *.c files, configure with --enable-maintainer-mode,
-@c run 'make stamp-functions' and gather-docs will build a new copy.
-
-@c alloca.c:26
-@deftypefn Replacement void* alloca (size_t @var{size})
-
-This function allocates memory which will be automatically reclaimed
-after the procedure exits. The @libib{} implementation does not free
-the memory immediately but will do so eventually during subsequent
-calls to this function. Memory is allocated using @code{xmalloc} under
-normal circumstances.
-
-The header file @file{alloca-conf.h} can be used in conjunction with the
-GNU Autoconf test @code{AC_FUNC_ALLOCA} to test for and properly make
-available this function. The @code{AC_FUNC_ALLOCA} test requires that
-client code use a block of preprocessor code to be safe (see the Autoconf
-manual for more); this header incorporates that logic and more, including
-the possibility of a GCC built-in function.
-
-@end deftypefn
-
-@c asprintf.c:32
-@deftypefn Extension int asprintf (char **@var{resptr}, const char *@var{format}, ...)
-
-Like @code{sprintf}, but instead of passing a pointer to a buffer, you
-pass a pointer to a pointer. This function will compute the size of
-the buffer needed, allocate memory with @code{malloc}, and store a
-pointer to the allocated memory in @code{*@var{resptr}}. The value
-returned is the same as @code{sprintf} would return. If memory could
-not be allocated, minus one is returned and @code{NULL} is stored in
-@code{*@var{resptr}}.
-
-@end deftypefn
-
-@c atexit.c:6
-@deftypefn Supplemental int atexit (void (*@var{f})())
-
-Causes function @var{f} to be called at exit. Returns 0.
-
-@end deftypefn
-
-@c basename.c:6
-@deftypefn Supplemental char* basename (const char *@var{name})
-
-Returns a pointer to the last component of pathname @var{name}.
-Behavior is undefined if the pathname ends in a directory separator.
-
-@end deftypefn
-
-@c bcmp.c:6
-@deftypefn Supplemental int bcmp (char *@var{x}, char *@var{y}, int @var{count})
-
-Compares the first @var{count} bytes of two areas of memory. Returns
-zero if they are the same, nonzero otherwise. Returns zero if
-@var{count} is zero. A nonzero result only indicates a difference,
-it does not indicate any sorting order (say, by having a positive
-result mean @var{x} sorts before @var{y}).
-
-@end deftypefn
-
-@c bcopy.c:3
-@deftypefn Supplemental void bcopy (char *@var{in}, char *@var{out}, int @var{length})
-
-Copies @var{length} bytes from memory region @var{in} to region
-@var{out}. The use of @code{bcopy} is deprecated in new programs.
-
-@end deftypefn
-
-@c bsearch.c:33
-@deftypefn Supplemental void* bsearch (const void *@var{key}, @
- const void *@var{base}, size_t @var{nmemb}, size_t @var{size}, @
- int (*@var{compar})(const void *, const void *))
-
-Performs a search over an array of @var{nmemb} elements pointed to by
-@var{base} for a member that matches the object pointed to by @var{key}.
-The size of each member is specified by @var{size}. The array contents
-should be sorted in ascending order according to the @var{compar}
-comparison function. This routine should take two arguments pointing to
-the @var{key} and to an array member, in that order, and should return an
-integer less than, equal to, or greater than zero if the @var{key} object
-is respectively less than, matching, or greater than the array member.
-
-@end deftypefn
-
-@c argv.c:142
-@deftypefn Extension char** buildargv (char *@var{sp})
-
-Given a pointer to a string, parse the string extracting fields
-separated by whitespace and optionally enclosed within either single
-or double quotes (which are stripped off), and build a vector of
-pointers to copies of the string for each field. The input string
-remains unchanged. The last element of the vector is followed by a
-@code{NULL} element.
-
-All of the memory for the pointer array and copies of the string
-is obtained from @code{malloc}. All of the memory can be returned to the
-system with the single function call @code{freeargv}, which takes the
-returned result of @code{buildargv}, as it's argument.
-
-Returns a pointer to the argument vector if successful. Returns
-@code{NULL} if @var{sp} is @code{NULL} or if there is insufficient
-memory to complete building the argument vector.
-
-If the input is a null string (as opposed to a @code{NULL} pointer),
-then buildarg returns an argument vector that has one arg, a null
-string.
-
-@end deftypefn
-
-@c bzero.c:6
-@deftypefn Supplemental void bzero (char *@var{mem}, int @var{count})
-
-Zeros @var{count} bytes starting at @var{mem}. Use of this function
-is deprecated in favor of @code{memset}.
-
-@end deftypefn
-
-@c calloc.c:6
-@deftypefn Supplemental void* calloc (size_t @var{nelem}, size_t @var{elsize})
-
-Uses @code{malloc} to allocate storage for @var{nelem} objects of
-@var{elsize} bytes each, then zeros the memory.
-
-@end deftypefn
-
-@c choose-temp.c:46
-@deftypefn Extension char* choose_temp_base (void)
-
-Return a prefix for temporary file names or @code{NULL} if unable to
-find one. The current directory is chosen if all else fails so the
-program is exited if a temporary directory can't be found (@code{mktemp}
-fails). The buffer for the result is obtained with @code{xmalloc}.
-
-This function is provided for backwards compatibility only. Its use is
-not recommended.
-
-@end deftypefn
-
-@c make-temp-file.c:96
-@deftypefn Replacement char* choose_tmpdir ()
-
-Returns a pointer to a directory path suitable for creating temporary
-files in.
-
-@end deftypefn
-
-@c clock.c:27
-@deftypefn Supplemental long clock (void)
-
-Returns an approximation of the CPU time used by the process as a
-@code{clock_t}; divide this number by @samp{CLOCKS_PER_SEC} to get the
-number of seconds used.
-
-@end deftypefn
-
-@c concat.c:24
-@deftypefn Extension char* concat (const char *@var{s1}, const char *@var{s2}, @
- @dots{}, @code{NULL})
-
-Concatenate zero or more of strings and return the result in freshly
-@code{xmalloc}ed memory. Returns @code{NULL} if insufficient memory is
-available. The argument list is terminated by the first @code{NULL}
-pointer encountered. Pointers to empty strings are ignored.
-
-@end deftypefn
-
-@c crc32.c:141
-@deftypefn Extension {unsigned int} crc32 (const unsigned char *@var{buf}, @
- int @var{len}, unsigned int @var{init})
-
-Compute the 32-bit CRC of @var{buf} which has length @var{len}. The
-starting value is @var{init}; this may be used to compute the CRC of
-data split across multiple buffers by passing the return value of each
-call as the @var{init} parameter of the next.
-
-This is intended to match the CRC used by the @command{gdb} remote
-protocol for the @samp{qCRC} command. In order to get the same
-results as gdb for a block of data, you must pass the first CRC
-parameter as @code{0xffffffff}.
-
-This CRC can be specified as:
-
- Width : 32
- Poly : 0x04c11db7
- Init : parameter, typically 0xffffffff
- RefIn : false
- RefOut : false
- XorOut : 0
-
-This differs from the "standard" CRC-32 algorithm in that the values
-are not reflected, and there is no final XOR value. These differences
-make it easy to compose the values of multiple blocks.
-
-@end deftypefn
-
-@c argv.c:52
-@deftypefn Extension char** dupargv (char **@var{vector})
-
-Duplicate an argument vector. Simply scans through @var{vector},
-duplicating each argument until the terminating @code{NULL} is found.
-Returns a pointer to the argument vector if successful. Returns
-@code{NULL} if there is insufficient memory to complete building the
-argument vector.
-
-@end deftypefn
-
-@c strerror.c:567
-@deftypefn Extension int errno_max (void)
-
-Returns the maximum @code{errno} value for which a corresponding
-symbolic name or message is available. Note that in the case where we
-use the @code{sys_errlist} supplied by the system, it is possible for
-there to be more symbolic names than messages, or vice versa. In
-fact, the manual page for @code{perror(3C)} explicitly warns that one
-should check the size of the table (@code{sys_nerr}) before indexing
-it, since new error codes may be added to the system before they are
-added to the table. Thus @code{sys_nerr} might be smaller than value
-implied by the largest @code{errno} value defined in @code{<errno.h>}.
-
-We return the maximum value that can be used to obtain a meaningful
-symbolic name or message.
-
-@end deftypefn
-
-@c argv.c:361
-@deftypefn Extension void expandargv (int *@var{argcp}, char ***@var{argvp})
-
-The @var{argcp} and @code{argvp} arguments are pointers to the usual
-@code{argc} and @code{argv} arguments to @code{main}. This function
-looks for arguments that begin with the character @samp{@@}. Any such
-arguments are interpreted as ``response files''. The contents of the
-response file are interpreted as additional command line options. In
-particular, the file is separated into whitespace-separated strings;
-each such string is taken as a command-line option. The new options
-are inserted in place of the option naming the response file, and
-@code{*argcp} and @code{*argvp} will be updated. If the value of
-@code{*argvp} is modified by this function, then the new value has
-been dynamically allocated and can be deallocated by the caller with
-@code{freeargv}. However, most callers will simply call
-@code{expandargv} near the beginning of @code{main} and allow the
-operating system to free the memory when the program exits.
-
-@end deftypefn
-
-@c fdmatch.c:23
-@deftypefn Extension int fdmatch (int @var{fd1}, int @var{fd2})
-
-Check to see if two open file descriptors refer to the same file.
-This is useful, for example, when we have an open file descriptor for
-an unnamed file, and the name of a file that we believe to correspond
-to that fd. This can happen when we are exec'd with an already open
-file (@code{stdout} for example) or from the SVR4 @file{/proc} calls
-that return open file descriptors for mapped address spaces. All we
-have to do is open the file by name and check the two file descriptors
-for a match, which is done by comparing major and minor device numbers
-and inode numbers.
-
-@end deftypefn
-
-@c fopen_unlocked.c:49
-@deftypefn Extension {FILE *} fdopen_unlocked (int @var{fildes}, @
- const char * @var{mode})
-
-Opens and returns a @code{FILE} pointer via @code{fdopen}. If the
-operating system supports it, ensure that the stream is setup to avoid
-any multi-threaded locking. Otherwise return the @code{FILE} pointer
-unchanged.
-
-@end deftypefn
-
-@c ffs.c:3
-@deftypefn Supplemental int ffs (int @var{valu})
-
-Find the first (least significant) bit set in @var{valu}. Bits are
-numbered from right to left, starting with bit 1 (corresponding to the
-value 1). If @var{valu} is zero, zero is returned.
-
-@end deftypefn
-
-@c filename_cmp.c:32
-@deftypefn Extension int filename_cmp (const char *@var{s1}, const char *@var{s2})
-
-Return zero if the two file names @var{s1} and @var{s2} are equivalent.
-If not equivalent, the returned value is similar to what @code{strcmp}
-would return. In other words, it returns a negative value if @var{s1}
-is less than @var{s2}, or a positive value if @var{s2} is greater than
-@var{s2}.
-
-This function does not normalize file names. As a result, this function
-will treat filenames that are spelled differently as different even in
-the case when the two filenames point to the same underlying file.
-However, it does handle the fact that on DOS-like file systems, forward
-and backward slashes are equal.
-
-@end deftypefn
-
-@c filename_cmp.c:81
-@deftypefn Extension int filename_ncmp (const char *@var{s1}, const char *@var{s2}, size_t @var{n})
-
-Return zero if the two file names @var{s1} and @var{s2} are equivalent
-in range @var{n}.
-If not equivalent, the returned value is similar to what @code{strncmp}
-would return. In other words, it returns a negative value if @var{s1}
-is less than @var{s2}, or a positive value if @var{s2} is greater than
-@var{s2}.
-
-This function does not normalize file names. As a result, this function
-will treat filenames that are spelled differently as different even in
-the case when the two filenames point to the same underlying file.
-However, it does handle the fact that on DOS-like file systems, forward
-and backward slashes are equal.
-
-@end deftypefn
-
-@c fnmatch.txh:1
-@deftypefn Replacement int fnmatch (const char *@var{pattern}, @
- const char *@var{string}, int @var{flags})
-
-Matches @var{string} against @var{pattern}, returning zero if it
-matches, @code{FNM_NOMATCH} if not. @var{pattern} may contain the
-wildcards @code{?} to match any one character, @code{*} to match any
-zero or more characters, or a set of alternate characters in square
-brackets, like @samp{[a-gt8]}, which match one character (@code{a}
-through @code{g}, or @code{t}, or @code{8}, in this example) if that one
-character is in the set. A set may be inverted (i.e., match anything
-except what's in the set) by giving @code{^} or @code{!} as the first
-character in the set. To include those characters in the set, list them
-as anything other than the first character of the set. To include a
-dash in the set, list it last in the set. A backslash character makes
-the following character not special, so for example you could match
-against a literal asterisk with @samp{\*}. To match a literal
-backslash, use @samp{\\}.
-
-@code{flags} controls various aspects of the matching process, and is a
-boolean OR of zero or more of the following values (defined in
-@code{<fnmatch.h>}):
-
-@table @code
-
-@item FNM_PATHNAME
-@itemx FNM_FILE_NAME
-@var{string} is assumed to be a path name. No wildcard will ever match
-@code{/}.
-
-@item FNM_NOESCAPE
-Do not interpret backslashes as quoting the following special character.
-
-@item FNM_PERIOD
-A leading period (at the beginning of @var{string}, or if
-@code{FNM_PATHNAME} after a slash) is not matched by @code{*} or
-@code{?} but must be matched explicitly.
-
-@item FNM_LEADING_DIR
-Means that @var{string} also matches @var{pattern} if some initial part
-of @var{string} matches, and is followed by @code{/} and zero or more
-characters. For example, @samp{foo*} would match either @samp{foobar}
-or @samp{foobar/grill}.
-
-@item FNM_CASEFOLD
-Ignores case when performing the comparison.
-
-@end table
-
-@end deftypefn
-
-@c fopen_unlocked.c:39
-@deftypefn Extension {FILE *} fopen_unlocked (const char *@var{path}, @
- const char * @var{mode})
-
-Opens and returns a @code{FILE} pointer via @code{fopen}. If the
-operating system supports it, ensure that the stream is setup to avoid
-any multi-threaded locking. Otherwise return the @code{FILE} pointer
-unchanged.
-
-@end deftypefn
-
-@c argv.c:97
-@deftypefn Extension void freeargv (char **@var{vector})
-
-Free an argument vector that was built using @code{buildargv}. Simply
-scans through @var{vector}, freeing the memory for each argument until
-the terminating @code{NULL} is found, and then frees @var{vector}
-itself.
-
-@end deftypefn
-
-@c fopen_unlocked.c:59
-@deftypefn Extension {FILE *} freopen_unlocked (const char * @var{path}, @
- const char * @var{mode}, FILE * @var{stream})
-
-Opens and returns a @code{FILE} pointer via @code{freopen}. If the
-operating system supports it, ensure that the stream is setup to avoid
-any multi-threaded locking. Otherwise return the @code{FILE} pointer
-unchanged.
-
-@end deftypefn
-
-@c getruntime.c:82
-@deftypefn Replacement long get_run_time (void)
-
-Returns the time used so far, in microseconds. If possible, this is
-the time used by this process, else it is the elapsed time since the
-process started.
-
-@end deftypefn
-
-@c getcwd.c:6
-@deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len})
-
-Copy the absolute pathname for the current working directory into
-@var{pathname}, which is assumed to point to a buffer of at least
-@var{len} bytes, and return a pointer to the buffer. If the current
-directory's path doesn't fit in @var{len} characters, the result is
-@code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer,
-@code{getcwd} will obtain @var{len} bytes of space using
-@code{malloc}.
-
-@end deftypefn
-
-@c getpagesize.c:5
-@deftypefn Supplemental int getpagesize (void)
-
-Returns the number of bytes in a page of memory. This is the
-granularity of many of the system memory management routines. No
-guarantee is made as to whether or not it is the same as the basic
-memory management hardware page size.
-
-@end deftypefn
-
-@c getpwd.c:5
-@deftypefn Supplemental char* getpwd (void)
-
-Returns the current working directory. This implementation caches the
-result on the assumption that the process will not call @code{chdir}
-between calls to @code{getpwd}.
-
-@end deftypefn
-
-@c gettimeofday.c:12
-@deftypefn Supplemental int gettimeofday (struct timeval *@var{tp}, void *@var{tz})
-
-Writes the current time to @var{tp}. This implementation requires
-that @var{tz} be NULL. Returns 0 on success, -1 on failure.
-
-@end deftypefn
-
-@c hex.c:33
-@deftypefn Extension void hex_init (void)
-
-Initializes the array mapping the current character set to
-corresponding hex values. This function must be called before any
-call to @code{hex_p} or @code{hex_value}. If you fail to call it, a
-default ASCII-based table will normally be used on ASCII systems.
-
-@end deftypefn
-
-@c hex.c:42
-@deftypefn Extension int hex_p (int @var{c})
-
-Evaluates to non-zero if the given character is a valid hex character,
-or zero if it is not. Note that the value you pass will be cast to
-@code{unsigned char} within the macro.
-
-@end deftypefn
-
-@c hex.c:50
-@deftypefn Extension {unsigned int} hex_value (int @var{c})
-
-Returns the numeric equivalent of the given character when interpreted
-as a hexadecimal digit. The result is undefined if you pass an
-invalid hex digit. Note that the value you pass will be cast to
-@code{unsigned char} within the macro.
-
-The @code{hex_value} macro returns @code{unsigned int}, rather than
-signed @code{int}, to make it easier to use in parsing addresses from
-hex dump files: a signed @code{int} would be sign-extended when
-converted to a wider unsigned type --- like @code{bfd_vma}, on some
-systems.
-
-@end deftypefn
-
-@c safe-ctype.c:25
-@defvr Extension HOST_CHARSET
-This macro indicates the basic character set and encoding used by the
-host: more precisely, the encoding used for character constants in
-preprocessor @samp{#if} statements (the C "execution character set").
-It is defined by @file{safe-ctype.h}, and will be an integer constant
-with one of the following values:
-
-@ftable @code
-@item HOST_CHARSET_UNKNOWN
-The host character set is unknown - that is, not one of the next two
-possibilities.
-
-@item HOST_CHARSET_ASCII
-The host character set is ASCII.
-
-@item HOST_CHARSET_EBCDIC
-The host character set is some variant of EBCDIC. (Only one of the
-nineteen EBCDIC varying characters is tested; exercise caution.)
-@end ftable
-@end defvr
-
-@c hashtab.c:336
-@deftypefn Supplemental htab_t htab_create_typed_alloc (size_t @var{size}, @
-htab_hash @var{hash_f}, htab_eq @var{eq_f}, htab_del @var{del_f}, @
-htab_alloc @var{alloc_tab_f}, htab_alloc @var{alloc_f}, @
-htab_free @var{free_f})
-
-This function creates a hash table that uses two different allocators
-@var{alloc_tab_f} and @var{alloc_f} to use for allocating the table itself
-and its entries respectively. This is useful when variables of different
-types need to be allocated with different allocators.
-
-The created hash table is slightly larger than @var{size} and it is
-initially empty (all the hash table entries are @code{HTAB_EMPTY_ENTRY}).
-The function returns the created hash table, or @code{NULL} if memory
-allocation fails.
-
-@end deftypefn
-
-@c index.c:5
-@deftypefn Supplemental char* index (char *@var{s}, int @var{c})
-
-Returns a pointer to the first occurrence of the character @var{c} in
-the string @var{s}, or @code{NULL} if not found. The use of @code{index} is
-deprecated in new programs in favor of @code{strchr}.
-
-@end deftypefn
-
-@c insque.c:6
-@deftypefn Supplemental void insque (struct qelem *@var{elem}, @
- struct qelem *@var{pred})
-@deftypefnx Supplemental void remque (struct qelem *@var{elem})
-
-Routines to manipulate queues built from doubly linked lists. The
-@code{insque} routine inserts @var{elem} in the queue immediately
-after @var{pred}. The @code{remque} routine removes @var{elem} from
-its containing queue. These routines expect to be passed pointers to
-structures which have as their first members a forward pointer and a
-back pointer, like this prototype (although no prototype is provided):
-
-@example
-struct qelem @{
- struct qelem *q_forw;
- struct qelem *q_back;
- char q_data[];
-@};
-@end example
-
-@end deftypefn
-
-@c safe-ctype.c:46
-@deffn Extension ISALPHA (@var{c})
-@deffnx Extension ISALNUM (@var{c})
-@deffnx Extension ISBLANK (@var{c})
-@deffnx Extension ISCNTRL (@var{c})
-@deffnx Extension ISDIGIT (@var{c})
-@deffnx Extension ISGRAPH (@var{c})
-@deffnx Extension ISLOWER (@var{c})
-@deffnx Extension ISPRINT (@var{c})
-@deffnx Extension ISPUNCT (@var{c})
-@deffnx Extension ISSPACE (@var{c})
-@deffnx Extension ISUPPER (@var{c})
-@deffnx Extension ISXDIGIT (@var{c})
-
-These twelve macros are defined by @file{safe-ctype.h}. Each has the
-same meaning as the corresponding macro (with name in lowercase)
-defined by the standard header @file{ctype.h}. For example,
-@code{ISALPHA} returns true for alphabetic characters and false for
-others. However, there are two differences between these macros and
-those provided by @file{ctype.h}:
-
-@itemize @bullet
-@item These macros are guaranteed to have well-defined behavior for all
-values representable by @code{signed char} and @code{unsigned char}, and
-for @code{EOF}.
-
-@item These macros ignore the current locale; they are true for these
-fixed sets of characters:
-@multitable {@code{XDIGIT}} {yada yada yada yada yada yada yada yada}
-@item @code{ALPHA} @tab @kbd{A-Za-z}
-@item @code{ALNUM} @tab @kbd{A-Za-z0-9}
-@item @code{BLANK} @tab @kbd{space tab}
-@item @code{CNTRL} @tab @code{!PRINT}
-@item @code{DIGIT} @tab @kbd{0-9}
-@item @code{GRAPH} @tab @code{ALNUM || PUNCT}
-@item @code{LOWER} @tab @kbd{a-z}
-@item @code{PRINT} @tab @code{GRAPH ||} @kbd{space}
-@item @code{PUNCT} @tab @kbd{`~!@@#$%^&*()_-=+[@{]@}\|;:'",<.>/?}
-@item @code{SPACE} @tab @kbd{space tab \n \r \f \v}
-@item @code{UPPER} @tab @kbd{A-Z}
-@item @code{XDIGIT} @tab @kbd{0-9A-Fa-f}
-@end multitable
-
-Note that, if the host character set is ASCII or a superset thereof,
-all these macros will return false for all values of @code{char} outside
-the range of 7-bit ASCII. In particular, both ISPRINT and ISCNTRL return
-false for characters with numeric values from 128 to 255.
-@end itemize
-@end deffn
-
-@c safe-ctype.c:95
-@deffn Extension ISIDNUM (@var{c})
-@deffnx Extension ISIDST (@var{c})
-@deffnx Extension IS_VSPACE (@var{c})
-@deffnx Extension IS_NVSPACE (@var{c})
-@deffnx Extension IS_SPACE_OR_NUL (@var{c})
-@deffnx Extension IS_ISOBASIC (@var{c})
-These six macros are defined by @file{safe-ctype.h} and provide
-additional character classes which are useful when doing lexical
-analysis of C or similar languages. They are true for the following
-sets of characters:
-
-@multitable {@code{SPACE_OR_NUL}} {yada yada yada yada yada yada yada yada}
-@item @code{IDNUM} @tab @kbd{A-Za-z0-9_}
-@item @code{IDST} @tab @kbd{A-Za-z_}
-@item @code{VSPACE} @tab @kbd{\r \n}
-@item @code{NVSPACE} @tab @kbd{space tab \f \v \0}
-@item @code{SPACE_OR_NUL} @tab @code{VSPACE || NVSPACE}
-@item @code{ISOBASIC} @tab @code{VSPACE || NVSPACE || PRINT}
-@end multitable
-@end deffn
-
-@c lbasename.c:23
-@deftypefn Replacement {const char*} lbasename (const char *@var{name})
-
-Given a pointer to a string containing a typical pathname
-(@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the
-last component of the pathname (@samp{ls.c} in this case). The
-returned pointer is guaranteed to lie within the original
-string. This latter fact is not true of many vendor C
-libraries, which return special strings or modify the passed
-strings for particular input.
-
-In particular, the empty string returns the same empty string,
-and a path ending in @code{/} returns the empty string after it.
-
-@end deftypefn
-
-@c lrealpath.c:25
-@deftypefn Replacement {const char*} lrealpath (const char *@var{name})
-
-Given a pointer to a string containing a pathname, returns a canonical
-version of the filename. Symlinks will be resolved, and ``.'' and ``..''
-components will be simplified. The returned value will be allocated using
-@code{malloc}, or @code{NULL} will be returned on a memory allocation error.
-
-@end deftypefn
-
-@c make-relative-prefix.c:24
-@deftypefn Extension {const char*} make_relative_prefix (const char *@var{progname}, @
- const char *@var{bin_prefix}, const char *@var{prefix})
-
-Given three paths @var{progname}, @var{bin_prefix}, @var{prefix},
-return the path that is in the same position relative to
-@var{progname}'s directory as @var{prefix} is relative to
-@var{bin_prefix}. That is, a string starting with the directory
-portion of @var{progname}, followed by a relative pathname of the
-difference between @var{bin_prefix} and @var{prefix}.
-
-If @var{progname} does not contain any directory separators,
-@code{make_relative_prefix} will search @env{PATH} to find a program
-named @var{progname}. Also, if @var{progname} is a symbolic link,
-the symbolic link will be resolved.
-
-For example, if @var{bin_prefix} is @code{/alpha/beta/gamma/gcc/delta},
-@var{prefix} is @code{/alpha/beta/gamma/omega/}, and @var{progname} is
-@code{/red/green/blue/gcc}, then this function will return
-@code{/red/green/blue/../../omega/}.
-
-The return value is normally allocated via @code{malloc}. If no
-relative prefix can be found, return @code{NULL}.
-
-@end deftypefn
-
-@c make-temp-file.c:174
-@deftypefn Replacement char* make_temp_file (const char *@var{suffix})
-
-Return a temporary file name (as a string) or @code{NULL} if unable to
-create one. @var{suffix} is a suffix to append to the file name. The
-string is @code{malloc}ed, and the temporary file has been created.
-
-@end deftypefn
-
-@c memchr.c:3
-@deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, @
- size_t @var{n})
-
-This function searches memory starting at @code{*@var{s}} for the
-character @var{c}. The search only ends with the first occurrence of
-@var{c}, or after @var{length} characters; in particular, a null
-character does not terminate the search. If the character @var{c} is
-found within @var{length} characters of @code{*@var{s}}, a pointer
-to the character is returned. If @var{c} is not found, then @code{NULL} is
-returned.
-
-@end deftypefn
-
-@c memcmp.c:6
-@deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, @
- size_t @var{count})
-
-Compares the first @var{count} bytes of two areas of memory. Returns
-zero if they are the same, a value less than zero if @var{x} is
-lexically less than @var{y}, or a value greater than zero if @var{x}
-is lexically greater than @var{y}. Note that lexical order is determined
-as if comparing unsigned char arrays.
-
-@end deftypefn
-
-@c memcpy.c:6
-@deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, @
- size_t @var{length})
-
-Copies @var{length} bytes from memory region @var{in} to region
-@var{out}. Returns a pointer to @var{out}.
-
-@end deftypefn
-
-@c memmem.c:20
-@deftypefn Supplemental void* memmem (const void *@var{haystack}, @
- size_t @var{haystack_len} const void *@var{needle}, size_t @var{needle_len})
-
-Returns a pointer to the first occurrence of @var{needle} (length
-@var{needle_len}) in @var{haystack} (length @var{haystack_len}).
-Returns @code{NULL} if not found.
-
-@end deftypefn
-
-@c memmove.c:6
-@deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, @
- size_t @var{count})
-
-Copies @var{count} bytes from memory area @var{from} to memory area
-@var{to}, returning a pointer to @var{to}.
-
-@end deftypefn
-
-@c mempcpy.c:23
-@deftypefn Supplemental void* mempcpy (void *@var{out}, const void *@var{in}, @
- size_t @var{length})
-
-Copies @var{length} bytes from memory region @var{in} to region
-@var{out}. Returns a pointer to @var{out} + @var{length}.
-
-@end deftypefn
-
-@c memset.c:6
-@deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, @
- size_t @var{count})
-
-Sets the first @var{count} bytes of @var{s} to the constant byte
-@var{c}, returning a pointer to @var{s}.
-
-@end deftypefn
-
-@c mkstemps.c:58
-@deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len})
-
-Generate a unique temporary file name from @var{pattern}.
-@var{pattern} has the form:
-
-@example
- @var{path}/ccXXXXXX@var{suffix}
-@end example
-
-@var{suffix_len} tells us how long @var{suffix} is (it can be zero
-length). The last six characters of @var{pattern} before @var{suffix}
-must be @samp{XXXXXX}; they are replaced with a string that makes the
-filename unique. Returns a file descriptor open on the file for
-reading and writing.
-
-@end deftypefn
-
-@c pexecute.txh:278
-@deftypefn Extension void pex_free (struct pex_obj @var{obj})
-
-Clean up and free all data associated with @var{obj}. If you have not
-yet called @code{pex_get_times} or @code{pex_get_status}, this will
-try to kill the subprocesses.
-
-@end deftypefn
-
-@c pexecute.txh:251
-@deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, @
- int @var{count}, int *@var{vector})
-
-Returns the exit status of all programs run using @var{obj}.
-@var{count} is the number of results expected. The results will be
-placed into @var{vector}. The results are in the order of the calls
-to @code{pex_run}. Returns 0 on error, 1 on success.
-
-@end deftypefn
-
-@c pexecute.txh:261
-@deftypefn Extension int pex_get_times (struct pex_obj *@var{obj}, @
- int @var{count}, struct pex_time *@var{vector})
-
-Returns the process execution times of all programs run using
-@var{obj}. @var{count} is the number of results expected. The
-results will be placed into @var{vector}. The results are in the
-order of the calls to @code{pex_run}. Returns 0 on error, 1 on
-success.
-
-@code{struct pex_time} has the following fields of the type
-@code{unsigned long}: @code{user_seconds},
-@code{user_microseconds}, @code{system_seconds},
-@code{system_microseconds}. On systems which do not support reporting
-process times, all the fields will be set to @code{0}.
-
-@end deftypefn
-
-@c pexecute.txh:2
-@deftypefn Extension {struct pex_obj *} pex_init (int @var{flags}, @
- const char *@var{pname}, const char *@var{tempbase})
-
-Prepare to execute one or more programs, with standard output of each
-program fed to standard input of the next. This is a system
-independent interface to execute a pipeline.
-
-@var{flags} is a bitwise combination of the following:
-
-@table @code
-
-@vindex PEX_RECORD_TIMES
-@item PEX_RECORD_TIMES
-Record subprocess times if possible.
-
-@vindex PEX_USE_PIPES
-@item PEX_USE_PIPES
-Use pipes for communication between processes, if possible.
-
-@vindex PEX_SAVE_TEMPS
-@item PEX_SAVE_TEMPS
-Don't delete temporary files used for communication between
-processes.
-
-@end table
-
-@var{pname} is the name of program to be executed, used in error
-messages. @var{tempbase} is a base name to use for any required
-temporary files; it may be @code{NULL} to use a randomly chosen name.
-
-@end deftypefn
-
-@c pexecute.txh:161
-@deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, @
- int @var{flags}, const char *@var{in_name})
-
-Return a stream for a temporary file to pass to the first program in
-the pipeline as input.
-
-The name of the input file is chosen according to the same rules
-@code{pex_run} uses to choose output file names, based on
-@var{in_name}, @var{obj} and the @code{PEX_SUFFIX} bit in @var{flags}.
-
-Don't call @code{fclose} on the returned stream; the first call to
-@code{pex_run} closes it automatically.
-
-If @var{flags} includes @code{PEX_BINARY_OUTPUT}, open the stream in
-binary mode; otherwise, open it in the default mode. Including
-@code{PEX_BINARY_OUTPUT} in @var{flags} has no effect on Unix.
-@end deftypefn
-
-@c pexecute.txh:179
-@deftypefn Extension {FILE *} pex_input_pipe (struct pex_obj *@var{obj}, @
- int @var{binary})
-
-Return a stream @var{fp} for a pipe connected to the standard input of
-the first program in the pipeline; @var{fp} is opened for writing.
-You must have passed @code{PEX_USE_PIPES} to the @code{pex_init} call
-that returned @var{obj}.
-
-You must close @var{fp} using @code{fclose} yourself when you have
-finished writing data to the pipeline.
-
-The file descriptor underlying @var{fp} is marked not to be inherited
-by child processes.
-
-On systems that do not support pipes, this function returns
-@code{NULL}, and sets @code{errno} to @code{EINVAL}. If you would
-like to write code that is portable to all systems the @code{pex}
-functions support, consider using @code{pex_input_file} instead.
-
-There are two opportunities for deadlock using
-@code{pex_input_pipe}:
-
-@itemize @bullet
-@item
-Most systems' pipes can buffer only a fixed amount of data; a process
-that writes to a full pipe blocks. Thus, if you write to @file{fp}
-before starting the first process, you run the risk of blocking when
-there is no child process yet to read the data and allow you to
-continue. @code{pex_input_pipe} makes no promises about the
-size of the pipe's buffer, so if you need to write any data at all
-before starting the first process in the pipeline, consider using
-@code{pex_input_file} instead.
-
-@item
-Using @code{pex_input_pipe} and @code{pex_read_output} together
-may also cause deadlock. If the output pipe fills up, so that each
-program in the pipeline is waiting for the next to read more data, and
-you fill the input pipe by writing more data to @var{fp}, then there
-is no way to make progress: the only process that could read data from
-the output pipe is you, but you are blocked on the input pipe.
-
-@end itemize
-
-@end deftypefn
-
-@c pexecute.txh:286
-@deftypefn Extension {const char *} pex_one (int @var{flags}, @
- const char *@var{executable}, char * const *@var{argv}, @
- const char *@var{pname}, const char *@var{outname}, const char *@var{errname}, @
- int *@var{status}, int *@var{err})
-
-An interface to permit the easy execution of a
-single program. The return value and most of the parameters are as
-for a call to @code{pex_run}. @var{flags} is restricted to a
-combination of @code{PEX_SEARCH}, @code{PEX_STDERR_TO_STDOUT}, and
-@code{PEX_BINARY_OUTPUT}. @var{outname} is interpreted as if
-@code{PEX_LAST} were set. On a successful return, @code{*@var{status}} will
-be set to the exit status of the program.
-
-@end deftypefn
-
-@c pexecute.txh:237
-@deftypefn Extension {FILE *} pex_read_err (struct pex_obj *@var{obj}, @
- int @var{binary})
-
-Returns a @code{FILE} pointer which may be used to read the standard
-error of the last program in the pipeline. When this is used,
-@code{PEX_LAST} should not be used in a call to @code{pex_run}. After
-this is called, @code{pex_run} may no longer be called with the same
-@var{obj}. @var{binary} should be non-zero if the file should be
-opened in binary mode. Don't call @code{fclose} on the returned file;
-it will be closed by @code{pex_free}.
-
-@end deftypefn
-
-@c pexecute.txh:224
-@deftypefn Extension {FILE *} pex_read_output (struct pex_obj *@var{obj}, @
- int @var{binary})
-
-Returns a @code{FILE} pointer which may be used to read the standard
-output of the last program in the pipeline. When this is used,
-@code{PEX_LAST} should not be used in a call to @code{pex_run}. After
-this is called, @code{pex_run} may no longer be called with the same
-@var{obj}. @var{binary} should be non-zero if the file should be
-opened in binary mode. Don't call @code{fclose} on the returned file;
-it will be closed by @code{pex_free}.
-
-@end deftypefn
-
-@c pexecute.txh:34
-@deftypefn Extension {const char *} pex_run (struct pex_obj *@var{obj}, @
- int @var{flags}, const char *@var{executable}, char * const *@var{argv}, @
- const char *@var{outname}, const char *@var{errname}, int *@var{err})
-
-Execute one program in a pipeline. On success this returns
-@code{NULL}. On failure it returns an error message, a statically
-allocated string.
-
-@var{obj} is returned by a previous call to @code{pex_init}.
-
-@var{flags} is a bitwise combination of the following:
-
-@table @code
-
-@vindex PEX_LAST
-@item PEX_LAST
-This must be set on the last program in the pipeline. In particular,
-it should be set when executing a single program. The standard output
-of the program will be sent to @var{outname}, or, if @var{outname} is
-@code{NULL}, to the standard output of the calling program. Do @emph{not}
-set this bit if you want to call @code{pex_read_output}
-(described below). After a call to @code{pex_run} with this bit set,
-@var{pex_run} may no longer be called with the same @var{obj}.
-
-@vindex PEX_SEARCH
-@item PEX_SEARCH
-Search for the program using the user's executable search path.
-
-@vindex PEX_SUFFIX
-@item PEX_SUFFIX
-@var{outname} is a suffix. See the description of @var{outname},
-below.
-
-@vindex PEX_STDERR_TO_STDOUT
-@item PEX_STDERR_TO_STDOUT
-Send the program's standard error to standard output, if possible.
-
-@vindex PEX_BINARY_INPUT
-@vindex PEX_BINARY_OUTPUT
-@vindex PEX_BINARY_ERROR
-@item PEX_BINARY_INPUT
-@itemx PEX_BINARY_OUTPUT
-@itemx PEX_BINARY_ERROR
-The standard input (output or error) of the program should be read (written) in
-binary mode rather than text mode. These flags are ignored on systems
-which do not distinguish binary mode and text mode, such as Unix. For
-proper behavior these flags should match appropriately---a call to
-@code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a
-call using @code{PEX_BINARY_INPUT}.
-
-@vindex PEX_STDERR_TO_PIPE
-@item PEX_STDERR_TO_PIPE
-Send the program's standard error to a pipe, if possible. This flag
-cannot be specified together with @code{PEX_STDERR_TO_STDOUT}. This
-flag can be specified only on the last program in pipeline.
-
-@end table
-
-@var{executable} is the program to execute. @var{argv} is the set of
-arguments to pass to the program; normally @code{@var{argv}[0]} will
-be a copy of @var{executable}.
-
-@var{outname} is used to set the name of the file to use for standard
-output. There are two cases in which no output file will be used:
-
-@enumerate
-@item
-if @code{PEX_LAST} is not set in @var{flags}, and @code{PEX_USE_PIPES}
-was set in the call to @code{pex_init}, and the system supports pipes
-
-@item
-if @code{PEX_LAST} is set in @var{flags}, and @var{outname} is
-@code{NULL}
-@end enumerate
-
-@noindent
-Otherwise the code will use a file to hold standard
-output. If @code{PEX_LAST} is not set, this file is considered to be
-a temporary file, and it will be removed when no longer needed, unless
-@code{PEX_SAVE_TEMPS} was set in the call to @code{pex_init}.
-
-There are two cases to consider when setting the name of the file to
-hold standard output.
-
-@enumerate
-@item
-@code{PEX_SUFFIX} is set in @var{flags}. In this case
-@var{outname} may not be @code{NULL}. If the @var{tempbase} parameter
-to @code{pex_init} was not @code{NULL}, then the output file name is
-the concatenation of @var{tempbase} and @var{outname}. If
-@var{tempbase} was @code{NULL}, then the output file name is a random
-file name ending in @var{outname}.
-
-@item
-@code{PEX_SUFFIX} was not set in @var{flags}. In this
-case, if @var{outname} is not @code{NULL}, it is used as the output
-file name. If @var{outname} is @code{NULL}, and @var{tempbase} was
-not NULL, the output file name is randomly chosen using
-@var{tempbase}. Otherwise the output file name is chosen completely
-at random.
-@end enumerate
-
-@var{errname} is the file name to use for standard error output. If
-it is @code{NULL}, standard error is the same as the caller's.
-Otherwise, standard error is written to the named file.
-
-On an error return, the code sets @code{*@var{err}} to an @code{errno}
-value, or to 0 if there is no relevant @code{errno}.
-
-@end deftypefn
-
-@c pexecute.txh:145
-@deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, @
- int @var{flags}, const char *@var{executable}, char * const *@var{argv}, @
- char * const *@var{env}, int @var{env_size}, const char *@var{outname}, @
- const char *@var{errname}, int *@var{err})
-
-Execute one program in a pipeline, permitting the environment for the
-program to be specified. Behaviour and parameters not listed below are
-as for @code{pex_run}.
-
-@var{env} is the environment for the child process, specified as an array of
-character pointers. Each element of the array should point to a string of the
-form @code{VAR=VALUE}, with the exception of the last element that must be
-@code{NULL}.
-
-@end deftypefn
-
-@c pexecute.txh:301
-@deftypefn Extension int pexecute (const char *@var{program}, @
- char * const *@var{argv}, const char *@var{this_pname}, @
- const char *@var{temp_base}, char **@var{errmsg_fmt}, @
- char **@var{errmsg_arg}, int @var{flags})
-
-This is the old interface to execute one or more programs. It is
-still supported for compatibility purposes, but is no longer
-documented.
-
-@end deftypefn
-
-@c strsignal.c:541
-@deftypefn Supplemental void psignal (int @var{signo}, char *@var{message})
-
-Print @var{message} to the standard error, followed by a colon,
-followed by the description of the signal specified by @var{signo},
-followed by a newline.
-
-@end deftypefn
-
-@c putenv.c:21
-@deftypefn Supplemental int putenv (const char *@var{string})
-
-Uses @code{setenv} or @code{unsetenv} to put @var{string} into
-the environment or remove it. If @var{string} is of the form
-@samp{name=value} the string is added; if no @samp{=} is present the
-name is unset/removed.
-
-@end deftypefn
-
-@c pexecute.txh:312
-@deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags})
-
-Another part of the old execution interface.
-
-@end deftypefn
-
-@c random.c:39
-@deftypefn Supplement {long int} random (void)
-@deftypefnx Supplement void srandom (unsigned int @var{seed})
-@deftypefnx Supplement void* initstate (unsigned int @var{seed}, @
- void *@var{arg_state}, unsigned long @var{n})
-@deftypefnx Supplement void* setstate (void *@var{arg_state})
-
-Random number functions. @code{random} returns a random number in the
-range 0 to @code{LONG_MAX}. @code{srandom} initializes the random
-number generator to some starting point determined by @var{seed}
-(else, the values returned by @code{random} are always the same for each
-run of the program). @code{initstate} and @code{setstate} allow fine-grained
-control over the state of the random number generator.
-
-@end deftypefn
-
-@c concat.c:174
-@deftypefn Extension char* reconcat (char *@var{optr}, const char *@var{s1}, @
- @dots{}, @code{NULL})
-
-Same as @code{concat}, except that if @var{optr} is not @code{NULL} it
-is freed after the string is created. This is intended to be useful
-when you're extending an existing string or building up a string in a
-loop:
-
-@example
- str = reconcat (str, "pre-", str, NULL);
-@end example
-
-@end deftypefn
-
-@c rename.c:6
-@deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new})
-
-Renames a file from @var{old} to @var{new}. If @var{new} already
-exists, it is removed.
-
-@end deftypefn
-
-@c rindex.c:5
-@deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c})
-
-Returns a pointer to the last occurrence of the character @var{c} in
-the string @var{s}, or @code{NULL} if not found. The use of @code{rindex} is
-deprecated in new programs in favor of @code{strrchr}.
-
-@end deftypefn
-
-@c setenv.c:23
-@deftypefn Supplemental int setenv (const char *@var{name}, @
- const char *@var{value}, int @var{overwrite})
-@deftypefnx Supplemental void unsetenv (const char *@var{name})
-
-@code{setenv} adds @var{name} to the environment with value
-@var{value}. If the name was already present in the environment,
-the new value will be stored only if @var{overwrite} is nonzero.
-The companion @code{unsetenv} function removes @var{name} from the
-environment. This implementation is not safe for multithreaded code.
-
-@end deftypefn
-
-@c setproctitle.c:31
-@deftypefn Supplemental void setproctitle (const char *@var{fmt}, ...)
-
-Set the title of a process to @var{fmt}. va args not supported for now,
-but defined for compatibility with BSD.
-
-@end deftypefn
-
-@c strsignal.c:348
-@deftypefn Extension int signo_max (void)
-
-Returns the maximum signal value for which a corresponding symbolic
-name or message is available. Note that in the case where we use the
-@code{sys_siglist} supplied by the system, it is possible for there to
-be more symbolic names than messages, or vice versa. In fact, the
-manual page for @code{psignal(3b)} explicitly warns that one should
-check the size of the table (@code{NSIG}) before indexing it, since
-new signal codes may be added to the system before they are added to
-the table. Thus @code{NSIG} might be smaller than value implied by
-the largest signo value defined in @code{<signal.h>}.
-
-We return the maximum value that can be used to obtain a meaningful
-symbolic name or message.
-
-@end deftypefn
-
-@c sigsetmask.c:8
-@deftypefn Supplemental int sigsetmask (int @var{set})
-
-Sets the signal mask to the one provided in @var{set} and returns
-the old mask (which, for libiberty's implementation, will always
-be the value @code{1}).
-
-@end deftypefn
-
-@c simple-object.txh:96
-@deftypefn Extension {const char *} simple_object_attributes_compare @
- (simple_object_attributes *@var{attrs1}, simple_object_attributes *@var{attrs2}, @
- int *@var{err})
-
-Compare @var{attrs1} and @var{attrs2}. If they could be linked
-together without error, return @code{NULL}. Otherwise, return an
-error message and set @code{*@var{err}} to an errno value or @code{0}
-if there is no relevant errno.
-
-@end deftypefn
-
-@c simple-object.txh:81
-@deftypefn Extension {simple_object_attributes *} simple_object_fetch_attributes @
- (simple_object_read *@var{simple_object}, const char **@var{errmsg}, int *@var{err})
-
-Fetch the attributes of @var{simple_object}. The attributes are
-internal information such as the format of the object file, or the
-architecture it was compiled for. This information will persist until
-@code{simple_object_attributes_release} is called, even if
-@var{simple_object} itself is released.
-
-On error this returns @code{NULL}, sets @code{*@var{errmsg}} to an
-error message, and sets @code{*@var{err}} to an errno value or
-@code{0} if there is no relevant errno.
-
-@end deftypefn
-
-@c simple-object.txh:49
-@deftypefn Extension {int} simple_object_find_section @
- (simple_object_read *@var{simple_object} off_t *@var{offset}, @
- off_t *@var{length}, const char **@var{errmsg}, int *@var{err})
-
-Look for the section @var{name} in @var{simple_object}. This returns
-information for the first section with that name.
-
-If found, return 1 and set @code{*@var{offset}} to the offset in the
-file of the section contents and set @code{*@var{length}} to the
-length of the section contents. The value in @code{*@var{offset}}
-will be relative to the offset passed to
-@code{simple_object_open_read}.
-
-If the section is not found, and no error occurs,
-@code{simple_object_find_section} returns @code{0} and set
-@code{*@var{errmsg}} to @code{NULL}.
-
-If an error occurs, @code{simple_object_find_section} returns
-@code{0}, sets @code{*@var{errmsg}} to an error message, and sets
-@code{*@var{err}} to an errno value or @code{0} if there is no
-relevant errno.
-
-@end deftypefn
-
-@c simple-object.txh:27
-@deftypefn Extension {const char *} simple_object_find_sections @
- (simple_object_read *@var{simple_object}, int (*@var{pfn}) (void *@var{data}, @
- const char *@var{name}, off_t @var{offset}, off_t @var{length}), @
- void *@var{data}, int *@var{err})
-
-This function calls @var{pfn} for each section in @var{simple_object}.
-It calls @var{pfn} with the section name, the offset within the file
-of the section contents, and the length of the section contents. The
-offset within the file is relative to the offset passed to
-@code{simple_object_open_read}. The @var{data} argument to this
-function is passed along to @var{pfn}.
-
-If @var{pfn} returns @code{0}, the loop over the sections stops and
-@code{simple_object_find_sections} returns. If @var{pfn} returns some
-other value, the loop continues.
-
-On success @code{simple_object_find_sections} returns. On error it
-returns an error string, and sets @code{*@var{err}} to an errno value
-or @code{0} if there is no relevant errno.
-
-@end deftypefn
-
-@c simple-object.txh:2
-@deftypefn Extension {simple_object_read *} simple_object_open_read @
- (int @var{descriptor}, off_t @var{offset}, const char *{segment_name}, @
- const char **@var{errmsg}, int *@var{err})
-
-Opens an object file for reading. Creates and returns an
-@code{simple_object_read} pointer which may be passed to other
-functions to extract data from the object file.
-
-@var{descriptor} holds a file descriptor which permits reading.
-
-@var{offset} is the offset into the file; this will be @code{0} in the
-normal case, but may be a different value when reading an object file
-in an archive file.
-
-@var{segment_name} is only used with the Mach-O file format used on
-Darwin aka Mac OS X. It is required on that platform, and means to
-only look at sections within the segment with that name. The
-parameter is ignored on other systems.
-
-If an error occurs, this functions returns @code{NULL} and sets
-@code{*@var{errmsg}} to an error string and sets @code{*@var{err}} to
-an errno value or @code{0} if there is no relevant errno.
-
-@end deftypefn
-
-@c simple-object.txh:107
-@deftypefn Extension {void} simple_object_release_attributes @
- (simple_object_attributes *@var{attrs})
-
-Release all resources associated with @var{attrs}.
-
-@end deftypefn
-
-@c simple-object.txh:73
-@deftypefn Extension {void} simple_object_release_read @
- (simple_object_read *@var{simple_object})
-
-Release all resources associated with @var{simple_object}. This does
-not close the file descriptor.
-
-@end deftypefn
-
-@c simple-object.txh:184
-@deftypefn Extension {void} simple_object_release_write @
- (simple_object_write *@var{simple_object})
-
-Release all resources associated with @var{simple_object}.
-
-@end deftypefn
-
-@c simple-object.txh:114
-@deftypefn Extension {simple_object_write *} simple_object_start_write @
- (simple_object_attributes @var{attrs}, const char *@var{segment_name}, @
- const char **@var{errmsg}, int *@var{err})
-
-Start creating a new object file using the object file format
-described in @var{attrs}. You must fetch attribute information from
-an existing object file before you can create a new one. There is
-currently no support for creating an object file de novo.
-
-@var{segment_name} is only used with Mach-O as found on Darwin aka Mac
-OS X. The parameter is required on that target. It means that all
-sections are created within the named segment. It is ignored for
-other object file formats.
-
-On error @code{simple_object_start_write} returns @code{NULL}, sets
-@code{*@var{ERRMSG}} to an error message, and sets @code{*@var{err}}
-to an errno value or @code{0} if there is no relevant errno.
-
-@end deftypefn
-
-@c simple-object.txh:153
-@deftypefn Extension {const char *} simple_object_write_add_data @
- (simple_object_write *@var{simple_object}, @
- simple_object_write_section *@var{section}, const void *@var{buffer}, @
- size_t @var{size}, int @var{copy}, int *@var{err})
-
-Add data @var{buffer}/@var{size} to @var{section} in
-@var{simple_object}. If @var{copy} is non-zero, the data will be
-copied into memory if necessary. If @var{copy} is zero, @var{buffer}
-must persist until @code{simple_object_write_to_file} is called. is
-released.
-
-On success this returns @code{NULL}. On error this returns an error
-message, and sets @code{*@var{err}} to an errno value or 0 if there is
-no relevant erro.
-
-@end deftypefn
-
-@c simple-object.txh:134
-@deftypefn Extension {simple_object_write_section *} simple_object_write_create_section @
- (simple_object_write *@var{simple_object}, const char *@var{name}, @
- unsigned int @var{align}, const char **@var{errmsg}, int *@var{err})
-
-Add a section to @var{simple_object}. @var{name} is the name of the
-new section. @var{align} is the required alignment expressed as the
-number of required low-order 0 bits (e.g., 2 for alignment to a 32-bit
-boundary).
-
-The section is created as containing data, readable, not writable, not
-executable, not loaded at runtime. The section is not written to the
-file until @code{simple_object_write_to_file} is called.
-
-On error this returns @code{NULL}, sets @code{*@var{errmsg}} to an
-error message, and sets @code{*@var{err}} to an errno value or
-@code{0} if there is no relevant errno.
-
-@end deftypefn
-
-@c simple-object.txh:170
-@deftypefn Extension {const char *} simple_object_write_to_file @
- (simple_object_write *@var{simple_object}, int @var{descriptor}, int *@var{err})
-
-Write the complete object file to @var{descriptor}, an open file
-descriptor. This writes out all the data accumulated by calls to
-@code{simple_object_write_create_section} and
-@var{simple_object_write_add_data}.
-
-This returns @code{NULL} on success. On error this returns an error
-message and sets @code{*@var{err}} to an errno value or @code{0} if
-there is no relevant errno.
-
-@end deftypefn
-
-@c snprintf.c:28
-@deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, @
- const char *@var{format}, ...)
-
-This function is similar to @code{sprintf}, but it will write to
-@var{buf} at most @code{@var{n}-1} bytes of text, followed by a
-terminating null byte, for a total of @var{n} bytes.
-On error the return value is -1, otherwise it returns the number of
-bytes, not including the terminating null byte, that would have been
-written had @var{n} been sufficiently large, regardless of the actual
-value of @var{n}. Note some pre-C99 system libraries do not implement
-this correctly so users cannot generally rely on the return value if
-the system version of this function is used.
-
-@end deftypefn
-
-@c spaces.c:22
-@deftypefn Extension char* spaces (int @var{count})
-
-Returns a pointer to a memory region filled with the specified
-number of spaces and null terminated. The returned pointer is
-valid until at least the next call.
-
-@end deftypefn
-
-@c splay-tree.c:303
-@deftypefn Supplemental splay_tree splay_tree_new_with_typed_alloc @
-(splay_tree_compare_fn @var{compare_fn}, @
-splay_tree_delete_key_fn @var{delete_key_fn}, @
-splay_tree_delete_value_fn @var{delete_value_fn}, @
-splay_tree_allocate_fn @var{tree_allocate_fn}, @
-splay_tree_allocate_fn @var{node_allocate_fn}, @
-splay_tree_deallocate_fn @var{deallocate_fn}, @
-void * @var{allocate_data})
-
-This function creates a splay tree that uses two different allocators
-@var{tree_allocate_fn} and @var{node_allocate_fn} to use for allocating the
-tree itself and its nodes respectively. This is useful when variables of
-different types need to be allocated with different allocators.
-
-The splay tree will use @var{compare_fn} to compare nodes,
-@var{delete_key_fn} to deallocate keys, and @var{delete_value_fn} to
-deallocate values.
-
-@end deftypefn
-
-@c stpcpy.c:23
-@deftypefn Supplemental char* stpcpy (char *@var{dst}, const char *@var{src})
-
-Copies the string @var{src} into @var{dst}. Returns a pointer to
-@var{dst} + strlen(@var{src}).
-
-@end deftypefn
-
-@c stpncpy.c:23
-@deftypefn Supplemental char* stpncpy (char *@var{dst}, const char *@var{src}, @
- size_t @var{len})
-
-Copies the string @var{src} into @var{dst}, copying exactly @var{len}
-and padding with zeros if necessary. If @var{len} < strlen(@var{src})
-then return @var{dst} + @var{len}, otherwise returns @var{dst} +
-strlen(@var{src}).
-
-@end deftypefn
-
-@c strcasecmp.c:15
-@deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2})
-
-A case-insensitive @code{strcmp}.
-
-@end deftypefn
-
-@c strchr.c:6
-@deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c})
-
-Returns a pointer to the first occurrence of the character @var{c} in
-the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the
-null character, the results are undefined.
-
-@end deftypefn
-
-@c strdup.c:3
-@deftypefn Supplemental char* strdup (const char *@var{s})
-
-Returns a pointer to a copy of @var{s} in memory obtained from
-@code{malloc}, or @code{NULL} if insufficient memory was available.
-
-@end deftypefn
-
-@c strerror.c:670
-@deftypefn Replacement {const char*} strerrno (int @var{errnum})
-
-Given an error number returned from a system call (typically returned
-in @code{errno}), returns a pointer to a string containing the
-symbolic name of that error number, as found in @code{<errno.h>}.
-
-If the supplied error number is within the valid range of indices for
-symbolic names, but no name is available for the particular error
-number, then returns the string @samp{Error @var{num}}, where @var{num}
-is the error number.
-
-If the supplied error number is not within the range of valid
-indices, then returns @code{NULL}.
-
-The contents of the location pointed to are only guaranteed to be
-valid until the next call to @code{strerrno}.
-
-@end deftypefn
-
-@c strerror.c:603
-@deftypefn Supplemental char* strerror (int @var{errnoval})
-
-Maps an @code{errno} number to an error message string, the contents
-of which are implementation defined. On systems which have the
-external variables @code{sys_nerr} and @code{sys_errlist}, these
-strings will be the same as the ones used by @code{perror}.
-
-If the supplied error number is within the valid range of indices for
-the @code{sys_errlist}, but no message is available for the particular
-error number, then returns the string @samp{Error @var{num}}, where
-@var{num} is the error number.
-
-If the supplied error number is not a valid index into
-@code{sys_errlist}, returns @code{NULL}.
-
-The returned string is only guaranteed to be valid only until the
-next call to @code{strerror}.
-
-@end deftypefn
-
-@c strncasecmp.c:15
-@deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2})
-
-A case-insensitive @code{strncmp}.
-
-@end deftypefn
-
-@c strncmp.c:6
-@deftypefn Supplemental int strncmp (const char *@var{s1}, @
- const char *@var{s2}, size_t @var{n})
-
-Compares the first @var{n} bytes of two strings, returning a value as
-@code{strcmp}.
-
-@end deftypefn
-
-@c strndup.c:23
-@deftypefn Extension char* strndup (const char *@var{s}, size_t @var{n})
-
-Returns a pointer to a copy of @var{s} with at most @var{n} characters
-in memory obtained from @code{malloc}, or @code{NULL} if insufficient
-memory was available. The result is always NUL terminated.
-
-@end deftypefn
-
-@c strrchr.c:6
-@deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c})
-
-Returns a pointer to the last occurrence of the character @var{c} in
-the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the
-null character, the results are undefined.
-
-@end deftypefn
-
-@c strsignal.c:383
-@deftypefn Supplemental {const char *} strsignal (int @var{signo})
-
-Maps an signal number to an signal message string, the contents of
-which are implementation defined. On systems which have the external
-variable @code{sys_siglist}, these strings will be the same as the
-ones used by @code{psignal()}.
-
-If the supplied signal number is within the valid range of indices for
-the @code{sys_siglist}, but no message is available for the particular
-signal number, then returns the string @samp{Signal @var{num}}, where
-@var{num} is the signal number.
-
-If the supplied signal number is not a valid index into
-@code{sys_siglist}, returns @code{NULL}.
-
-The returned string is only guaranteed to be valid only until the next
-call to @code{strsignal}.
-
-@end deftypefn
-
-@c strsignal.c:448
-@deftypefn Extension {const char*} strsigno (int @var{signo})
-
-Given an signal number, returns a pointer to a string containing the
-symbolic name of that signal number, as found in @code{<signal.h>}.
-
-If the supplied signal number is within the valid range of indices for
-symbolic names, but no name is available for the particular signal
-number, then returns the string @samp{Signal @var{num}}, where
-@var{num} is the signal number.
-
-If the supplied signal number is not within the range of valid
-indices, then returns @code{NULL}.
-
-The contents of the location pointed to are only guaranteed to be
-valid until the next call to @code{strsigno}.
-
-@end deftypefn
-
-@c strstr.c:6
-@deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub})
-
-This function searches for the substring @var{sub} in the string
-@var{string}, not including the terminating null characters. A pointer
-to the first occurrence of @var{sub} is returned, or @code{NULL} if the
-substring is absent. If @var{sub} points to a string with zero
-length, the function returns @var{string}.
-
-@end deftypefn
-
-@c strtod.c:27
-@deftypefn Supplemental double strtod (const char *@var{string}, @
- char **@var{endptr})
-
-This ISO C function converts the initial portion of @var{string} to a
-@code{double}. If @var{endptr} is not @code{NULL}, a pointer to the
-character after the last character used in the conversion is stored in
-the location referenced by @var{endptr}. If no conversion is
-performed, zero is returned and the value of @var{string} is stored in
-the location referenced by @var{endptr}.
-
-@end deftypefn
-
-@c strerror.c:729
-@deftypefn Extension int strtoerrno (const char *@var{name})
-
-Given the symbolic name of a error number (e.g., @code{EACCES}), map it
-to an errno value. If no translation is found, returns 0.
-
-@end deftypefn
-
-@c strtol.c:33
-@deftypefn Supplemental {long int} strtol (const char *@var{string}, @
- char **@var{endptr}, int @var{base})
-@deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, @
- char **@var{endptr}, int @var{base})
-
-The @code{strtol} function converts the string in @var{string} to a
-long integer value according to the given @var{base}, which must be
-between 2 and 36 inclusive, or be the special value 0. If @var{base}
-is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x}
-to indicate bases 8 and 16, respectively, else default to base 10.
-When the base is 16 (either explicitly or implicitly), a prefix of
-@code{0x} is allowed. The handling of @var{endptr} is as that of
-@code{strtod} above. The @code{strtoul} function is the same, except
-that the converted value is unsigned.
-
-@end deftypefn
-
-@c strsignal.c:502
-@deftypefn Extension int strtosigno (const char *@var{name})
-
-Given the symbolic name of a signal, map it to a signal number. If no
-translation is found, returns 0.
-
-@end deftypefn
-
-@c strverscmp.c:25
-@deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2})
-The @code{strverscmp} function compares the string @var{s1} against
-@var{s2}, considering them as holding indices/version numbers. Return
-value follows the same conventions as found in the @code{strverscmp}
-function. In fact, if @var{s1} and @var{s2} contain no digits,
-@code{strverscmp} behaves like @code{strcmp}.
-
-Basically, we compare strings normally (character by character), until
-we find a digit in each string - then we enter a special comparison
-mode, where each sequence of digits is taken as a whole. If we reach the
-end of these two parts without noticing a difference, we return to the
-standard comparison mode. There are two types of numeric parts:
-"integral" and "fractional" (those begin with a '0'). The types
-of the numeric parts affect the way we sort them:
-
-@itemize @bullet
-@item
-integral/integral: we compare values as you would expect.
-
-@item
-fractional/integral: the fractional part is less than the integral one.
-Again, no surprise.
-
-@item
-fractional/fractional: the things become a bit more complex.
-If the common prefix contains only leading zeroes, the longest part is less
-than the other one; else the comparison behaves normally.
-@end itemize
-
-@smallexample
-strverscmp ("no digit", "no digit")
- @result{} 0 // @r{same behavior as strcmp.}
-strverscmp ("item#99", "item#100")
- @result{} <0 // @r{same prefix, but 99 < 100.}
-strverscmp ("alpha1", "alpha001")
- @result{} >0 // @r{fractional part inferior to integral one.}
-strverscmp ("part1_f012", "part1_f01")
- @result{} >0 // @r{two fractional parts.}
-strverscmp ("foo.009", "foo.0")
- @result{} <0 // @r{idem, but with leading zeroes only.}
-@end smallexample
-
-This function is especially useful when dealing with filename sorting,
-because filenames frequently hold indices/version numbers.
-@end deftypefun
-
-@c tmpnam.c:3
-@deftypefn Supplemental char* tmpnam (char *@var{s})
-
-This function attempts to create a name for a temporary file, which
-will be a valid file name yet not exist when @code{tmpnam} checks for
-it. @var{s} must point to a buffer of at least @code{L_tmpnam} bytes,
-or be @code{NULL}. Use of this function creates a security risk, and it must
-not be used in new projects. Use @code{mkstemp} instead.
-
-@end deftypefn
-
-@c unlink-if-ordinary.c:27
-@deftypefn Supplemental int unlink_if_ordinary (const char*)
-
-Unlinks the named file, unless it is special (e.g. a device file).
-Returns 0 when the file was unlinked, a negative value (and errno set) when
-there was an error deleting the file, and a positive value if no attempt
-was made to unlink the file because it is special.
-
-@end deftypefn
-
-@c fopen_unlocked.c:31
-@deftypefn Extension void unlock_std_streams (void)
-
-If the OS supports it, ensure that the standard I/O streams,
-@code{stdin}, @code{stdout} and @code{stderr} are setup to avoid any
-multi-threaded locking. Otherwise do nothing.
-
-@end deftypefn
-
-@c fopen_unlocked.c:23
-@deftypefn Extension void unlock_stream (FILE * @var{stream})
-
-If the OS supports it, ensure that the supplied stream is setup to
-avoid any multi-threaded locking. Otherwise leave the @code{FILE}
-pointer unchanged. If the @var{stream} is @code{NULL} do nothing.
-
-@end deftypefn
-
-@c vasprintf.c:47
-@deftypefn Extension int vasprintf (char **@var{resptr}, @
- const char *@var{format}, va_list @var{args})
-
-Like @code{vsprintf}, but instead of passing a pointer to a buffer,
-you pass a pointer to a pointer. This function will compute the size
-of the buffer needed, allocate memory with @code{malloc}, and store a
-pointer to the allocated memory in @code{*@var{resptr}}. The value
-returned is the same as @code{vsprintf} would return. If memory could
-not be allocated, minus one is returned and @code{NULL} is stored in
-@code{*@var{resptr}}.
-
-@end deftypefn
-
-@c vfork.c:6
-@deftypefn Supplemental int vfork (void)
-
-Emulates @code{vfork} by calling @code{fork} and returning its value.
-
-@end deftypefn
-
-@c vprintf.c:3
-@deftypefn Supplemental int vprintf (const char *@var{format}, va_list @var{ap})
-@deftypefnx Supplemental int vfprintf (FILE *@var{stream}, @
- const char *@var{format}, va_list @var{ap})
-@deftypefnx Supplemental int vsprintf (char *@var{str}, @
- const char *@var{format}, va_list @var{ap})
-
-These functions are the same as @code{printf}, @code{fprintf}, and
-@code{sprintf}, respectively, except that they are called with a
-@code{va_list} instead of a variable number of arguments. Note that
-they do not call @code{va_end}; this is the application's
-responsibility. In @libib{} they are implemented in terms of the
-nonstandard but common function @code{_doprnt}.
-
-@end deftypefn
-
-@c vsnprintf.c:28
-@deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, @
- const char *@var{format}, va_list @var{ap})
-
-This function is similar to @code{vsprintf}, but it will write to
-@var{buf} at most @code{@var{n}-1} bytes of text, followed by a
-terminating null byte, for a total of @var{n} bytes. On error the
-return value is -1, otherwise it returns the number of characters that
-would have been printed had @var{n} been sufficiently large,
-regardless of the actual value of @var{n}. Note some pre-C99 system
-libraries do not implement this correctly so users cannot generally
-rely on the return value if the system version of this function is
-used.
-
-@end deftypefn
-
-@c waitpid.c:3
-@deftypefn Supplemental int waitpid (int @var{pid}, int *@var{status}, int)
-
-This is a wrapper around the @code{wait} function. Any ``special''
-values of @var{pid} depend on your implementation of @code{wait}, as
-does the return value. The third argument is unused in @libib{}.
-
-@end deftypefn
-
-@c argv.c:306
-@deftypefn Extension int writeargv (const char **@var{argv}, FILE *@var{file})
-
-Write each member of ARGV, handling all necessary quoting, to the file
-named by FILE, separated by whitespace. Return 0 on success, non-zero
-if an error occurred while writing to FILE.
-
-@end deftypefn
-
-@c xatexit.c:11
-@deftypefun int xatexit (void (*@var{fn}) (void))
-
-Behaves as the standard @code{atexit} function, but with no limit on
-the number of registered functions. Returns 0 on success, or @minus{}1 on
-failure. If you use @code{xatexit} to register functions, you must use
-@code{xexit} to terminate your program.
-
-@end deftypefun
-
-@c xmalloc.c:38
-@deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize})
-
-Allocate memory without fail, and set it to zero. This routine functions
-like @code{calloc}, but will behave the same as @code{xmalloc} if memory
-cannot be found.
-
-@end deftypefn
-
-@c xexit.c:22
-@deftypefn Replacement void xexit (int @var{code})
-
-Terminates the program. If any functions have been registered with
-the @code{xatexit} replacement function, they will be called first.
-Termination is handled via the system's normal @code{exit} call.
-
-@end deftypefn
-
-@c xmalloc.c:22
-@deftypefn Replacement void* xmalloc (size_t)
-
-Allocate memory without fail. If @code{malloc} fails, this will print
-a message to @code{stderr} (using the name set by
-@code{xmalloc_set_program_name},
-if any) and then call @code{xexit}. Note that it is therefore safe for
-a program to contain @code{#define malloc xmalloc} in its source.
-
-@end deftypefn
-
-@c xmalloc.c:53
-@deftypefn Replacement void xmalloc_failed (size_t)
-
-This function is not meant to be called by client code, and is listed
-here for completeness only. If any of the allocation routines fail, this
-function will be called to print an error message and terminate execution.
-
-@end deftypefn
-
-@c xmalloc.c:46
-@deftypefn Replacement void xmalloc_set_program_name (const char *@var{name})
-
-You can use this to set the name of the program used by
-@code{xmalloc_failed} when printing a failure message.
-
-@end deftypefn
-
-@c xmemdup.c:7
-@deftypefn Replacement void* xmemdup (void *@var{input}, @
- size_t @var{copy_size}, size_t @var{alloc_size})
-
-Duplicates a region of memory without fail. First, @var{alloc_size} bytes
-are allocated, then @var{copy_size} bytes from @var{input} are copied into
-it, and the new memory is returned. If fewer bytes are copied than were
-allocated, the remaining memory is zeroed.
-
-@end deftypefn
-
-@c xmalloc.c:32
-@deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size})
-Reallocate memory without fail. This routine functions like @code{realloc},
-but will behave the same as @code{xmalloc} if memory cannot be found.
-
-@end deftypefn
-
-@c xstrdup.c:7
-@deftypefn Replacement char* xstrdup (const char *@var{s})
-
-Duplicates a character string without fail, using @code{xmalloc} to
-obtain memory.
-
-@end deftypefn
-
-@c xstrerror.c:7
-@deftypefn Replacement char* xstrerror (int @var{errnum})
-
-Behaves exactly like the standard @code{strerror} function, but
-will never return a @code{NULL} pointer.
-
-@end deftypefn
-
-@c xstrndup.c:23
-@deftypefn Replacement char* xstrndup (const char *@var{s}, size_t @var{n})
-
-Returns a pointer to a copy of @var{s} with at most @var{n} characters
-without fail, using @code{xmalloc} to obtain memory. The result is
-always NUL terminated.
-
-@end deftypefn
-
-
diff --git a/gcc-4.7/libiberty/gather-docs b/gcc-4.7/libiberty/gather-docs
deleted file mode 100644
index 2f1f3b1f6..000000000
--- a/gcc-4.7/libiberty/gather-docs
+++ /dev/null
@@ -1,128 +0,0 @@
-#!/usr/bin/perl
-# -*- perl -*-
-
-# Copyright (C) 2001, 2009, 2011
-# Free Software Foundation
-#
-# This file is part of the libiberty library.
-# Libiberty is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# Libiberty is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with libiberty; see the file COPYING.LIB. If not,
-# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-# Boston, MA 02110-1301, USA.
-#
-# Originally written by DJ Delorie <dj@redhat.com>
-
-
-
-# This program looks for texinfo snippets in source files and other
-# files, and builds per-category files with entries sorted in
-# alphabetical order.
-
-# The syntax it looks for is lines starting with '@def' in *.c and
-# other files (see TEXIFILES in Makefile.in). Entries are terminated
-# at the next @def* (which begins a new entry) or, for C files, a line
-# that begins with '*/' without leading spaces (this assumes that the
-# texinfo snippet is within a C-style /* */ comment).
-
-#
-
-
-
-if ($ARGV[0] eq "-v") {
- $verbose = 1;
- shift;
-}
-
-$srcdir = shift;
-$outfile = shift;
-
-if ($outfile !~ /\S/ || ! -f "$srcdir/Makefile.in" ) {
- print STDERR "Usage: gather-docs [-v] srcdir outfile.txi [files with snippets in them ...]\n";
- exit 1;
-}
-
-$errors = 0;
-
-for $in (@ARGV) {
-
- if (!open(IN, "$srcdir/$in")) {
- print STDERR "Cannot open $srcdir/$in for reading: $!\n";
- $errors ++;
-
- } else {
- $first = 1;
- $pertinent = 0;
- $man_mode = 0;
- $line = 0;
-
- while (<IN>) {
- $line ++;
- $pertinent = 1 if /^\@def[a-z]*[a-wyz] /;
- $pertinent = 0 if /^\*\//;
- next unless $pertinent;
-
- if (/^\@def[a-z]*[a-wyz] /) {
-
- ($name) = m/[^\(]* ([^\( \t\r\n\@]+) *(\(|\@?$)/;
- $name =~ s/[ ]*\@?$//;
- $key = $name;
- $key =~ tr/A-Z/a-z/;
- $key =~ s/[^a-z0-9]+/ /g;
- $name{$key} = $node;
- $lines{$key} = '';
- $src_file{$key} = $in;
- $src_line{$key} = $line;
- print "\nReading $in :" if $verbose && $first;
- $first = 0;
- print " $name" if $verbose;
- $node_lines{$key} .= $_;
-
- } else {
- $node_lines{$key} .= $_;
- }
-
- $pertinent = 0 if /^\@end def/;
- }
- close (IN);
- }
-}
-
-print "\n" if $verbose;
-exit $errors if $errors;
-
-if (!open (OUT, "> $outfile")) {
- print STDERR "Cannot open $outfile for writing: $!\n";
- $errors ++;
- next;
-}
-print "Writing $outfile\n" if $verbose;
-
-print OUT "\@c Automatically generated from *.c and others (the comments before\n";
-print OUT "\@c each entry tell you which file and where in that file). DO NOT EDIT!\n";
-print OUT "\@c Edit the *.c files, configure with --enable-maintainer-mode,\n";
-print OUT "\@c run 'make stamp-functions' and gather-docs will build a new copy.\n\n";
-
-for $key (sort keys %name) {
- print OUT "\@c $src_file{$key}:$src_line{$key}\n";
- print OUT $node_lines{$key};
- print OUT "\n";
-}
-
-if (! print OUT "\n") {
- print STDERR "Disk full writing $srcdir/$cat.texi\n";
- $errors ++;
-}
-
-close (OUT);
-
-exit $errors;
diff --git a/gcc-4.7/libiberty/getcwd.c b/gcc-4.7/libiberty/getcwd.c
deleted file mode 100644
index 28f26eb17..000000000
--- a/gcc-4.7/libiberty/getcwd.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Emulate getcwd using getwd.
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental char* getcwd (char *@var{pathname}, int @var{len})
-
-Copy the absolute pathname for the current working directory into
-@var{pathname}, which is assumed to point to a buffer of at least
-@var{len} bytes, and return a pointer to the buffer. If the current
-directory's path doesn't fit in @var{len} characters, the result is
-@code{NULL} and @code{errno} is set. If @var{pathname} is a null pointer,
-@code{getcwd} will obtain @var{len} bytes of space using
-@code{malloc}.
-
-@end deftypefn
-
-*/
-
-#include "config.h"
-
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#include <errno.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-extern char *getwd ();
-extern int errno;
-
-#ifndef MAXPATHLEN
-#define MAXPATHLEN 1024
-#endif
-
-char *
-getcwd (char *buf, size_t len)
-{
- char ourbuf[MAXPATHLEN];
- char *result;
-
- result = getwd (ourbuf);
- if (result) {
- if (strlen (ourbuf) >= len) {
- errno = ERANGE;
- return 0;
- }
- if (!buf) {
- buf = (char*)malloc(len);
- if (!buf) {
- errno = ENOMEM;
- return 0;
- }
- }
- strcpy (buf, ourbuf);
- }
- return buf;
-}
diff --git a/gcc-4.7/libiberty/getopt.c b/gcc-4.7/libiberty/getopt.c
deleted file mode 100644
index d9c3532ce..000000000
--- a/gcc-4.7/libiberty/getopt.c
+++ /dev/null
@@ -1,1052 +0,0 @@
-/* Getopt for GNU.
- NOTE: getopt is now part of the C library, so if you don't know what
- "Keep this file name-space clean" means, talk to drepper@gnu.org
- before changing it!
-
- Copyright (C) 1987, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995,
- 1996, 1997, 1998, 2005 Free Software Foundation, Inc.
-
- NOTE: This source is derived from an old version taken from the GNU C
- Library (glibc).
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-/* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
- Ditto for AIX 3.2 and <stdlib.h>. */
-#ifndef _NO_PROTO
-# define _NO_PROTO
-#endif
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#if !defined __STDC__ || !__STDC__
-/* This is a separate conditional since some stdc systems
- reject `defined (const)'. */
-# ifndef const
-# define const
-# endif
-#endif
-
-#include "ansidecl.h"
-#include <stdio.h>
-
-/* Comment out all this code if we are using the GNU C Library, and are not
- actually compiling the library itself. This code is part of the GNU C
- Library, but also included in many other GNU distributions. Compiling
- and linking in this code is a waste when using the GNU C library
- (especially if it is a shared library). Rather than having every GNU
- program understand `configure --with-gnu-libc' and omit the object files,
- it is simpler to just do this in the source for each such file. */
-
-#define GETOPT_INTERFACE_VERSION 2
-#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
-# include <gnu-versions.h>
-# if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
-# define ELIDE_CODE
-# endif
-#endif
-
-#ifndef ELIDE_CODE
-
-
-/* This needs to come after some library #include
- to get __GNU_LIBRARY__ defined. */
-#ifdef __GNU_LIBRARY__
-/* Don't include stdlib.h for non-GNU C libraries because some of them
- contain conflicting prototypes for getopt. */
-# include <stdlib.h>
-# include <unistd.h>
-#endif /* GNU C library. */
-
-#ifdef VMS
-# include <unixlib.h>
-# if HAVE_STRING_H - 0
-# include <string.h>
-# endif
-#endif
-
-#ifndef _
-/* This is for other GNU distributions with internationalized messages.
- When compiling libc, the _ macro is predefined. */
-# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
-# include <libintl.h>
-# define _(msgid) gettext (msgid)
-# else
-# define _(msgid) (msgid)
-# endif
-#endif
-
-/* This version of `getopt' appears to the caller like standard Unix `getopt'
- but it behaves differently for the user, since it allows the user
- to intersperse the options with the other arguments.
-
- As `getopt' works, it permutes the elements of ARGV so that,
- when it is done, all the options precede everything else. Thus
- all application programs are extended to handle flexible argument order.
-
- Setting the environment variable POSIXLY_CORRECT disables permutation.
- Then the behavior is completely standard.
-
- GNU application programs can use a third alternative mode in which
- they can distinguish the relative order of options and other arguments. */
-
-#include "getopt.h"
-
-/* For communication from `getopt' to the caller.
- When `getopt' finds an option that takes an argument,
- the argument value is returned here.
- Also, when `ordering' is RETURN_IN_ORDER,
- each non-option ARGV-element is returned here. */
-
-char *optarg = NULL;
-
-/* Index in ARGV of the next element to be scanned.
- This is used for communication to and from the caller
- and for communication between successive calls to `getopt'.
-
- On entry to `getopt', zero means this is the first call; initialize.
-
- When `getopt' returns -1, this is the index of the first of the
- non-option elements that the caller should itself scan.
-
- Otherwise, `optind' communicates from one call to the next
- how much of ARGV has been scanned so far. */
-
-/* 1003.2 says this must be 1 before any call. */
-int optind = 1;
-
-/* Formerly, initialization of getopt depended on optind==0, which
- causes problems with re-calling getopt as programs generally don't
- know that. */
-
-int __getopt_initialized = 0;
-
-/* The next char to be scanned in the option-element
- in which the last option character we returned was found.
- This allows us to pick up the scan where we left off.
-
- If this is zero, or a null string, it means resume the scan
- by advancing to the next ARGV-element. */
-
-static char *nextchar;
-
-/* Callers store zero here to inhibit the error message
- for unrecognized options. */
-
-int opterr = 1;
-
-/* Set to an option character which was unrecognized.
- This must be initialized on some systems to avoid linking in the
- system's own getopt implementation. */
-
-int optopt = '?';
-
-/* Describe how to deal with options that follow non-option ARGV-elements.
-
- If the caller did not specify anything,
- the default is REQUIRE_ORDER if the environment variable
- POSIXLY_CORRECT is defined, PERMUTE otherwise.
-
- REQUIRE_ORDER means don't recognize them as options;
- stop option processing when the first non-option is seen.
- This is what Unix does.
- This mode of operation is selected by either setting the environment
- variable POSIXLY_CORRECT, or using `+' as the first character
- of the list of option characters.
-
- PERMUTE is the default. We permute the contents of ARGV as we scan,
- so that eventually all the non-options are at the end. This allows options
- to be given in any order, even with programs that were not written to
- expect this.
-
- RETURN_IN_ORDER is an option available to programs that were written
- to expect options and other ARGV-elements in any order and that care about
- the ordering of the two. We describe each non-option ARGV-element
- as if it were the argument of an option with character code 1.
- Using `-' as the first character of the list of option characters
- selects this mode of operation.
-
- The special argument `--' forces an end of option-scanning regardless
- of the value of `ordering'. In the case of RETURN_IN_ORDER, only
- `--' can cause `getopt' to return -1 with `optind' != ARGC. */
-
-static enum
-{
- REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER
-} ordering;
-
-/* Value of POSIXLY_CORRECT environment variable. */
-static char *posixly_correct;
-
-#ifdef __GNU_LIBRARY__
-/* We want to avoid inclusion of string.h with non-GNU libraries
- because there are many ways it can cause trouble.
- On some systems, it contains special magic macros that don't work
- in GCC. */
-# include <string.h>
-# define my_index strchr
-#else
-
-# if HAVE_STRING_H
-# include <string.h>
-# else
-# if HAVE_STRINGS_H
-# include <strings.h>
-# endif
-# endif
-
-/* Avoid depending on library functions or files
- whose names are inconsistent. */
-
-#if HAVE_STDLIB_H && HAVE_DECL_GETENV
-# include <stdlib.h>
-#elif !defined(getenv)
-# ifdef __cplusplus
-extern "C" {
-# endif /* __cplusplus */
-extern char *getenv (const char *);
-# ifdef __cplusplus
-}
-# endif /* __cplusplus */
-#endif
-
-static char *
-my_index (const char *str, int chr)
-{
- while (*str)
- {
- if (*str == chr)
- return (char *) str;
- str++;
- }
- return 0;
-}
-
-/* If using GCC, we can safely declare strlen this way.
- If not using GCC, it is ok not to declare it. */
-#ifdef __GNUC__
-/* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h.
- That was relevant to code that was here before. */
-# if (!defined __STDC__ || !__STDC__) && !defined strlen
-/* gcc with -traditional declares the built-in strlen to return int,
- and has done so at least since version 2.4.5. -- rms. */
-extern int strlen (const char *);
-# endif /* not __STDC__ */
-#endif /* __GNUC__ */
-
-#endif /* not __GNU_LIBRARY__ */
-
-/* Handle permutation of arguments. */
-
-/* Describe the part of ARGV that contains non-options that have
- been skipped. `first_nonopt' is the index in ARGV of the first of them;
- `last_nonopt' is the index after the last of them. */
-
-static int first_nonopt;
-static int last_nonopt;
-
-#ifdef _LIBC
-/* Bash 2.0 gives us an environment variable containing flags
- indicating ARGV elements that should not be considered arguments. */
-
-/* Defined in getopt_init.c */
-extern char *__getopt_nonoption_flags;
-
-static int nonoption_flags_max_len;
-static int nonoption_flags_len;
-
-static int original_argc;
-static char *const *original_argv;
-
-/* Make sure the environment variable bash 2.0 puts in the environment
- is valid for the getopt call we must make sure that the ARGV passed
- to getopt is that one passed to the process. */
-static void
-__attribute__ ((unused))
-store_args_and_env (int argc, char *const *argv)
-{
- /* XXX This is no good solution. We should rather copy the args so
- that we can compare them later. But we must not use malloc(3). */
- original_argc = argc;
- original_argv = argv;
-}
-# ifdef text_set_element
-text_set_element (__libc_subinit, store_args_and_env);
-# endif /* text_set_element */
-
-# define SWAP_FLAGS(ch1, ch2) \
- if (nonoption_flags_len > 0) \
- { \
- char __tmp = __getopt_nonoption_flags[ch1]; \
- __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \
- __getopt_nonoption_flags[ch2] = __tmp; \
- }
-#else /* !_LIBC */
-# define SWAP_FLAGS(ch1, ch2)
-#endif /* _LIBC */
-
-/* Exchange two adjacent subsequences of ARGV.
- One subsequence is elements [first_nonopt,last_nonopt)
- which contains all the non-options that have been skipped so far.
- The other is elements [last_nonopt,optind), which contains all
- the options processed since those non-options were skipped.
-
- `first_nonopt' and `last_nonopt' are relocated so that they describe
- the new indices of the non-options in ARGV after they are moved. */
-
-#if defined __STDC__ && __STDC__
-static void exchange (char **);
-#endif
-
-static void
-exchange (char **argv)
-{
- int bottom = first_nonopt;
- int middle = last_nonopt;
- int top = optind;
- char *tem;
-
- /* Exchange the shorter segment with the far end of the longer segment.
- That puts the shorter segment into the right place.
- It leaves the longer segment in the right place overall,
- but it consists of two parts that need to be swapped next. */
-
-#ifdef _LIBC
- /* First make sure the handling of the `__getopt_nonoption_flags'
- string can work normally. Our top argument must be in the range
- of the string. */
- if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len)
- {
- /* We must extend the array. The user plays games with us and
- presents new arguments. */
- char *new_str = (char *) malloc (top + 1);
- if (new_str == NULL)
- nonoption_flags_len = nonoption_flags_max_len = 0;
- else
- {
- memset (mempcpy (new_str, __getopt_nonoption_flags,
- nonoption_flags_max_len),
- '\0', top + 1 - nonoption_flags_max_len);
- nonoption_flags_max_len = top + 1;
- __getopt_nonoption_flags = new_str;
- }
- }
-#endif
-
- while (top > middle && middle > bottom)
- {
- if (top - middle > middle - bottom)
- {
- /* Bottom segment is the short one. */
- int len = middle - bottom;
- register int i;
-
- /* Swap it with the top part of the top segment. */
- for (i = 0; i < len; i++)
- {
- tem = argv[bottom + i];
- argv[bottom + i] = argv[top - (middle - bottom) + i];
- argv[top - (middle - bottom) + i] = tem;
- SWAP_FLAGS (bottom + i, top - (middle - bottom) + i);
- }
- /* Exclude the moved bottom segment from further swapping. */
- top -= len;
- }
- else
- {
- /* Top segment is the short one. */
- int len = top - middle;
- register int i;
-
- /* Swap it with the bottom part of the bottom segment. */
- for (i = 0; i < len; i++)
- {
- tem = argv[bottom + i];
- argv[bottom + i] = argv[middle + i];
- argv[middle + i] = tem;
- SWAP_FLAGS (bottom + i, middle + i);
- }
- /* Exclude the moved top segment from further swapping. */
- bottom += len;
- }
- }
-
- /* Update records for the slots the non-options now occupy. */
-
- first_nonopt += (optind - last_nonopt);
- last_nonopt = optind;
-}
-
-/* Initialize the internal data when the first call is made. */
-
-#if defined __STDC__ && __STDC__
-static const char *_getopt_initialize (int, char *const *, const char *);
-#endif
-static const char *
-_getopt_initialize (int argc ATTRIBUTE_UNUSED,
- char *const *argv ATTRIBUTE_UNUSED,
- const char *optstring)
-{
- /* Start processing options with ARGV-element 1 (since ARGV-element 0
- is the program name); the sequence of previously skipped
- non-option ARGV-elements is empty. */
-
- first_nonopt = last_nonopt = optind;
-
- nextchar = NULL;
-
- posixly_correct = getenv ("POSIXLY_CORRECT");
-
- /* Determine how to handle the ordering of options and nonoptions. */
-
- if (optstring[0] == '-')
- {
- ordering = RETURN_IN_ORDER;
- ++optstring;
- }
- else if (optstring[0] == '+')
- {
- ordering = REQUIRE_ORDER;
- ++optstring;
- }
- else if (posixly_correct != NULL)
- ordering = REQUIRE_ORDER;
- else
- ordering = PERMUTE;
-
-#ifdef _LIBC
- if (posixly_correct == NULL
- && argc == original_argc && argv == original_argv)
- {
- if (nonoption_flags_max_len == 0)
- {
- if (__getopt_nonoption_flags == NULL
- || __getopt_nonoption_flags[0] == '\0')
- nonoption_flags_max_len = -1;
- else
- {
- const char *orig_str = __getopt_nonoption_flags;
- int len = nonoption_flags_max_len = strlen (orig_str);
- if (nonoption_flags_max_len < argc)
- nonoption_flags_max_len = argc;
- __getopt_nonoption_flags =
- (char *) malloc (nonoption_flags_max_len);
- if (__getopt_nonoption_flags == NULL)
- nonoption_flags_max_len = -1;
- else
- memset (mempcpy (__getopt_nonoption_flags, orig_str, len),
- '\0', nonoption_flags_max_len - len);
- }
- }
- nonoption_flags_len = nonoption_flags_max_len;
- }
- else
- nonoption_flags_len = 0;
-#endif
-
- return optstring;
-}
-
-/* Scan elements of ARGV (whose length is ARGC) for option characters
- given in OPTSTRING.
-
- If an element of ARGV starts with '-', and is not exactly "-" or "--",
- then it is an option element. The characters of this element
- (aside from the initial '-') are option characters. If `getopt'
- is called repeatedly, it returns successively each of the option characters
- from each of the option elements.
-
- If `getopt' finds another option character, it returns that character,
- updating `optind' and `nextchar' so that the next call to `getopt' can
- resume the scan with the following option character or ARGV-element.
-
- If there are no more option characters, `getopt' returns -1.
- Then `optind' is the index in ARGV of the first ARGV-element
- that is not an option. (The ARGV-elements have been permuted
- so that those that are not options now come last.)
-
- OPTSTRING is a string containing the legitimate option characters.
- If an option character is seen that is not listed in OPTSTRING,
- return '?' after printing an error message. If you set `opterr' to
- zero, the error message is suppressed but we still return '?'.
-
- If a char in OPTSTRING is followed by a colon, that means it wants an arg,
- so the following text in the same ARGV-element, or the text of the following
- ARGV-element, is returned in `optarg'. Two colons mean an option that
- wants an optional arg; if there is text in the current ARGV-element,
- it is returned in `optarg', otherwise `optarg' is set to zero.
-
- If OPTSTRING starts with `-' or `+', it requests different methods of
- handling the non-option ARGV-elements.
- See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
-
- Long-named options begin with `--' instead of `-'.
- Their names may be abbreviated as long as the abbreviation is unique
- or is an exact match for some defined option. If they have an
- argument, it follows the option name in the same ARGV-element, separated
- from the option name by a `=', or else the in next ARGV-element.
- When `getopt' finds a long-named option, it returns 0 if that option's
- `flag' field is nonzero, the value of the option's `val' field
- if the `flag' field is zero.
-
- The elements of ARGV aren't really const, because we permute them.
- But we pretend they're const in the prototype to be compatible
- with other systems.
-
- LONGOPTS is a vector of `struct option' terminated by an
- element containing a name which is zero.
-
- LONGIND returns the index in LONGOPT of the long-named option found.
- It is only valid when a long-named option has been found by the most
- recent call.
-
- If LONG_ONLY is nonzero, '-' as well as '--' can introduce
- long-named options. */
-
-int
-_getopt_internal (int argc, char *const *argv, const char *optstring,
- const struct option *longopts,
- int *longind, int long_only)
-{
- optarg = NULL;
-
- if (optind == 0 || !__getopt_initialized)
- {
- if (optind == 0)
- optind = 1; /* Don't scan ARGV[0], the program name. */
- optstring = _getopt_initialize (argc, argv, optstring);
- __getopt_initialized = 1;
- }
-
- /* Test whether ARGV[optind] points to a non-option argument.
- Either it does not have option syntax, or there is an environment flag
- from the shell indicating it is not an option. The later information
- is only used when the used in the GNU libc. */
-#ifdef _LIBC
-# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \
- || (optind < nonoption_flags_len \
- && __getopt_nonoption_flags[optind] == '1'))
-#else
-# define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0')
-#endif
-
- if (nextchar == NULL || *nextchar == '\0')
- {
- /* Advance to the next ARGV-element. */
-
- /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been
- moved back by the user (who may also have changed the arguments). */
- if (last_nonopt > optind)
- last_nonopt = optind;
- if (first_nonopt > optind)
- first_nonopt = optind;
-
- if (ordering == PERMUTE)
- {
- /* If we have just processed some options following some non-options,
- exchange them so that the options come first. */
-
- if (first_nonopt != last_nonopt && last_nonopt != optind)
- exchange ((char **) argv);
- else if (last_nonopt != optind)
- first_nonopt = optind;
-
- /* Skip any additional non-options
- and extend the range of non-options previously skipped. */
-
- while (optind < argc && NONOPTION_P)
- optind++;
- last_nonopt = optind;
- }
-
- /* The special ARGV-element `--' means premature end of options.
- Skip it like a null option,
- then exchange with previous non-options as if it were an option,
- then skip everything else like a non-option. */
-
- if (optind != argc && !strcmp (argv[optind], "--"))
- {
- optind++;
-
- if (first_nonopt != last_nonopt && last_nonopt != optind)
- exchange ((char **) argv);
- else if (first_nonopt == last_nonopt)
- first_nonopt = optind;
- last_nonopt = argc;
-
- optind = argc;
- }
-
- /* If we have done all the ARGV-elements, stop the scan
- and back over any non-options that we skipped and permuted. */
-
- if (optind == argc)
- {
- /* Set the next-arg-index to point at the non-options
- that we previously skipped, so the caller will digest them. */
- if (first_nonopt != last_nonopt)
- optind = first_nonopt;
- return -1;
- }
-
- /* If we have come to a non-option and did not permute it,
- either stop the scan or describe it to the caller and pass it by. */
-
- if (NONOPTION_P)
- {
- if (ordering == REQUIRE_ORDER)
- return -1;
- optarg = argv[optind++];
- return 1;
- }
-
- /* We have found another option-ARGV-element.
- Skip the initial punctuation. */
-
- nextchar = (argv[optind] + 1
- + (longopts != NULL && argv[optind][1] == '-'));
- }
-
- /* Decode the current option-ARGV-element. */
-
- /* Check whether the ARGV-element is a long option.
-
- If long_only and the ARGV-element has the form "-f", where f is
- a valid short option, don't consider it an abbreviated form of
- a long option that starts with f. Otherwise there would be no
- way to give the -f short option.
-
- On the other hand, if there's a long option "fubar" and
- the ARGV-element is "-fu", do consider that an abbreviation of
- the long option, just like "--fu", and not "-f" with arg "u".
-
- This distinction seems to be the most useful approach. */
-
- if (longopts != NULL
- && (argv[optind][1] == '-'
- || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1])))))
- {
- char *nameend;
- const struct option *p;
- const struct option *pfound = NULL;
- int exact = 0;
- int ambig = 0;
- int indfound = -1;
- int option_index;
-
- for (nameend = nextchar; *nameend && *nameend != '='; nameend++)
- /* Do nothing. */ ;
-
- /* Test all long options for either exact match
- or abbreviated matches. */
- for (p = longopts, option_index = 0; p->name; p++, option_index++)
- if (!strncmp (p->name, nextchar, nameend - nextchar))
- {
- if ((unsigned int) (nameend - nextchar)
- == (unsigned int) strlen (p->name))
- {
- /* Exact match found. */
- pfound = p;
- indfound = option_index;
- exact = 1;
- break;
- }
- else if (pfound == NULL)
- {
- /* First nonexact match found. */
- pfound = p;
- indfound = option_index;
- }
- else
- /* Second or later nonexact match found. */
- ambig = 1;
- }
-
- if (ambig && !exact)
- {
- if (opterr)
- fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
- argv[0], argv[optind]);
- nextchar += strlen (nextchar);
- optind++;
- optopt = 0;
- return '?';
- }
-
- if (pfound != NULL)
- {
- option_index = indfound;
- optind++;
- if (*nameend)
- {
- /* Don't test has_arg with >, because some C compilers don't
- allow it to be used on enums. */
- if (pfound->has_arg)
- optarg = nameend + 1;
- else
- {
- if (opterr)
- {
- if (argv[optind - 1][1] == '-')
- /* --option */
- fprintf (stderr,
- _("%s: option `--%s' doesn't allow an argument\n"),
- argv[0], pfound->name);
- else
- /* +option or -option */
- fprintf (stderr,
- _("%s: option `%c%s' doesn't allow an argument\n"),
- argv[0], argv[optind - 1][0], pfound->name);
-
- nextchar += strlen (nextchar);
-
- optopt = pfound->val;
- return '?';
- }
- }
- }
- else if (pfound->has_arg == 1)
- {
- if (optind < argc)
- optarg = argv[optind++];
- else
- {
- if (opterr)
- fprintf (stderr,
- _("%s: option `%s' requires an argument\n"),
- argv[0], argv[optind - 1]);
- nextchar += strlen (nextchar);
- optopt = pfound->val;
- return optstring[0] == ':' ? ':' : '?';
- }
- }
- nextchar += strlen (nextchar);
- if (longind != NULL)
- *longind = option_index;
- if (pfound->flag)
- {
- *(pfound->flag) = pfound->val;
- return 0;
- }
- return pfound->val;
- }
-
- /* Can't find it as a long option. If this is not getopt_long_only,
- or the option starts with '--' or is not a valid short
- option, then it's an error.
- Otherwise interpret it as a short option. */
- if (!long_only || argv[optind][1] == '-'
- || my_index (optstring, *nextchar) == NULL)
- {
- if (opterr)
- {
- if (argv[optind][1] == '-')
- /* --option */
- fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
- argv[0], nextchar);
- else
- /* +option or -option */
- fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
- argv[0], argv[optind][0], nextchar);
- }
- nextchar = (char *) "";
- optind++;
- optopt = 0;
- return '?';
- }
- }
-
- /* Look at and handle the next short option-character. */
-
- {
- char c = *nextchar++;
- char *temp = my_index (optstring, c);
-
- /* Increment `optind' when we start to process its last character. */
- if (*nextchar == '\0')
- ++optind;
-
- if (temp == NULL || c == ':')
- {
- if (opterr)
- {
- if (posixly_correct)
- /* 1003.2 specifies the format of this message. */
- fprintf (stderr, _("%s: illegal option -- %c\n"),
- argv[0], c);
- else
- fprintf (stderr, _("%s: invalid option -- %c\n"),
- argv[0], c);
- }
- optopt = c;
- return '?';
- }
- /* Convenience. Treat POSIX -W foo same as long option --foo */
- if (temp[0] == 'W' && temp[1] == ';')
- {
- char *nameend;
- const struct option *p;
- const struct option *pfound = NULL;
- int exact = 0;
- int ambig = 0;
- int indfound = 0;
- int option_index;
-
- /* This is an option that requires an argument. */
- if (*nextchar != '\0')
- {
- optarg = nextchar;
- /* If we end this ARGV-element by taking the rest as an arg,
- we must advance to the next element now. */
- optind++;
- }
- else if (optind == argc)
- {
- if (opterr)
- {
- /* 1003.2 specifies the format of this message. */
- fprintf (stderr, _("%s: option requires an argument -- %c\n"),
- argv[0], c);
- }
- optopt = c;
- if (optstring[0] == ':')
- c = ':';
- else
- c = '?';
- return c;
- }
- else
- /* We already incremented `optind' once;
- increment it again when taking next ARGV-elt as argument. */
- optarg = argv[optind++];
-
- /* optarg is now the argument, see if it's in the
- table of longopts. */
-
- for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++)
- /* Do nothing. */ ;
-
- /* Test all long options for either exact match
- or abbreviated matches. */
- for (p = longopts, option_index = 0; p->name; p++, option_index++)
- if (!strncmp (p->name, nextchar, nameend - nextchar))
- {
- if ((unsigned int) (nameend - nextchar) == strlen (p->name))
- {
- /* Exact match found. */
- pfound = p;
- indfound = option_index;
- exact = 1;
- break;
- }
- else if (pfound == NULL)
- {
- /* First nonexact match found. */
- pfound = p;
- indfound = option_index;
- }
- else
- /* Second or later nonexact match found. */
- ambig = 1;
- }
- if (ambig && !exact)
- {
- if (opterr)
- fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
- argv[0], argv[optind]);
- nextchar += strlen (nextchar);
- optind++;
- return '?';
- }
- if (pfound != NULL)
- {
- option_index = indfound;
- if (*nameend)
- {
- /* Don't test has_arg with >, because some C compilers don't
- allow it to be used on enums. */
- if (pfound->has_arg)
- optarg = nameend + 1;
- else
- {
- if (opterr)
- fprintf (stderr, _("\
-%s: option `-W %s' doesn't allow an argument\n"),
- argv[0], pfound->name);
-
- nextchar += strlen (nextchar);
- return '?';
- }
- }
- else if (pfound->has_arg == 1)
- {
- if (optind < argc)
- optarg = argv[optind++];
- else
- {
- if (opterr)
- fprintf (stderr,
- _("%s: option `%s' requires an argument\n"),
- argv[0], argv[optind - 1]);
- nextchar += strlen (nextchar);
- return optstring[0] == ':' ? ':' : '?';
- }
- }
- nextchar += strlen (nextchar);
- if (longind != NULL)
- *longind = option_index;
- if (pfound->flag)
- {
- *(pfound->flag) = pfound->val;
- return 0;
- }
- return pfound->val;
- }
- nextchar = NULL;
- return 'W'; /* Let the application handle it. */
- }
- if (temp[1] == ':')
- {
- if (temp[2] == ':')
- {
- /* This is an option that accepts an argument optionally. */
- if (*nextchar != '\0')
- {
- optarg = nextchar;
- optind++;
- }
- else
- optarg = NULL;
- nextchar = NULL;
- }
- else
- {
- /* This is an option that requires an argument. */
- if (*nextchar != '\0')
- {
- optarg = nextchar;
- /* If we end this ARGV-element by taking the rest as an arg,
- we must advance to the next element now. */
- optind++;
- }
- else if (optind == argc)
- {
- if (opterr)
- {
- /* 1003.2 specifies the format of this message. */
- fprintf (stderr,
- _("%s: option requires an argument -- %c\n"),
- argv[0], c);
- }
- optopt = c;
- if (optstring[0] == ':')
- c = ':';
- else
- c = '?';
- }
- else
- /* We already incremented `optind' once;
- increment it again when taking next ARGV-elt as argument. */
- optarg = argv[optind++];
- nextchar = NULL;
- }
- }
- return c;
- }
-}
-
-int
-getopt (int argc, char *const *argv, const char *optstring)
-{
- return _getopt_internal (argc, argv, optstring,
- (const struct option *) 0,
- (int *) 0,
- 0);
-}
-
-#endif /* Not ELIDE_CODE. */
-
-#ifdef TEST
-
-/* Compile with -DTEST to make an executable for use in testing
- the above definition of `getopt'. */
-
-int
-main (int argc, char **argv)
-{
- int c;
- int digit_optind = 0;
-
- while (1)
- {
- int this_option_optind = optind ? optind : 1;
-
- c = getopt (argc, argv, "abc:d:0123456789");
- if (c == -1)
- break;
-
- switch (c)
- {
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- if (digit_optind != 0 && digit_optind != this_option_optind)
- printf ("digits occur in two different argv-elements.\n");
- digit_optind = this_option_optind;
- printf ("option %c\n", c);
- break;
-
- case 'a':
- printf ("option a\n");
- break;
-
- case 'b':
- printf ("option b\n");
- break;
-
- case 'c':
- printf ("option c with value `%s'\n", optarg);
- break;
-
- case '?':
- break;
-
- default:
- printf ("?? getopt returned character code 0%o ??\n", c);
- }
- }
-
- if (optind < argc)
- {
- printf ("non-option ARGV-elements: ");
- while (optind < argc)
- printf ("%s ", argv[optind++]);
- printf ("\n");
- }
-
- exit (0);
-}
-
-#endif /* TEST */
diff --git a/gcc-4.7/libiberty/getopt1.c b/gcc-4.7/libiberty/getopt1.c
deleted file mode 100644
index 255b14456..000000000
--- a/gcc-4.7/libiberty/getopt1.c
+++ /dev/null
@@ -1,180 +0,0 @@
-/* getopt_long and getopt_long_only entry points for GNU getopt.
- Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98,2005
- Free Software Foundation, Inc.
-
- NOTE: This source is derived from an old version taken from the GNU C
- Library (glibc).
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#if !defined __STDC__ || !__STDC__
-/* This is a separate conditional since some stdc systems
- reject `defined (const)'. */
-#ifndef const
-#define const
-#endif
-#endif
-
-#include <stdio.h>
-
-#include "getopt.h"
-
-/* Comment out all this code if we are using the GNU C Library, and are not
- actually compiling the library itself. This code is part of the GNU C
- Library, but also included in many other GNU distributions. Compiling
- and linking in this code is a waste when using the GNU C library
- (especially if it is a shared library). Rather than having every GNU
- program understand `configure --with-gnu-libc' and omit the object files,
- it is simpler to just do this in the source for each such file. */
-
-#define GETOPT_INTERFACE_VERSION 2
-#if !defined _LIBC && defined __GLIBC__ && __GLIBC__ >= 2
-#include <gnu-versions.h>
-#if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION
-#define ELIDE_CODE
-#endif
-#endif
-
-#ifndef ELIDE_CODE
-
-
-/* This needs to come after some library #include
- to get __GNU_LIBRARY__ defined. */
-#ifdef __GNU_LIBRARY__
-#include <stdlib.h>
-#endif
-
-#ifndef NULL
-#define NULL 0
-#endif
-
-int
-getopt_long (int argc, char *const *argv, const char *options,
- const struct option *long_options, int *opt_index)
-{
- return _getopt_internal (argc, argv, options, long_options, opt_index, 0);
-}
-
-/* Like getopt_long, but '-' as well as '--' can indicate a long option.
- If an option that starts with '-' (not '--') doesn't match a long option,
- but does match a short option, it is parsed as a short option
- instead. */
-
-int
-getopt_long_only (int argc, char *const *argv, const char *options,
- const struct option *long_options, int *opt_index)
-{
- return _getopt_internal (argc, argv, options, long_options, opt_index, 1);
-}
-
-
-#endif /* Not ELIDE_CODE. */
-
-#ifdef TEST
-
-#include <stdio.h>
-
-int
-main (int argc, char **argv)
-{
- int c;
- int digit_optind = 0;
-
- while (1)
- {
- int this_option_optind = optind ? optind : 1;
- int option_index = 0;
- static struct option long_options[] =
- {
- {"add", 1, 0, 0},
- {"append", 0, 0, 0},
- {"delete", 1, 0, 0},
- {"verbose", 0, 0, 0},
- {"create", 0, 0, 0},
- {"file", 1, 0, 0},
- {0, 0, 0, 0}
- };
-
- c = getopt_long (argc, argv, "abc:d:0123456789",
- long_options, &option_index);
- if (c == -1)
- break;
-
- switch (c)
- {
- case 0:
- printf ("option %s", long_options[option_index].name);
- if (optarg)
- printf (" with arg %s", optarg);
- printf ("\n");
- break;
-
- case '0':
- case '1':
- case '2':
- case '3':
- case '4':
- case '5':
- case '6':
- case '7':
- case '8':
- case '9':
- if (digit_optind != 0 && digit_optind != this_option_optind)
- printf ("digits occur in two different argv-elements.\n");
- digit_optind = this_option_optind;
- printf ("option %c\n", c);
- break;
-
- case 'a':
- printf ("option a\n");
- break;
-
- case 'b':
- printf ("option b\n");
- break;
-
- case 'c':
- printf ("option c with value `%s'\n", optarg);
- break;
-
- case 'd':
- printf ("option d with value `%s'\n", optarg);
- break;
-
- case '?':
- break;
-
- default:
- printf ("?? getopt returned character code 0%o ??\n", c);
- }
- }
-
- if (optind < argc)
- {
- printf ("non-option ARGV-elements: ");
- while (optind < argc)
- printf ("%s ", argv[optind++]);
- printf ("\n");
- }
-
- exit (0);
-}
-
-#endif /* TEST */
diff --git a/gcc-4.7/libiberty/getpagesize.c b/gcc-4.7/libiberty/getpagesize.c
deleted file mode 100644
index 1c3a26304..000000000
--- a/gcc-4.7/libiberty/getpagesize.c
+++ /dev/null
@@ -1,90 +0,0 @@
-/* Emulation of getpagesize() for systems that need it. */
-
-/*
-
-@deftypefn Supplemental int getpagesize (void)
-
-Returns the number of bytes in a page of memory. This is the
-granularity of many of the system memory management routines. No
-guarantee is made as to whether or not it is the same as the basic
-memory management hardware page size.
-
-@end deftypefn
-
-BUGS
-
- Is intended as a reasonable replacement for systems where this
- is not provided as a system call. The value of 4096 may or may
- not be correct for the systems where it is returned as the default
- value.
-
-*/
-
-#ifndef VMS
-
-#include "config.h"
-
-#include <sys/types.h>
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-
-#undef GNU_OUR_PAGESIZE
-#if defined (HAVE_SYSCONF) && defined (HAVE_UNISTD_H)
-#include <unistd.h>
-#ifdef _SC_PAGESIZE
-#define GNU_OUR_PAGESIZE sysconf(_SC_PAGESIZE)
-#endif
-#endif
-
-#ifndef GNU_OUR_PAGESIZE
-# ifdef PAGESIZE
-# define GNU_OUR_PAGESIZE PAGESIZE
-# else /* no PAGESIZE */
-# ifdef EXEC_PAGESIZE
-# define GNU_OUR_PAGESIZE EXEC_PAGESIZE
-# else /* no EXEC_PAGESIZE */
-# ifdef NBPG
-# define GNU_OUR_PAGESIZE (NBPG * CLSIZE)
-# ifndef CLSIZE
-# define CLSIZE 1
-# endif /* CLSIZE */
-# else /* no NBPG */
-# ifdef NBPC
-# define GNU_OUR_PAGESIZE NBPC
-# else /* no NBPC */
-# define GNU_OUR_PAGESIZE 4096 /* Just punt and use reasonable value */
-# endif /* NBPC */
-# endif /* NBPG */
-# endif /* EXEC_PAGESIZE */
-# endif /* PAGESIZE */
-#endif /* GNU_OUR_PAGESIZE */
-
-int
-getpagesize (void)
-{
- return (GNU_OUR_PAGESIZE);
-}
-
-#else /* VMS */
-
-#if 0 /* older distributions of gcc-vms are missing <syidef.h> */
-#include <syidef.h>
-#endif
-#ifndef SYI$_PAGE_SIZE /* VMS V5.4 and earlier didn't have this yet */
-#define SYI$_PAGE_SIZE 4452
-#endif
-extern unsigned long lib$getsyi(const unsigned short *,...);
-
-int getpagesize (void)
-{
- long pagsiz = 0L;
- unsigned short itmcod = SYI$_PAGE_SIZE;
-
- (void) lib$getsyi (&itmcod, (void *) &pagsiz);
- if (pagsiz == 0L)
- pagsiz = 512L; /* VAX default */
- return (int) pagsiz;
-}
-
-#endif /* VMS */
diff --git a/gcc-4.7/libiberty/getpwd.c b/gcc-4.7/libiberty/getpwd.c
deleted file mode 100644
index fa5c132fd..000000000
--- a/gcc-4.7/libiberty/getpwd.c
+++ /dev/null
@@ -1,128 +0,0 @@
-/* getpwd.c - get the working directory */
-
-/*
-
-@deftypefn Supplemental char* getpwd (void)
-
-Returns the current working directory. This implementation caches the
-result on the assumption that the process will not call @code{chdir}
-between calls to @code{getpwd}.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/types.h>
-
-#include <errno.h>
-#ifndef errno
-extern int errno;
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#if HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#if HAVE_LIMITS_H
-#include <limits.h>
-#endif
-
-#include "libiberty.h"
-
-/* Virtually every UN*X system now in common use (except for pre-4.3-tahoe
- BSD systems) now provides getcwd as called for by POSIX. Allow for
- the few exceptions to the general rule here. */
-
-#if !defined(HAVE_GETCWD) && defined(HAVE_GETWD)
-/* Prototype in case the system headers doesn't provide it. */
-extern char *getwd ();
-#define getcwd(buf,len) getwd(buf)
-#endif
-
-#ifdef MAXPATHLEN
-#define GUESSPATHLEN (MAXPATHLEN + 1)
-#else
-#define GUESSPATHLEN 100
-#endif
-
-#if !(defined (VMS) || (defined(_WIN32) && !defined(__CYGWIN__)))
-
-/* Get the working directory. Use the PWD environment variable if it's
- set correctly, since this is faster and gives more uniform answers
- to the user. Yield the working directory if successful; otherwise,
- yield 0 and set errno. */
-
-char *
-getpwd (void)
-{
- static char *pwd;
- static int failure_errno;
-
- char *p = pwd;
- size_t s;
- struct stat dotstat, pwdstat;
-
- if (!p && !(errno = failure_errno))
- {
- if (! ((p = getenv ("PWD")) != 0
- && *p == '/'
- && stat (p, &pwdstat) == 0
- && stat (".", &dotstat) == 0
- && dotstat.st_ino == pwdstat.st_ino
- && dotstat.st_dev == pwdstat.st_dev))
-
- /* The shortcut didn't work. Try the slow, ``sure'' way. */
- for (s = GUESSPATHLEN; !getcwd (p = XNEWVEC (char, s), s); s *= 2)
- {
- int e = errno;
- free (p);
-#ifdef ERANGE
- if (e != ERANGE)
-#endif
- {
- errno = failure_errno = e;
- p = 0;
- break;
- }
- }
-
- /* Cache the result. This assumes that the program does
- not invoke chdir between calls to getpwd. */
- pwd = p;
- }
- return p;
-}
-
-#else /* VMS || _WIN32 && !__CYGWIN__ */
-
-#ifndef MAXPATHLEN
-#define MAXPATHLEN 255
-#endif
-
-char *
-getpwd (void)
-{
- static char *pwd = 0;
-
- if (!pwd)
- pwd = getcwd (XNEWVEC (char, MAXPATHLEN + 1), MAXPATHLEN + 1
-#ifdef VMS
- , 0
-#endif
- );
- return pwd;
-}
-
-#endif /* VMS || _WIN32 && !__CYGWIN__ */
diff --git a/gcc-4.7/libiberty/getruntime.c b/gcc-4.7/libiberty/getruntime.c
deleted file mode 100644
index 82f3d2e41..000000000
--- a/gcc-4.7/libiberty/getruntime.c
+++ /dev/null
@@ -1,116 +0,0 @@
-/* Return time used so far, in microseconds.
- Copyright (C) 1994, 1999, 2002 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-
-#include "ansidecl.h"
-#include "libiberty.h"
-
-/* On some systems (such as WindISS), you must include <sys/types.h>
- to get the definition of "time_t" before you include <time.h>. */
-#include <sys/types.h>
-
-/* There are several ways to get elapsed execution time; unfortunately no
- single way is available for all host systems, nor are there reliable
- ways to find out which way is correct for a given host. */
-
-#ifdef TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# ifdef HAVE_TIME_H
-# include <time.h>
-# endif
-# endif
-#endif
-
-#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H)
-#include <sys/resource.h>
-#endif
-
-#ifdef HAVE_TIMES
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#include <sys/times.h>
-#endif
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-/* This is a fallback; if wrong, it will likely make obviously wrong
- results. */
-
-#ifndef CLOCKS_PER_SEC
-#define CLOCKS_PER_SEC 1
-#endif
-
-#ifdef _SC_CLK_TCK
-#define GNU_HZ sysconf(_SC_CLK_TCK)
-#else
-#ifdef HZ
-#define GNU_HZ HZ
-#else
-#ifdef CLOCKS_PER_SEC
-#define GNU_HZ CLOCKS_PER_SEC
-#endif
-#endif
-#endif
-
-/*
-
-@deftypefn Replacement long get_run_time (void)
-
-Returns the time used so far, in microseconds. If possible, this is
-the time used by this process, else it is the elapsed time since the
-process started.
-
-@end deftypefn
-
-*/
-
-long
-get_run_time (void)
-{
-#if defined (HAVE_GETRUSAGE) && defined (HAVE_SYS_RESOURCE_H)
- struct rusage rusage;
-
- getrusage (0, &rusage);
- return (rusage.ru_utime.tv_sec * 1000000 + rusage.ru_utime.tv_usec
- + rusage.ru_stime.tv_sec * 1000000 + rusage.ru_stime.tv_usec);
-#else /* ! HAVE_GETRUSAGE */
-#ifdef HAVE_TIMES
- struct tms tms;
-
- times (&tms);
- return (tms.tms_utime + tms.tms_stime) * (1000000 / GNU_HZ);
-#else /* ! HAVE_TIMES */
- /* Fall back on clock and hope it's correctly implemented. */
- const long clocks_per_sec = CLOCKS_PER_SEC;
- if (clocks_per_sec <= 1000000)
- return clock () * (1000000 / clocks_per_sec);
- else
- return clock () / clocks_per_sec;
-#endif /* HAVE_TIMES */
-#endif /* HAVE_GETRUSAGE */
-}
diff --git a/gcc-4.7/libiberty/gettimeofday.c b/gcc-4.7/libiberty/gettimeofday.c
deleted file mode 100644
index fca167940..000000000
--- a/gcc-4.7/libiberty/gettimeofday.c
+++ /dev/null
@@ -1,30 +0,0 @@
-#include "config.h"
-#include "libiberty.h"
-#ifdef HAVE_TIME_H
-#include <time.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-
-/*
-
-@deftypefn Supplemental int gettimeofday (struct timeval *@var{tp}, void *@var{tz})
-
-Writes the current time to @var{tp}. This implementation requires
-that @var{tz} be NULL. Returns 0 on success, -1 on failure.
-
-@end deftypefn
-
-*/
-
-int
-gettimeofday (struct timeval *tp, void *tz)
-{
- if (tz)
- abort ();
- tp->tv_usec = 0;
- if (time (&tp->tv_sec) == (time_t) -1)
- return -1;
- return 0;
-}
diff --git a/gcc-4.7/libiberty/hashtab.c b/gcc-4.7/libiberty/hashtab.c
deleted file mode 100644
index dfaec0f31..000000000
--- a/gcc-4.7/libiberty/hashtab.c
+++ /dev/null
@@ -1,990 +0,0 @@
-/* An expandable hash tables datatype.
- Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2009, 2010
- Free Software Foundation, Inc.
- Contributed by Vladimir Makarov (vmakarov@cygnus.com).
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/* This package implements basic hash table functionality. It is possible
- to search for an entry, create an entry and destroy an entry.
-
- Elements in the table are generic pointers.
-
- The size of the table is not fixed; if the occupancy of the table
- grows too high the hash table will be expanded.
-
- The abstract data implementation is based on generalized Algorithm D
- from Knuth's book "The art of computer programming". Hash table is
- expanded by creation of new hash table and transferring elements from
- the old table to the new table. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/types.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_MALLOC_H
-#include <malloc.h>
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#include <stdio.h>
-
-#include "libiberty.h"
-#include "ansidecl.h"
-#include "hashtab.h"
-
-#ifndef CHAR_BIT
-#define CHAR_BIT 8
-#endif
-
-static unsigned int higher_prime_index (unsigned long);
-static hashval_t htab_mod_1 (hashval_t, hashval_t, hashval_t, int);
-static hashval_t htab_mod (hashval_t, htab_t);
-static hashval_t htab_mod_m2 (hashval_t, htab_t);
-static hashval_t hash_pointer (const void *);
-static int eq_pointer (const void *, const void *);
-static int htab_expand (htab_t);
-static PTR *find_empty_slot_for_expand (htab_t, hashval_t);
-
-/* At some point, we could make these be NULL, and modify the
- hash-table routines to handle NULL specially; that would avoid
- function-call overhead for the common case of hashing pointers. */
-htab_hash htab_hash_pointer = hash_pointer;
-htab_eq htab_eq_pointer = eq_pointer;
-
-/* Table of primes and multiplicative inverses.
-
- Note that these are not minimally reduced inverses. Unlike when generating
- code to divide by a constant, we want to be able to use the same algorithm
- all the time. All of these inverses (are implied to) have bit 32 set.
-
- For the record, here's the function that computed the table; it's a
- vastly simplified version of the function of the same name from gcc. */
-
-#if 0
-unsigned int
-ceil_log2 (unsigned int x)
-{
- int i;
- for (i = 31; i >= 0 ; --i)
- if (x > (1u << i))
- return i+1;
- abort ();
-}
-
-unsigned int
-choose_multiplier (unsigned int d, unsigned int *mlp, unsigned char *shiftp)
-{
- unsigned long long mhigh;
- double nx;
- int lgup, post_shift;
- int pow, pow2;
- int n = 32, precision = 32;
-
- lgup = ceil_log2 (d);
- pow = n + lgup;
- pow2 = n + lgup - precision;
-
- nx = ldexp (1.0, pow) + ldexp (1.0, pow2);
- mhigh = nx / d;
-
- *shiftp = lgup - 1;
- *mlp = mhigh;
- return mhigh >> 32;
-}
-#endif
-
-struct prime_ent
-{
- hashval_t prime;
- hashval_t inv;
- hashval_t inv_m2; /* inverse of prime-2 */
- hashval_t shift;
-};
-
-static struct prime_ent const prime_tab[] = {
- { 7, 0x24924925, 0x9999999b, 2 },
- { 13, 0x3b13b13c, 0x745d1747, 3 },
- { 31, 0x08421085, 0x1a7b9612, 4 },
- { 61, 0x0c9714fc, 0x15b1e5f8, 5 },
- { 127, 0x02040811, 0x0624dd30, 6 },
- { 251, 0x05197f7e, 0x073260a5, 7 },
- { 509, 0x01824366, 0x02864fc8, 8 },
- { 1021, 0x00c0906d, 0x014191f7, 9 },
- { 2039, 0x0121456f, 0x0161e69e, 10 },
- { 4093, 0x00300902, 0x00501908, 11 },
- { 8191, 0x00080041, 0x00180241, 12 },
- { 16381, 0x000c0091, 0x00140191, 13 },
- { 32749, 0x002605a5, 0x002a06e6, 14 },
- { 65521, 0x000f00e2, 0x00110122, 15 },
- { 131071, 0x00008001, 0x00018003, 16 },
- { 262139, 0x00014002, 0x0001c004, 17 },
- { 524287, 0x00002001, 0x00006001, 18 },
- { 1048573, 0x00003001, 0x00005001, 19 },
- { 2097143, 0x00004801, 0x00005801, 20 },
- { 4194301, 0x00000c01, 0x00001401, 21 },
- { 8388593, 0x00001e01, 0x00002201, 22 },
- { 16777213, 0x00000301, 0x00000501, 23 },
- { 33554393, 0x00001381, 0x00001481, 24 },
- { 67108859, 0x00000141, 0x000001c1, 25 },
- { 134217689, 0x000004e1, 0x00000521, 26 },
- { 268435399, 0x00000391, 0x000003b1, 27 },
- { 536870909, 0x00000019, 0x00000029, 28 },
- { 1073741789, 0x0000008d, 0x00000095, 29 },
- { 2147483647, 0x00000003, 0x00000007, 30 },
- /* Avoid "decimal constant so large it is unsigned" for 4294967291. */
- { 0xfffffffb, 0x00000006, 0x00000008, 31 }
-};
-
-/* The following function returns an index into the above table of the
- nearest prime number which is greater than N, and near a power of two. */
-
-static unsigned int
-higher_prime_index (unsigned long n)
-{
- unsigned int low = 0;
- unsigned int high = sizeof(prime_tab) / sizeof(prime_tab[0]);
-
- while (low != high)
- {
- unsigned int mid = low + (high - low) / 2;
- if (n > prime_tab[mid].prime)
- low = mid + 1;
- else
- high = mid;
- }
-
- /* If we've run out of primes, abort. */
- if (n > prime_tab[low].prime)
- {
- fprintf (stderr, "Cannot find prime bigger than %lu\n", n);
- abort ();
- }
-
- return low;
-}
-
-/* Returns a hash code for P. */
-
-static hashval_t
-hash_pointer (const PTR p)
-{
- return (hashval_t) ((intptr_t)p >> 3);
-}
-
-/* Returns non-zero if P1 and P2 are equal. */
-
-static int
-eq_pointer (const PTR p1, const PTR p2)
-{
- return p1 == p2;
-}
-
-
-/* The parens around the function names in the next two definitions
- are essential in order to prevent macro expansions of the name.
- The bodies, however, are expanded as expected, so they are not
- recursive definitions. */
-
-/* Return the current size of given hash table. */
-
-#define htab_size(htab) ((htab)->size)
-
-size_t
-(htab_size) (htab_t htab)
-{
- return htab_size (htab);
-}
-
-/* Return the current number of elements in given hash table. */
-
-#define htab_elements(htab) ((htab)->n_elements - (htab)->n_deleted)
-
-size_t
-(htab_elements) (htab_t htab)
-{
- return htab_elements (htab);
-}
-
-/* Return X % Y. */
-
-static inline hashval_t
-htab_mod_1 (hashval_t x, hashval_t y, hashval_t inv, int shift)
-{
- /* The multiplicative inverses computed above are for 32-bit types, and
- requires that we be able to compute a highpart multiply. */
-#ifdef UNSIGNED_64BIT_TYPE
- __extension__ typedef UNSIGNED_64BIT_TYPE ull;
- if (sizeof (hashval_t) * CHAR_BIT <= 32)
- {
- hashval_t t1, t2, t3, t4, q, r;
-
- t1 = ((ull)x * inv) >> 32;
- t2 = x - t1;
- t3 = t2 >> 1;
- t4 = t1 + t3;
- q = t4 >> shift;
- r = x - (q * y);
-
- return r;
- }
-#endif
-
- /* Otherwise just use the native division routines. */
- return x % y;
-}
-
-/* Compute the primary hash for HASH given HTAB's current size. */
-
-static inline hashval_t
-htab_mod (hashval_t hash, htab_t htab)
-{
- const struct prime_ent *p = &prime_tab[htab->size_prime_index];
- return htab_mod_1 (hash, p->prime, p->inv, p->shift);
-}
-
-/* Compute the secondary hash for HASH given HTAB's current size. */
-
-static inline hashval_t
-htab_mod_m2 (hashval_t hash, htab_t htab)
-{
- const struct prime_ent *p = &prime_tab[htab->size_prime_index];
- return 1 + htab_mod_1 (hash, p->prime - 2, p->inv_m2, p->shift);
-}
-
-/* This function creates table with length slightly longer than given
- source length. Created hash table is initiated as empty (all the
- hash table entries are HTAB_EMPTY_ENTRY). The function returns the
- created hash table, or NULL if memory allocation fails. */
-
-htab_t
-htab_create_alloc (size_t size, htab_hash hash_f, htab_eq eq_f,
- htab_del del_f, htab_alloc alloc_f, htab_free free_f)
-{
- return htab_create_typed_alloc (size, hash_f, eq_f, del_f, alloc_f, alloc_f,
- free_f);
-}
-
-/* As above, but uses the variants of ALLOC_F and FREE_F which accept
- an extra argument. */
-
-htab_t
-htab_create_alloc_ex (size_t size, htab_hash hash_f, htab_eq eq_f,
- htab_del del_f, void *alloc_arg,
- htab_alloc_with_arg alloc_f,
- htab_free_with_arg free_f)
-{
- htab_t result;
- unsigned int size_prime_index;
-
- size_prime_index = higher_prime_index (size);
- size = prime_tab[size_prime_index].prime;
-
- result = (htab_t) (*alloc_f) (alloc_arg, 1, sizeof (struct htab));
- if (result == NULL)
- return NULL;
- result->entries = (PTR *) (*alloc_f) (alloc_arg, size, sizeof (PTR));
- if (result->entries == NULL)
- {
- if (free_f != NULL)
- (*free_f) (alloc_arg, result);
- return NULL;
- }
- result->size = size;
- result->size_prime_index = size_prime_index;
- result->hash_f = hash_f;
- result->eq_f = eq_f;
- result->del_f = del_f;
- result->alloc_arg = alloc_arg;
- result->alloc_with_arg_f = alloc_f;
- result->free_with_arg_f = free_f;
- return result;
-}
-
-/*
-
-@deftypefn Supplemental htab_t htab_create_typed_alloc (size_t @var{size}, @
-htab_hash @var{hash_f}, htab_eq @var{eq_f}, htab_del @var{del_f}, @
-htab_alloc @var{alloc_tab_f}, htab_alloc @var{alloc_f}, @
-htab_free @var{free_f})
-
-This function creates a hash table that uses two different allocators
-@var{alloc_tab_f} and @var{alloc_f} to use for allocating the table itself
-and its entries respectively. This is useful when variables of different
-types need to be allocated with different allocators.
-
-The created hash table is slightly larger than @var{size} and it is
-initially empty (all the hash table entries are @code{HTAB_EMPTY_ENTRY}).
-The function returns the created hash table, or @code{NULL} if memory
-allocation fails.
-
-@end deftypefn
-
-*/
-
-htab_t
-htab_create_typed_alloc (size_t size, htab_hash hash_f, htab_eq eq_f,
- htab_del del_f, htab_alloc alloc_tab_f,
- htab_alloc alloc_f, htab_free free_f)
-{
- htab_t result;
- unsigned int size_prime_index;
-
- size_prime_index = higher_prime_index (size);
- size = prime_tab[size_prime_index].prime;
-
- result = (htab_t) (*alloc_tab_f) (1, sizeof (struct htab));
- if (result == NULL)
- return NULL;
- result->entries = (PTR *) (*alloc_f) (size, sizeof (PTR));
- if (result->entries == NULL)
- {
- if (free_f != NULL)
- (*free_f) (result);
- return NULL;
- }
- result->size = size;
- result->size_prime_index = size_prime_index;
- result->hash_f = hash_f;
- result->eq_f = eq_f;
- result->del_f = del_f;
- result->alloc_f = alloc_f;
- result->free_f = free_f;
- return result;
-}
-
-
-/* Update the function pointers and allocation parameter in the htab_t. */
-
-void
-htab_set_functions_ex (htab_t htab, htab_hash hash_f, htab_eq eq_f,
- htab_del del_f, PTR alloc_arg,
- htab_alloc_with_arg alloc_f, htab_free_with_arg free_f)
-{
- htab->hash_f = hash_f;
- htab->eq_f = eq_f;
- htab->del_f = del_f;
- htab->alloc_arg = alloc_arg;
- htab->alloc_with_arg_f = alloc_f;
- htab->free_with_arg_f = free_f;
-}
-
-/* These functions exist solely for backward compatibility. */
-
-#undef htab_create
-htab_t
-htab_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f)
-{
- return htab_create_alloc (size, hash_f, eq_f, del_f, xcalloc, free);
-}
-
-htab_t
-htab_try_create (size_t size, htab_hash hash_f, htab_eq eq_f, htab_del del_f)
-{
- return htab_create_alloc (size, hash_f, eq_f, del_f, calloc, free);
-}
-
-/* This function frees all memory allocated for given hash table.
- Naturally the hash table must already exist. */
-
-void
-htab_delete (htab_t htab)
-{
- size_t size = htab_size (htab);
- PTR *entries = htab->entries;
- int i;
-
- if (htab->del_f)
- for (i = size - 1; i >= 0; i--)
- if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)
- (*htab->del_f) (entries[i]);
-
- if (htab->free_f != NULL)
- {
- (*htab->free_f) (entries);
- (*htab->free_f) (htab);
- }
- else if (htab->free_with_arg_f != NULL)
- {
- (*htab->free_with_arg_f) (htab->alloc_arg, entries);
- (*htab->free_with_arg_f) (htab->alloc_arg, htab);
- }
-}
-
-/* This function clears all entries in the given hash table. */
-
-void
-htab_empty (htab_t htab)
-{
- size_t size = htab_size (htab);
- PTR *entries = htab->entries;
- int i;
-
- if (htab->del_f)
- for (i = size - 1; i >= 0; i--)
- if (entries[i] != HTAB_EMPTY_ENTRY && entries[i] != HTAB_DELETED_ENTRY)
- (*htab->del_f) (entries[i]);
-
- /* Instead of clearing megabyte, downsize the table. */
- if (size > 1024*1024 / sizeof (PTR))
- {
- int nindex = higher_prime_index (1024 / sizeof (PTR));
- int nsize = prime_tab[nindex].prime;
-
- if (htab->free_f != NULL)
- (*htab->free_f) (htab->entries);
- else if (htab->free_with_arg_f != NULL)
- (*htab->free_with_arg_f) (htab->alloc_arg, htab->entries);
- if (htab->alloc_with_arg_f != NULL)
- htab->entries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
- sizeof (PTR *));
- else
- htab->entries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *));
- htab->size = nsize;
- htab->size_prime_index = nindex;
- }
- else
- memset (entries, 0, size * sizeof (PTR));
- htab->n_deleted = 0;
- htab->n_elements = 0;
-}
-
-/* Similar to htab_find_slot, but without several unwanted side effects:
- - Does not call htab->eq_f when it finds an existing entry.
- - Does not change the count of elements/searches/collisions in the
- hash table.
- This function also assumes there are no deleted entries in the table.
- HASH is the hash value for the element to be inserted. */
-
-static PTR *
-find_empty_slot_for_expand (htab_t htab, hashval_t hash)
-{
- hashval_t index = htab_mod (hash, htab);
- size_t size = htab_size (htab);
- PTR *slot = htab->entries + index;
- hashval_t hash2;
-
- if (*slot == HTAB_EMPTY_ENTRY)
- return slot;
- else if (*slot == HTAB_DELETED_ENTRY)
- abort ();
-
- hash2 = htab_mod_m2 (hash, htab);
- for (;;)
- {
- index += hash2;
- if (index >= size)
- index -= size;
-
- slot = htab->entries + index;
- if (*slot == HTAB_EMPTY_ENTRY)
- return slot;
- else if (*slot == HTAB_DELETED_ENTRY)
- abort ();
- }
-}
-
-/* The following function changes size of memory allocated for the
- entries and repeatedly inserts the table elements. The occupancy
- of the table after the call will be about 50%. Naturally the hash
- table must already exist. Remember also that the place of the
- table entries is changed. If memory allocation failures are allowed,
- this function will return zero, indicating that the table could not be
- expanded. If all goes well, it will return a non-zero value. */
-
-static int
-htab_expand (htab_t htab)
-{
- PTR *oentries;
- PTR *olimit;
- PTR *p;
- PTR *nentries;
- size_t nsize, osize, elts;
- unsigned int oindex, nindex;
-
- oentries = htab->entries;
- oindex = htab->size_prime_index;
- osize = htab->size;
- olimit = oentries + osize;
- elts = htab_elements (htab);
-
- /* Resize only when table after removal of unused elements is either
- too full or too empty. */
- if (elts * 2 > osize || (elts * 8 < osize && osize > 32))
- {
- nindex = higher_prime_index (elts * 2);
- nsize = prime_tab[nindex].prime;
- }
- else
- {
- nindex = oindex;
- nsize = osize;
- }
-
- if (htab->alloc_with_arg_f != NULL)
- nentries = (PTR *) (*htab->alloc_with_arg_f) (htab->alloc_arg, nsize,
- sizeof (PTR *));
- else
- nentries = (PTR *) (*htab->alloc_f) (nsize, sizeof (PTR *));
- if (nentries == NULL)
- return 0;
- htab->entries = nentries;
- htab->size = nsize;
- htab->size_prime_index = nindex;
- htab->n_elements -= htab->n_deleted;
- htab->n_deleted = 0;
-
- p = oentries;
- do
- {
- PTR x = *p;
-
- if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)
- {
- PTR *q = find_empty_slot_for_expand (htab, (*htab->hash_f) (x));
-
- *q = x;
- }
-
- p++;
- }
- while (p < olimit);
-
- if (htab->free_f != NULL)
- (*htab->free_f) (oentries);
- else if (htab->free_with_arg_f != NULL)
- (*htab->free_with_arg_f) (htab->alloc_arg, oentries);
- return 1;
-}
-
-/* This function searches for a hash table entry equal to the given
- element. It cannot be used to insert or delete an element. */
-
-PTR
-htab_find_with_hash (htab_t htab, const PTR element, hashval_t hash)
-{
- hashval_t index, hash2;
- size_t size;
- PTR entry;
-
- htab->searches++;
- size = htab_size (htab);
- index = htab_mod (hash, htab);
-
- entry = htab->entries[index];
- if (entry == HTAB_EMPTY_ENTRY
- || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))
- return entry;
-
- hash2 = htab_mod_m2 (hash, htab);
- for (;;)
- {
- htab->collisions++;
- index += hash2;
- if (index >= size)
- index -= size;
-
- entry = htab->entries[index];
- if (entry == HTAB_EMPTY_ENTRY
- || (entry != HTAB_DELETED_ENTRY && (*htab->eq_f) (entry, element)))
- return entry;
- }
-}
-
-/* Like htab_find_slot_with_hash, but compute the hash value from the
- element. */
-
-PTR
-htab_find (htab_t htab, const PTR element)
-{
- return htab_find_with_hash (htab, element, (*htab->hash_f) (element));
-}
-
-/* This function searches for a hash table slot containing an entry
- equal to the given element. To delete an entry, call this with
- insert=NO_INSERT, then call htab_clear_slot on the slot returned
- (possibly after doing some checks). To insert an entry, call this
- with insert=INSERT, then write the value you want into the returned
- slot. When inserting an entry, NULL may be returned if memory
- allocation fails. */
-
-PTR *
-htab_find_slot_with_hash (htab_t htab, const PTR element,
- hashval_t hash, enum insert_option insert)
-{
- PTR *first_deleted_slot;
- hashval_t index, hash2;
- size_t size;
- PTR entry;
-
- size = htab_size (htab);
- if (insert == INSERT && size * 3 <= htab->n_elements * 4)
- {
- if (htab_expand (htab) == 0)
- return NULL;
- size = htab_size (htab);
- }
-
- index = htab_mod (hash, htab);
-
- htab->searches++;
- first_deleted_slot = NULL;
-
- entry = htab->entries[index];
- if (entry == HTAB_EMPTY_ENTRY)
- goto empty_entry;
- else if (entry == HTAB_DELETED_ENTRY)
- first_deleted_slot = &htab->entries[index];
- else if ((*htab->eq_f) (entry, element))
- return &htab->entries[index];
-
- hash2 = htab_mod_m2 (hash, htab);
- for (;;)
- {
- htab->collisions++;
- index += hash2;
- if (index >= size)
- index -= size;
-
- entry = htab->entries[index];
- if (entry == HTAB_EMPTY_ENTRY)
- goto empty_entry;
- else if (entry == HTAB_DELETED_ENTRY)
- {
- if (!first_deleted_slot)
- first_deleted_slot = &htab->entries[index];
- }
- else if ((*htab->eq_f) (entry, element))
- return &htab->entries[index];
- }
-
- empty_entry:
- if (insert == NO_INSERT)
- return NULL;
-
- if (first_deleted_slot)
- {
- htab->n_deleted--;
- *first_deleted_slot = HTAB_EMPTY_ENTRY;
- return first_deleted_slot;
- }
-
- htab->n_elements++;
- return &htab->entries[index];
-}
-
-/* Like htab_find_slot_with_hash, but compute the hash value from the
- element. */
-
-PTR *
-htab_find_slot (htab_t htab, const PTR element, enum insert_option insert)
-{
- return htab_find_slot_with_hash (htab, element, (*htab->hash_f) (element),
- insert);
-}
-
-/* This function deletes an element with the given value from hash
- table (the hash is computed from the element). If there is no matching
- element in the hash table, this function does nothing. */
-
-void
-htab_remove_elt (htab_t htab, PTR element)
-{
- htab_remove_elt_with_hash (htab, element, (*htab->hash_f) (element));
-}
-
-
-/* This function deletes an element with the given value from hash
- table. If there is no matching element in the hash table, this
- function does nothing. */
-
-void
-htab_remove_elt_with_hash (htab_t htab, PTR element, hashval_t hash)
-{
- PTR *slot;
-
- slot = htab_find_slot_with_hash (htab, element, hash, NO_INSERT);
- if (*slot == HTAB_EMPTY_ENTRY)
- return;
-
- if (htab->del_f)
- (*htab->del_f) (*slot);
-
- *slot = HTAB_DELETED_ENTRY;
- htab->n_deleted++;
-}
-
-/* This function clears a specified slot in a hash table. It is
- useful when you've already done the lookup and don't want to do it
- again. */
-
-void
-htab_clear_slot (htab_t htab, PTR *slot)
-{
- if (slot < htab->entries || slot >= htab->entries + htab_size (htab)
- || *slot == HTAB_EMPTY_ENTRY || *slot == HTAB_DELETED_ENTRY)
- abort ();
-
- if (htab->del_f)
- (*htab->del_f) (*slot);
-
- *slot = HTAB_DELETED_ENTRY;
- htab->n_deleted++;
-}
-
-/* This function scans over the entire hash table calling
- CALLBACK for each live entry. If CALLBACK returns false,
- the iteration stops. INFO is passed as CALLBACK's second
- argument. */
-
-void
-htab_traverse_noresize (htab_t htab, htab_trav callback, PTR info)
-{
- PTR *slot;
- PTR *limit;
-
- slot = htab->entries;
- limit = slot + htab_size (htab);
-
- do
- {
- PTR x = *slot;
-
- if (x != HTAB_EMPTY_ENTRY && x != HTAB_DELETED_ENTRY)
- if (!(*callback) (slot, info))
- break;
- }
- while (++slot < limit);
-}
-
-/* Like htab_traverse_noresize, but does resize the table when it is
- too empty to improve effectivity of subsequent calls. */
-
-void
-htab_traverse (htab_t htab, htab_trav callback, PTR info)
-{
- size_t size = htab_size (htab);
- if (htab_elements (htab) * 8 < size && size > 32)
- htab_expand (htab);
-
- htab_traverse_noresize (htab, callback, info);
-}
-
-/* Return the fraction of fixed collisions during all work with given
- hash table. */
-
-double
-htab_collisions (htab_t htab)
-{
- if (htab->searches == 0)
- return 0.0;
-
- return (double) htab->collisions / (double) htab->searches;
-}
-
-/* Hash P as a null-terminated string.
-
- Copied from gcc/hashtable.c. Zack had the following to say with respect
- to applicability, though note that unlike hashtable.c, this hash table
- implementation re-hashes rather than chain buckets.
-
- http://gcc.gnu.org/ml/gcc-patches/2001-08/msg01021.html
- From: Zack Weinberg <zackw@panix.com>
- Date: Fri, 17 Aug 2001 02:15:56 -0400
-
- I got it by extracting all the identifiers from all the source code
- I had lying around in mid-1999, and testing many recurrences of
- the form "H_n = H_{n-1} * K + c_n * L + M" where K, L, M were either
- prime numbers or the appropriate identity. This was the best one.
- I don't remember exactly what constituted "best", except I was
- looking at bucket-length distributions mostly.
-
- So it should be very good at hashing identifiers, but might not be
- as good at arbitrary strings.
-
- I'll add that it thoroughly trounces the hash functions recommended
- for this use at http://burtleburtle.net/bob/hash/index.html, both
- on speed and bucket distribution. I haven't tried it against the
- function they just started using for Perl's hashes. */
-
-hashval_t
-htab_hash_string (const PTR p)
-{
- const unsigned char *str = (const unsigned char *) p;
- hashval_t r = 0;
- unsigned char c;
-
- while ((c = *str++) != 0)
- r = r * 67 + c - 113;
-
- return r;
-}
-
-/* DERIVED FROM:
---------------------------------------------------------------------
-lookup2.c, by Bob Jenkins, December 1996, Public Domain.
-hash(), hash2(), hash3, and mix() are externally useful functions.
-Routines to test the hash are included if SELF_TEST is defined.
-You can use this free for any purpose. It has no warranty.
---------------------------------------------------------------------
-*/
-
-/*
---------------------------------------------------------------------
-mix -- mix 3 32-bit values reversibly.
-For every delta with one or two bit set, and the deltas of all three
- high bits or all three low bits, whether the original value of a,b,c
- is almost all zero or is uniformly distributed,
-* If mix() is run forward or backward, at least 32 bits in a,b,c
- have at least 1/4 probability of changing.
-* If mix() is run forward, every bit of c will change between 1/3 and
- 2/3 of the time. (Well, 22/100 and 78/100 for some 2-bit deltas.)
-mix() was built out of 36 single-cycle latency instructions in a
- structure that could supported 2x parallelism, like so:
- a -= b;
- a -= c; x = (c>>13);
- b -= c; a ^= x;
- b -= a; x = (a<<8);
- c -= a; b ^= x;
- c -= b; x = (b>>13);
- ...
- Unfortunately, superscalar Pentiums and Sparcs can't take advantage
- of that parallelism. They've also turned some of those single-cycle
- latency instructions into multi-cycle latency instructions. Still,
- this is the fastest good hash I could find. There were about 2^^68
- to choose from. I only looked at a billion or so.
---------------------------------------------------------------------
-*/
-/* same, but slower, works on systems that might have 8 byte hashval_t's */
-#define mix(a,b,c) \
-{ \
- a -= b; a -= c; a ^= (c>>13); \
- b -= c; b -= a; b ^= (a<< 8); \
- c -= a; c -= b; c ^= ((b&0xffffffff)>>13); \
- a -= b; a -= c; a ^= ((c&0xffffffff)>>12); \
- b -= c; b -= a; b = (b ^ (a<<16)) & 0xffffffff; \
- c -= a; c -= b; c = (c ^ (b>> 5)) & 0xffffffff; \
- a -= b; a -= c; a = (a ^ (c>> 3)) & 0xffffffff; \
- b -= c; b -= a; b = (b ^ (a<<10)) & 0xffffffff; \
- c -= a; c -= b; c = (c ^ (b>>15)) & 0xffffffff; \
-}
-
-/*
---------------------------------------------------------------------
-hash() -- hash a variable-length key into a 32-bit value
- k : the key (the unaligned variable-length array of bytes)
- len : the length of the key, counting by bytes
- level : can be any 4-byte value
-Returns a 32-bit value. Every bit of the key affects every bit of
-the return value. Every 1-bit and 2-bit delta achieves avalanche.
-About 36+6len instructions.
-
-The best hash table sizes are powers of 2. There is no need to do
-mod a prime (mod is sooo slow!). If you need less than 32 bits,
-use a bitmask. For example, if you need only 10 bits, do
- h = (h & hashmask(10));
-In which case, the hash table should have hashsize(10) elements.
-
-If you are hashing n strings (ub1 **)k, do it like this:
- for (i=0, h=0; i<n; ++i) h = hash( k[i], len[i], h);
-
-By Bob Jenkins, 1996. bob_jenkins@burtleburtle.net. You may use this
-code any way you wish, private, educational, or commercial. It's free.
-
-See http://burtleburtle.net/bob/hash/evahash.html
-Use for hash table lookup, or anything where one collision in 2^32 is
-acceptable. Do NOT use for cryptographic purposes.
---------------------------------------------------------------------
-*/
-
-hashval_t
-iterative_hash (const PTR k_in /* the key */,
- register size_t length /* the length of the key */,
- register hashval_t initval /* the previous hash, or
- an arbitrary value */)
-{
- register const unsigned char *k = (const unsigned char *)k_in;
- register hashval_t a,b,c,len;
-
- /* Set up the internal state */
- len = length;
- a = b = 0x9e3779b9; /* the golden ratio; an arbitrary value */
- c = initval; /* the previous hash value */
-
- /*---------------------------------------- handle most of the key */
-#ifndef WORDS_BIGENDIAN
- /* On a little-endian machine, if the data is 4-byte aligned we can hash
- by word for better speed. This gives nondeterministic results on
- big-endian machines. */
- if (sizeof (hashval_t) == 4 && (((size_t)k)&3) == 0)
- while (len >= 12) /* aligned */
- {
- a += *(hashval_t *)(k+0);
- b += *(hashval_t *)(k+4);
- c += *(hashval_t *)(k+8);
- mix(a,b,c);
- k += 12; len -= 12;
- }
- else /* unaligned */
-#endif
- while (len >= 12)
- {
- a += (k[0] +((hashval_t)k[1]<<8) +((hashval_t)k[2]<<16) +((hashval_t)k[3]<<24));
- b += (k[4] +((hashval_t)k[5]<<8) +((hashval_t)k[6]<<16) +((hashval_t)k[7]<<24));
- c += (k[8] +((hashval_t)k[9]<<8) +((hashval_t)k[10]<<16)+((hashval_t)k[11]<<24));
- mix(a,b,c);
- k += 12; len -= 12;
- }
-
- /*------------------------------------- handle the last 11 bytes */
- c += length;
- switch(len) /* all the case statements fall through */
- {
- case 11: c+=((hashval_t)k[10]<<24);
- case 10: c+=((hashval_t)k[9]<<16);
- case 9 : c+=((hashval_t)k[8]<<8);
- /* the first byte of c is reserved for the length */
- case 8 : b+=((hashval_t)k[7]<<24);
- case 7 : b+=((hashval_t)k[6]<<16);
- case 6 : b+=((hashval_t)k[5]<<8);
- case 5 : b+=k[4];
- case 4 : a+=((hashval_t)k[3]<<24);
- case 3 : a+=((hashval_t)k[2]<<16);
- case 2 : a+=((hashval_t)k[1]<<8);
- case 1 : a+=k[0];
- /* case 0: nothing left to add */
- }
- mix(a,b,c);
- /*-------------------------------------------- report the result */
- return c;
-}
diff --git a/gcc-4.7/libiberty/hex.c b/gcc-4.7/libiberty/hex.c
deleted file mode 100644
index 5eeafdbd1..000000000
--- a/gcc-4.7/libiberty/hex.c
+++ /dev/null
@@ -1,192 +0,0 @@
-/* Hex character manipulation support.
- Copyright (C) 1995, 2001 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include <stdio.h> /* for EOF */
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "libiberty.h"
-#include "safe-ctype.h" /* for HOST_CHARSET_ASCII */
-
-#if EOF != -1
- #error "hex.c requires EOF == -1"
-#endif
-
-/*
-
-@deftypefn Extension void hex_init (void)
-
-Initializes the array mapping the current character set to
-corresponding hex values. This function must be called before any
-call to @code{hex_p} or @code{hex_value}. If you fail to call it, a
-default ASCII-based table will normally be used on ASCII systems.
-
-@end deftypefn
-
-@deftypefn Extension int hex_p (int @var{c})
-
-Evaluates to non-zero if the given character is a valid hex character,
-or zero if it is not. Note that the value you pass will be cast to
-@code{unsigned char} within the macro.
-
-@end deftypefn
-
-@deftypefn Extension {unsigned int} hex_value (int @var{c})
-
-Returns the numeric equivalent of the given character when interpreted
-as a hexadecimal digit. The result is undefined if you pass an
-invalid hex digit. Note that the value you pass will be cast to
-@code{unsigned char} within the macro.
-
-The @code{hex_value} macro returns @code{unsigned int}, rather than
-signed @code{int}, to make it easier to use in parsing addresses from
-hex dump files: a signed @code{int} would be sign-extended when
-converted to a wider unsigned type --- like @code{bfd_vma}, on some
-systems.
-
-@end deftypefn
-
-@undocumented _hex_array_size
-@undocumented _hex_bad
-@undocumented _hex_value
-
-*/
-
-
-/* Are we ASCII? */
-#if HOST_CHARSET == HOST_CHARSET_ASCII
-
-const unsigned char _hex_value[_hex_array_size] =
-{
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* NUL SOH STX ETX */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* EOT ENQ ACK BEL */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* BS HT LF VT */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FF CR SO SI */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DLE DC1 DC2 DC3 */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* DC4 NAK SYN ETB */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* CAN EM SUB ESC */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* FS GS RS US */
-
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* SP ! " # */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* $ % & ' */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* ( ) * + */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* , - . / */
- 0, 1, 2, 3, /* 0 1 2 3 */
- 4, 5, 6, 7, /* 4 5 6 7 */
- 8, 9, _hex_bad, _hex_bad, /* 8 9 : ; */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* < = > ? */
-
- _hex_bad, 10, 11, 12, /* @ A B C */
- 13, 14, 15, _hex_bad, /* D E F G */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* H I J K */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* L M N O */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* P Q R S */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* T U V W */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* X Y Z [ */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* \ ] ^ _ */
-
- _hex_bad, 10, 11, 12, /* ` a b c */
- 13, 14, 15, _hex_bad, /* d e f g */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* h i j k */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* l m n o */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* p q r s */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* t u v w */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* x y z { */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad, /* | } ~ DEL */
-
- /* The high half of unsigned char, all values are _hex_bad. */
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
-
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
-
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
-
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
- _hex_bad, _hex_bad, _hex_bad, _hex_bad,
-};
-#define HEX_TABLE_INITIALIZED
-
-#else
-
-unsigned char _hex_value[_hex_array_size];
-
-#endif /* not ASCII */
-
-void
-hex_init (void)
-{
-#ifndef HEX_TABLE_INITIALIZED
- int i;
-
- for (i=0; i<_hex_array_size; i++)
- {
- switch (i)
- {
- case '0': _hex_value[i] = 0; break;
- case '1': _hex_value[i] = 1; break;
- case '2': _hex_value[i] = 2; break;
- case '3': _hex_value[i] = 3; break;
- case '4': _hex_value[i] = 4; break;
- case '5': _hex_value[i] = 5; break;
- case '6': _hex_value[i] = 6; break;
- case '7': _hex_value[i] = 7; break;
- case '8': _hex_value[i] = 8; break;
- case '9': _hex_value[i] = 9; break;
-
- case 'a': case 'A': _hex_value[i] = 10; break;
- case 'b': case 'B': _hex_value[i] = 11; break;
- case 'c': case 'C': _hex_value[i] = 12; break;
- case 'd': case 'D': _hex_value[i] = 13; break;
- case 'e': case 'E': _hex_value[i] = 14; break;
- case 'f': case 'F': _hex_value[i] = 15; break;
-
- default:
- _hex_value[i] = _hex_bad;
- break;
- }
- }
-#endif
-}
diff --git a/gcc-4.7/libiberty/index.c b/gcc-4.7/libiberty/index.c
deleted file mode 100644
index acd0a45fc..000000000
--- a/gcc-4.7/libiberty/index.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Stub implementation of (obsolete) index(). */
-
-/*
-
-@deftypefn Supplemental char* index (char *@var{s}, int @var{c})
-
-Returns a pointer to the first occurrence of the character @var{c} in
-the string @var{s}, or @code{NULL} if not found. The use of @code{index} is
-deprecated in new programs in favor of @code{strchr}.
-
-@end deftypefn
-
-*/
-
-extern char * strchr(const char *, int);
-
-char *
-index (const char *s, int c)
-{
- return strchr (s, c);
-}
diff --git a/gcc-4.7/libiberty/insque.c b/gcc-4.7/libiberty/insque.c
deleted file mode 100644
index fd02357bb..000000000
--- a/gcc-4.7/libiberty/insque.c
+++ /dev/null
@@ -1,51 +0,0 @@
-/* insque(3C) routines
- This file is in the public domain. */
-
-/*
-
-@deftypefn Supplemental void insque (struct qelem *@var{elem}, @
- struct qelem *@var{pred})
-@deftypefnx Supplemental void remque (struct qelem *@var{elem})
-
-Routines to manipulate queues built from doubly linked lists. The
-@code{insque} routine inserts @var{elem} in the queue immediately
-after @var{pred}. The @code{remque} routine removes @var{elem} from
-its containing queue. These routines expect to be passed pointers to
-structures which have as their first members a forward pointer and a
-back pointer, like this prototype (although no prototype is provided):
-
-@example
-struct qelem @{
- struct qelem *q_forw;
- struct qelem *q_back;
- char q_data[];
-@};
-@end example
-
-@end deftypefn
-
-*/
-
-
-struct qelem {
- struct qelem *q_forw;
- struct qelem *q_back;
-};
-
-
-void
-insque (struct qelem *elem, struct qelem *pred)
-{
- elem -> q_forw = pred -> q_forw;
- pred -> q_forw -> q_back = elem;
- elem -> q_back = pred;
- pred -> q_forw = elem;
-}
-
-
-void
-remque (struct qelem *elem)
-{
- elem -> q_forw -> q_back = elem -> q_back;
- elem -> q_back -> q_forw = elem -> q_forw;
-}
diff --git a/gcc-4.7/libiberty/lbasename.c b/gcc-4.7/libiberty/lbasename.c
deleted file mode 100644
index 87c50faad..000000000
--- a/gcc-4.7/libiberty/lbasename.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Libiberty basename. Like basename, but is not overridden by the
- system C library.
- Copyright (C) 2001, 2002, 2010 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Replacement {const char*} lbasename (const char *@var{name})
-
-Given a pointer to a string containing a typical pathname
-(@samp{/usr/src/cmd/ls/ls.c} for example), returns a pointer to the
-last component of the pathname (@samp{ls.c} in this case). The
-returned pointer is guaranteed to lie within the original
-string. This latter fact is not true of many vendor C
-libraries, which return special strings or modify the passed
-strings for particular input.
-
-In particular, the empty string returns the same empty string,
-and a path ending in @code{/} returns the empty string after it.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-#include "safe-ctype.h"
-#include "filenames.h"
-
-const char *
-unix_lbasename (const char *name)
-{
- const char *base;
-
- for (base = name; *name; name++)
- if (IS_UNIX_DIR_SEPARATOR (*name))
- base = name + 1;
-
- return base;
-}
-
-const char *
-dos_lbasename (const char *name)
-{
- const char *base;
-
- /* Skip over a possible disk name. */
- if (ISALPHA (name[0]) && name[1] == ':')
- name += 2;
-
- for (base = name; *name; name++)
- if (IS_DOS_DIR_SEPARATOR (*name))
- base = name + 1;
-
- return base;
-}
-
-const char *
-lbasename (const char *name)
-{
-#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
- return dos_lbasename (name);
-#else
- return unix_lbasename (name);
-#endif
-}
diff --git a/gcc-4.7/libiberty/libiberty.texi b/gcc-4.7/libiberty/libiberty.texi
deleted file mode 100644
index 74f70d2bd..000000000
--- a/gcc-4.7/libiberty/libiberty.texi
+++ /dev/null
@@ -1,318 +0,0 @@
-\input texinfo @c -*-texinfo-*-
-@c %**start of header
-@setfilename libiberty.info
-@settitle @sc{gnu} libiberty
-@c %**end of header
-
-@syncodeindex fn cp
-@syncodeindex vr cp
-@syncodeindex pg cp
-
-@finalout
-@c %**end of header
-
-@dircategory GNU libraries
-@direntry
-* Libiberty: (libiberty). Library of utility functions which
- are missing or broken on some systems.
-@end direntry
-
-@macro libib
-@code{libiberty}
-@end macro
-
-@ifinfo
-This manual describes the GNU @libib library of utility subroutines.
-
-Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-2009, 2010 Free Software Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, with no Front-Cover Texts, and with no
- Back-Cover Texts. A copy of the license is included in the
- section entitled ``GNU Free Documentation License''.
-
-@ignore
-Permission is granted to process this file through TeX and print the
-results, provided the printed document carries a copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-@end ifinfo
-
-
-@titlepage
-@title @sc{gnu} libiberty
-@author Phil Edwards et al.
-@page
-
-
-@vskip 0pt plus 1filll
-Copyright @copyright{} 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008,
-2009, 2010 Free Software Foundation, Inc.
-
- Permission is granted to copy, distribute and/or modify this document
- under the terms of the GNU Free Documentation License, Version 1.3
- or any later version published by the Free Software Foundation;
- with no Invariant Sections, with no Front-Cover Texts, and with no
- Back-Cover Texts. A copy of the license is included in the
- section entitled ``GNU Free Documentation License''.
-
-@end titlepage
-@contents
-@page
-
-@ifnottex
-@node Top,Using,,
-@top Introduction
-
-The @libib{} library is a collection of subroutines used by various
-GNU programs. It is available under the Library General Public
-License; for more information, see @ref{Library Copying}.
-
-@end ifnottex
-
-@menu
-* Using:: How to use libiberty in your code.
-
-* Overview:: Overview of available function groups.
-
-* Functions:: Available functions, macros, and global variables.
-
-* Obstacks:: Object Stacks.
-
-* Licenses:: The various licenses under which libiberty sources are
- distributed.
-
-* Index:: Index of functions and categories.
-@end menu
-
-@node Using
-@chapter Using
-@cindex using libiberty
-@cindex libiberty usage
-@cindex how to use
-
-@c THIS SECTION IS CRAP AND NEEDS REWRITING BADLY.
-
-To date, @libib{} is generally not installed on its own. It has evolved
-over years but does not have its own version number nor release schedule.
-
-Possibly the easiest way to use @libib{} in your projects is to drop the
-@libib{} code into your project's sources, and to build the library along
-with your own sources; the library would then be linked in at the end. This
-prevents any possible version mismatches with other copies of libiberty
-elsewhere on the system.
-
-Passing @option{--enable-install-libiberty} to the @command{configure}
-script when building @libib{} causes the header files and archive library
-to be installed when @kbd{make install} is run. This option also takes
-an (optional) argument to specify the installation location, in the same
-manner as @option{--prefix}.
-
-For your own projects, an approach which offers stability and flexibility
-is to include @libib{} with your code, but allow the end user to optionally
-choose to use a previously-installed version instead. In this way the
-user may choose (for example) to install @libib{} as part of GCC, and use
-that version for all software built with that compiler. (This approach
-has proven useful with software using the GNU @code{readline} library.)
-
-Making use of @libib{} code usually requires that you include one or more
-header files from the @libib{} distribution. (They will be named as
-necessary in the function descriptions.) At link time, you will need to
-add @option{-liberty} to your link command invocation.
-
-
-@node Overview
-@chapter Overview
-
-Functions contained in @libib{} can be divided into three general categories.
-
-
-@menu
-* Supplemental Functions:: Providing functions which don't exist
- on older operating systems.
-
-* Replacement Functions:: These functions are sometimes buggy or
- unpredictable on some operating systems.
-
-* Extensions:: Functions which provide useful extensions
- or safety wrappers around existing code.
-@end menu
-
-@node Supplemental Functions
-@section Supplemental Functions
-@cindex supplemental functions
-@cindex functions, supplemental
-@cindex functions, missing
-
-Certain operating systems do not provide functions which have since
-become standardized, or at least common. For example, the Single
-Unix Specification Version 2 requires that the @code{basename}
-function be provided, but an OS which predates that specification
-might not have this function. This should not prevent well-written
-code from running on such a system.
-
-Similarly, some functions exist only among a particular ``flavor''
-or ``family'' of operating systems. As an example, the @code{bzero}
-function is often not present on systems outside the BSD-derived
-family of systems.
-
-Many such functions are provided in @libib{}. They are quickly
-listed here with little description, as systems which lack them
-become less and less common. Each function @var{foo} is implemented
-in @file{@var{foo}.c} but not declared in any @libib{} header file; more
-comments and caveats for each function's implementation are often
-available in the source file. Generally, the function can simply
-be declared as @code{extern}.
-
-
-
-@node Replacement Functions
-@section Replacement Functions
-@cindex replacement functions
-@cindex functions, replacement
-
-Some functions have extremely limited implementations on different
-platforms. Other functions are tedious to use correctly; for example,
-proper use of @code{malloc} calls for the return value to be checked and
-appropriate action taken if memory has been exhausted. A group of
-``replacement functions'' is available in @libib{} to address these issues
-for some of the most commonly used subroutines.
-
-All of these functions are declared in the @file{libiberty.h} header
-file. Many of the implementations will use preprocessor macros set by
-GNU Autoconf, if you decide to make use of that program. Some of these
-functions may call one another.
-
-
-@menu
-* Memory Allocation:: Testing and handling failed memory
- requests automatically.
-* Exit Handlers:: Calling routines on program exit.
-* Error Reporting:: Mapping errno and signal numbers to
- more useful string formats.
-@end menu
-
-@node Memory Allocation
-@subsection Memory Allocation
-@cindex memory allocation
-
-The functions beginning with the letter @samp{x} are wrappers around
-standard functions; the functions provided by the system environment
-are called and their results checked before the results are passed back
-to client code. If the standard functions fail, these wrappers will
-terminate the program. Thus, these versions can be used with impunity.
-
-
-@node Exit Handlers
-@subsection Exit Handlers
-@cindex exit handlers
-
-The existence and implementation of the @code{atexit} routine varies
-amongst the flavors of Unix. @libib{} provides an unvarying dependable
-implementation via @code{xatexit} and @code{xexit}.
-
-
-@node Error Reporting
-@subsection Error Reporting
-@cindex error reporting
-
-These are a set of routines to facilitate programming with the system
-@code{errno} interface. The @libib{} source file @file{strerror.c}
-contains a good deal of documentation for these functions.
-
-@c signal stuff
-
-
-@node Extensions
-@section Extensions
-@cindex extensions
-@cindex functions, extension
-
-@libib{} includes additional functionality above and beyond standard
-functions, which has proven generically useful in GNU programs, such as
-obstacks and regex. These functions are often copied from other
-projects as they gain popularity, and are included here to provide a
-central location from which to use, maintain, and distribute them.
-
-@menu
-* Obstacks:: Stacks of arbitrary objects.
-@end menu
-
-@c This is generated from the glibc manual using a make-obstacks-texi.sh
-@c script of Phil's. Hope it's accurate.
-@include obstacks.texi
-
-@node Functions
-@chapter Function, Variable, and Macro Listing.
-@include functions.texi
-
-@node Licenses
-@appendix Licenses
-
-@menu
-
-* Library Copying:: The GNU Library General Public License
-* BSD:: Regents of the University of California
-
-@end menu
-
-@c This takes care of Library Copying. It is the copying-lib.texi from the
-@c GNU web site, with its @node line altered to make makeinfo shut up.
-@include copying-lib.texi
-
-@page
-@node BSD
-@appendixsec BSD
-
-Copyright @copyright{} 1990 Regents of the University of California.
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions
-are met:
-
-@enumerate
-
-@item
-Redistributions of source code must retain the above copyright
-notice, this list of conditions and the following disclaimer.
-
-@item
-Redistributions in binary form must reproduce the above copyright
-notice, this list of conditions and the following disclaimer in the
-documentation and/or other materials provided with the distribution.
-
-@item
-[rescinded 22 July 1999]
-
-@item
-Neither the name of the University nor the names of its contributors
-may be used to endorse or promote products derived from this software
-without specific prior written permission.
-
-@end enumerate
-
-THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-SUCH DAMAGE.
-
-@node Index
-@unnumbered Index
-
-@printindex cp
-
-@bye
-
diff --git a/gcc-4.7/libiberty/lrealpath.c b/gcc-4.7/libiberty/lrealpath.c
deleted file mode 100644
index b27c8de99..000000000
--- a/gcc-4.7/libiberty/lrealpath.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/* Libiberty realpath. Like realpath, but more consistent behavior.
- Based on gdb_realpath from GDB.
-
- Copyright 2003 Free Software Foundation, Inc.
-
- This file is part of the libiberty library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Replacement {const char*} lrealpath (const char *@var{name})
-
-Given a pointer to a string containing a pathname, returns a canonical
-version of the filename. Symlinks will be resolved, and ``.'' and ``..''
-components will be simplified. The returned value will be allocated using
-@code{malloc}, or @code{NULL} will be returned on a memory allocation error.
-
-@end deftypefn
-
-*/
-
-#include "config.h"
-#include "ansidecl.h"
-#include "libiberty.h"
-
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-/* On GNU libc systems the declaration is only visible with _GNU_SOURCE. */
-#if defined(HAVE_CANONICALIZE_FILE_NAME) \
- && defined(NEED_DECLARATION_CANONICALIZE_FILE_NAME)
-extern char *canonicalize_file_name (const char *);
-#endif
-
-#if defined(HAVE_REALPATH)
-# if defined (PATH_MAX)
-# define REALPATH_LIMIT PATH_MAX
-# else
-# if defined (MAXPATHLEN)
-# define REALPATH_LIMIT MAXPATHLEN
-# endif
-# endif
-#else
- /* cygwin has realpath, so it won't get here. */
-# if defined (_WIN32)
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h> /* for GetFullPathName */
-# endif
-#endif
-
-char *
-lrealpath (const char *filename)
-{
- /* Method 1: The system has a compile time upper bound on a filename
- path. Use that and realpath() to canonicalize the name. This is
- the most common case. Note that, if there isn't a compile time
- upper bound, you want to avoid realpath() at all costs. */
-#if defined(REALPATH_LIMIT)
- {
- char buf[REALPATH_LIMIT];
- const char *rp = realpath (filename, buf);
- if (rp == NULL)
- rp = filename;
- return strdup (rp);
- }
-#endif /* REALPATH_LIMIT */
-
- /* Method 2: The host system (i.e., GNU) has the function
- canonicalize_file_name() which malloc's a chunk of memory and
- returns that, use that. */
-#if defined(HAVE_CANONICALIZE_FILE_NAME)
- {
- char *rp = canonicalize_file_name (filename);
- if (rp == NULL)
- return strdup (filename);
- else
- return rp;
- }
-#endif
-
- /* Method 3: Now we're getting desperate! The system doesn't have a
- compile time buffer size and no alternative function. Query the
- OS, using pathconf(), for the buffer limit. Care is needed
- though, some systems do not limit PATH_MAX (return -1 for
- pathconf()) making it impossible to pass a correctly sized buffer
- to realpath() (it could always overflow). On those systems, we
- skip this. */
-#if defined (HAVE_REALPATH) && defined (HAVE_UNISTD_H)
- {
- /* Find out the max path size. */
- long path_max = pathconf ("/", _PC_PATH_MAX);
- if (path_max > 0)
- {
- /* PATH_MAX is bounded. */
- char *buf, *rp, *ret;
- buf = (char *) malloc (path_max);
- if (buf == NULL)
- return NULL;
- rp = realpath (filename, buf);
- ret = strdup (rp ? rp : filename);
- free (buf);
- return ret;
- }
- }
-#endif
-
- /* The MS Windows method. If we don't have realpath, we assume we
- don't have symlinks and just canonicalize to a Windows absolute
- path. GetFullPath converts ../ and ./ in relative paths to
- absolute paths, filling in current drive if one is not given
- or using the current directory of a specified drive (eg, "E:foo").
- It also converts all forward slashes to back slashes. */
-#if defined (_WIN32)
- {
- char buf[MAX_PATH];
- char* basename;
- DWORD len = GetFullPathName (filename, MAX_PATH, buf, &basename);
- if (len == 0 || len > MAX_PATH - 1)
- return strdup (filename);
- else
- {
- /* The file system is case-preserving but case-insensitive,
- Canonicalize to lowercase, using the codepage associated
- with the process locale. */
- CharLowerBuff (buf, len);
- return strdup (buf);
- }
- }
-#endif
-
- /* This system is a lost cause, just duplicate the filename. */
- return strdup (filename);
-}
diff --git a/gcc-4.7/libiberty/maint-tool b/gcc-4.7/libiberty/maint-tool
deleted file mode 100644
index 36b92034f..000000000
--- a/gcc-4.7/libiberty/maint-tool
+++ /dev/null
@@ -1,296 +0,0 @@
-#!/usr/bin/perl
-# -*- perl -*-
-
-# Copyright (C) 2001, 2007, 2010
-# Free Software Foundation
-#
-# This file is part of the libiberty library.
-# Libiberty is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# Libiberty is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with libiberty; see the file COPYING.LIB. If not,
-# write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-# Boston, MA 02110-1301, USA.
-#
-# Originally written by DJ Delorie <dj@redhat.com>
-
-
-# This is a trivial script which checks the lists of C and O files in
-# the Makefile for consistency.
-
-$mode = shift;
-$srcdir = ".";
-
-if ($mode eq "-s") {
- $srcdir = shift;
- $mode = shift;
-}
-
-&missing() if $mode eq "missing";
-&undoc() if $mode eq "undoc";
-&deps() if $mode eq "deps";
-
-exit 0;
-
-format STDOUT =
-^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~
-$out
- ^<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~~
-$out
-.
-
-######################################################################
-
-sub missing {
-
- opendir(S, $srcdir);
- while ($f = readdir S) {
- $have{$f} = 1;
- }
- closedir(S);
- opendir(S, ".");
- while ($f = readdir S) {
- $have{$f} = 1;
- }
- closedir(S);
-
- for $a (@ARGV) {
- $listed{$a} = 1;
- $have{$a} = 0;
- }
-
- for $f (sort keys %have) {
- next unless $have{$f};
- if ($f =~ /\.c$/) {
- print "S $f\n";
- }
- }
- for $f (sort keys %listed) {
- if ($f =~ /(.*)\.c$/) {
- $base = $1;
- if (! $listed{"./$base.o"}) {
- print "O $f\n";
- }
- }
- }
-}
-
-######################################################################
-
-sub undoc {
-
- opendir(S, $srcdir);
- while ($file = readdir S) {
- if ($file =~ /\.texi$/) {
- open(T, "$srcdir/$file");
- while (<T>) {
- if (/^\@deftype[^\(]* ([^\s\(]+) *\(/) {
- $documented{$1} = 1;
- }
- }
- close(T);
- }
- if ($file =~ /\.c$/) {
- open(C, "$srcdir/$file");
- while (<C>) {
- if (/\@undocumented (\S+)/) {
- $documented{$1} = 1;
- }
- if (/^static /) {
- if (! /[\(;]/) {
- s/[\r\n]+$/ /;
- $_ .= <C>;
- }
- while ($_ =~ /\([^\)]*$/) {
- s/[\r\n]+$/ /;
- $_ .= <C>;
- }
- }
- s/ VPARAMS([ \(])/$1/;
- s/PREFIX\(([^\)]*)\)/byte_$1/;
- if (/^static [^\(]* ([^\s\(]+) *\(.*\)$/) {
- $documented{$1} = 1;
- }
- }
- }
- }
- closedir(D);
-
- # $out = join(' ', sort keys %documented);
- # write;
- # print "\n";
-
- system "etags $srcdir/*.c $srcdir/../include/*.h";
- open(TAGS, "TAGS");
- while (<TAGS>) {
- s/[\r\n]+$//;
- if (/^\014$/) {
- $filename = <TAGS>;
- $filename =~ s/[\r\n]+$//;
- $filename =~ s/,\d+$//;
- $filename =~ s@.*[/\\]@@;
- next;
- }
- if ($filename =~ /\.c$/ ) {
- next unless /^[_a-zA-Z]/;
- } else {
- next unless /^\# *define/;
- s/\# *define *//;
- }
-
- s/ VPARAMS//;
- s/ *\177.*//;
- s/,$//;
- s/DEFUN\(//;
- s/\(//;
-
- next if /^static /;
- next if /\s/;
- next if /^_/;
- next if $documented{$_};
- next if /_H_?$/;
-
- if ($seen_in{$_} ne $filename) {
- $saw{$_} ++;
- }
- $seen_in{$_} = $filename;
- }
-
- for $k (keys %saw) {
- delete $saw{$k} if $saw{$k} > 1;
- }
-
- for $k (sort keys %saw) {
- $fromfile{$seen_in{$k}} .= " " if $fromfile{$seen_in{$k}};
- $fromfile{$seen_in{$k}} .= $k;
- }
-
- for $f (sort keys %fromfile) {
- $out = "$f: $fromfile{$f}";
- write;
- }
-}
-
-######################################################################
-
-sub deps_for {
- my($f) = @_;
- my(%d);
- open(F, $f);
- %d = ();
- while (<F>) {
- if (/^#\s*include\s+["<](.*)[">]/) {
- $d{$1} = 1;
- }
- }
- close(F);
- return keys %d;
-}
-
-sub canonicalize {
- my ($p) = @_;
- 0 while $p =~ s@/\./@/@g;
- 0 while $p =~ s@^\./@@g;
- 0 while $p =~ s@/[^/]+/\.\./@/@g;
- return $p;
-}
-
-sub locals_first {
- my ($a,$b) = @_;
- return -1 if $a eq "config.h";
- return 1 if $b eq "config.h";
- return $a cmp $b;
-}
-
-sub deps {
-
- $crule = "\tif [ x\"\$(PICFLAG)\" != x ]; then \\\n";
- $crule .= "\t \$(COMPILE.c) \$(PICFLAG) \$< -o pic/\$@; \\\n";
- $crule .= "\telse true; fi\n";
- $crule .= "\t\$(COMPILE.c) \$< \$(OUTPUT_OPTION)\n";
- $crule .= "\n";
-
- $incdir = shift @ARGV;
-
- opendir(INC, $incdir);
- while ($f = readdir INC) {
- next unless $f =~ /\.h$/;
- $mine{$f} = "\$(INCDIR)/$f";
- $deps{$f} = join(' ', &deps_for("$incdir/$f"));
- }
- $mine{'config.h'} = "config.h";
-
- opendir(INC, $srcdir);
- while ($f = readdir INC) {
- next unless $f =~ /\.h$/;
- $mine{$f} = "\$(srcdir)/$f";
- $deps{$f} = join(' ', &deps_for("$srcdir/$f"));
- }
- $mine{'config.h'} = "config.h";
-
- open(IN, "$srcdir/Makefile.in");
- open(OUT, ">$srcdir/Makefile.tmp");
- while (<IN>) {
- last if /remainder of this file/;
- print OUT;
- }
- print OUT "# The dependencies in the remainder of this file are automatically\n";
- print OUT "# generated by \"make maint-deps\". Manual edits will be lost.\n\n";
-
- opendir(S, $srcdir);
- for $f (sort readdir S) {
- if ($f =~ /\.c$/) {
-
- %scanned = ();
- @pending = &deps_for("$srcdir/$f");
- while (@pending) {
- @tmp = @pending;
- @pending = ();
- for $p (@tmp) {
- next unless $mine{$p};
- if (!$scanned{$p}) {
- push(@pending, split(' ', $deps{$p}));
- $scanned{$p} = 1;
- }
- }
- }
- @deps = sort { &locals_first($a,$b) } keys %scanned;
- $obj = $f;
- $obj =~ s/\.c$/.\$(objext)/;
- $obj = "./$obj:";
- if ($#deps >= 0) {
- print OUT "$obj \$(srcdir)/$f";
- $len = length("$obj $f");
- for $dt (@deps) {
- $d = $mine{$dt};
- if ($len + length($d) > 70) {
- printf OUT " \\\n\t$d";
- $len = 8 + length($d);
- } else {
- print OUT " $d";
- $len += length($d) + 1;
- }
- }
- print OUT "\n";
- } else {
- print OUT "$obj \$(srcdir)/$f\n";
- }
- $c = $crule;
- $c =~ s@\$\<@\$\(srcdir\)\/$f@g;
- print OUT $c;
- }
- }
- closedir(S);
- close(IN);
- close(OUT);
-
- rename("$srcdir/Makefile.tmp", "$srcdir/Makefile.in");
-}
diff --git a/gcc-4.7/libiberty/make-relative-prefix.c b/gcc-4.7/libiberty/make-relative-prefix.c
deleted file mode 100644
index fe639d18b..000000000
--- a/gcc-4.7/libiberty/make-relative-prefix.c
+++ /dev/null
@@ -1,427 +0,0 @@
-/* Relative (relocatable) prefix support.
- Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000, 2001, 2002, 2006, 2012 Free Software Foundation, Inc.
-
-This file is part of libiberty.
-
-GCC is free software; you can redistribute it and/or modify it under
-the terms of the GNU General Public License as published by the Free
-Software Foundation; either version 2, or (at your option) any later
-version.
-
-GCC is distributed in the hope that it will be useful, but WITHOUT ANY
-WARRANTY; without even the implied warranty of MERCHANTABILITY or
-FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-for more details.
-
-You should have received a copy of the GNU General Public License
-along with GCC; see the file COPYING. If not, write to the Free
-Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
-02110-1301, USA. */
-
-/*
-
-@deftypefn Extension {const char*} make_relative_prefix (const char *@var{progname}, @
- const char *@var{bin_prefix}, const char *@var{prefix})
-
-Given three paths @var{progname}, @var{bin_prefix}, @var{prefix},
-return the path that is in the same position relative to
-@var{progname}'s directory as @var{prefix} is relative to
-@var{bin_prefix}. That is, a string starting with the directory
-portion of @var{progname}, followed by a relative pathname of the
-difference between @var{bin_prefix} and @var{prefix}.
-
-If @var{progname} does not contain any directory separators,
-@code{make_relative_prefix} will search @env{PATH} to find a program
-named @var{progname}. Also, if @var{progname} is a symbolic link,
-the symbolic link will be resolved.
-
-For example, if @var{bin_prefix} is @code{/alpha/beta/gamma/gcc/delta},
-@var{prefix} is @code{/alpha/beta/gamma/omega/}, and @var{progname} is
-@code{/red/green/blue/gcc}, then this function will return
-@code{/red/green/blue/../../omega/}.
-
-The return value is normally allocated via @code{malloc}. If no
-relative prefix can be found, return @code{NULL}.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-
-#include <string.h>
-
-#include "ansidecl.h"
-#include "libiberty.h"
-
-#ifndef R_OK
-#define R_OK 4
-#define W_OK 2
-#define X_OK 1
-#endif
-
-#ifndef DIR_SEPARATOR
-# define DIR_SEPARATOR '/'
-#endif
-
-#if defined (_WIN32) || defined (__MSDOS__) \
- || defined (__DJGPP__) || defined (__OS2__)
-# define HAVE_DOS_BASED_FILE_SYSTEM
-# define HAVE_HOST_EXECUTABLE_SUFFIX
-# define HOST_EXECUTABLE_SUFFIX ".exe"
-# ifndef DIR_SEPARATOR_2
-# define DIR_SEPARATOR_2 '\\'
-# endif
-# define PATH_SEPARATOR ';'
-#else
-# define PATH_SEPARATOR ':'
-#endif
-
-#ifndef DIR_SEPARATOR_2
-# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
-#else
-# define IS_DIR_SEPARATOR(ch) \
- (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
-#endif
-
-#define DIR_UP ".."
-
-static char *save_string (const char *, int);
-static char **split_directories (const char *, int *);
-static void free_split_directories (char **);
-
-static char *
-save_string (const char *s, int len)
-{
- char *result = (char *) malloc (len + 1);
-
- memcpy (result, s, len);
- result[len] = 0;
- return result;
-}
-
-/* Split a filename into component directories. */
-
-static char **
-split_directories (const char *name, int *ptr_num_dirs)
-{
- int num_dirs = 0;
- char **dirs;
- const char *p, *q;
- int ch;
-
- /* Count the number of directories. Special case MSDOS disk names as part
- of the initial directory. */
- p = name;
-#ifdef HAVE_DOS_BASED_FILE_SYSTEM
- if (name[1] == ':' && IS_DIR_SEPARATOR (name[2]))
- {
- p += 3;
- num_dirs++;
- }
-#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
-
- while ((ch = *p++) != '\0')
- {
- if (IS_DIR_SEPARATOR (ch))
- {
- num_dirs++;
- while (IS_DIR_SEPARATOR (*p))
- p++;
- }
- }
-
- dirs = (char **) malloc (sizeof (char *) * (num_dirs + 2));
- if (dirs == NULL)
- return NULL;
-
- /* Now copy the directory parts. */
- num_dirs = 0;
- p = name;
-#ifdef HAVE_DOS_BASED_FILE_SYSTEM
- if (name[1] == ':' && IS_DIR_SEPARATOR (name[2]))
- {
- dirs[num_dirs++] = save_string (p, 3);
- if (dirs[num_dirs - 1] == NULL)
- {
- free (dirs);
- return NULL;
- }
- p += 3;
- }
-#endif /* HAVE_DOS_BASED_FILE_SYSTEM */
-
- q = p;
- while ((ch = *p++) != '\0')
- {
- if (IS_DIR_SEPARATOR (ch))
- {
- while (IS_DIR_SEPARATOR (*p))
- p++;
-
- dirs[num_dirs++] = save_string (q, p - q);
- if (dirs[num_dirs - 1] == NULL)
- {
- dirs[num_dirs] = NULL;
- free_split_directories (dirs);
- return NULL;
- }
- q = p;
- }
- }
-
- if (p - 1 - q > 0)
- dirs[num_dirs++] = save_string (q, p - 1 - q);
- dirs[num_dirs] = NULL;
-
- if (dirs[num_dirs - 1] == NULL)
- {
- free_split_directories (dirs);
- return NULL;
- }
-
- if (ptr_num_dirs)
- *ptr_num_dirs = num_dirs;
- return dirs;
-}
-
-/* Release storage held by split directories. */
-
-static void
-free_split_directories (char **dirs)
-{
- int i = 0;
-
- if (dirs != NULL)
- {
- while (dirs[i] != NULL)
- free (dirs[i++]);
-
- free ((char *) dirs);
- }
-}
-
-/* Given three strings PROGNAME, BIN_PREFIX, PREFIX, return a string that gets
- to PREFIX starting with the directory portion of PROGNAME and a relative
- pathname of the difference between BIN_PREFIX and PREFIX.
-
- For example, if BIN_PREFIX is /alpha/beta/gamma/gcc/delta, PREFIX is
- /alpha/beta/gamma/omega/, and PROGNAME is /red/green/blue/gcc, then this
- function will return /red/green/blue/../../omega/.
-
- If no relative prefix can be found, return NULL. */
-
-static char *
-make_relative_prefix_1 (const char *progname, const char *bin_prefix,
- const char *prefix, const int resolve_links)
-{
- char **prog_dirs = NULL, **bin_dirs = NULL, **prefix_dirs = NULL;
- int prog_num, bin_num, prefix_num;
- int i, n, common;
- int needed_len;
- char *ret = NULL, *ptr, *full_progname;
-
- if (progname == NULL || bin_prefix == NULL || prefix == NULL)
- return NULL;
-
- /* If there is no full pathname, try to find the program by checking in each
- of the directories specified in the PATH environment variable. */
- if (lbasename (progname) == progname)
- {
- char *temp;
-
- temp = getenv ("PATH");
- if (temp)
- {
- char *startp, *endp, *nstore;
- size_t prefixlen = strlen (temp) + 1;
- size_t len;
- if (prefixlen < 2)
- prefixlen = 2;
-
- len = prefixlen + strlen (progname) + 1;
-#ifdef HAVE_HOST_EXECUTABLE_SUFFIX
- len += strlen (HOST_EXECUTABLE_SUFFIX);
-#endif
- nstore = (char *) alloca (len);
-
- startp = endp = temp;
- while (1)
- {
- if (*endp == PATH_SEPARATOR || *endp == 0)
- {
- if (endp == startp)
- {
- nstore[0] = '.';
- nstore[1] = DIR_SEPARATOR;
- nstore[2] = '\0';
- }
- else
- {
- memcpy (nstore, startp, endp - startp);
- if (! IS_DIR_SEPARATOR (endp[-1]))
- {
- nstore[endp - startp] = DIR_SEPARATOR;
- nstore[endp - startp + 1] = 0;
- }
- else
- nstore[endp - startp] = 0;
- }
- strcat (nstore, progname);
- if (! access (nstore, X_OK)
-#ifdef HAVE_HOST_EXECUTABLE_SUFFIX
- || ! access (strcat (nstore, HOST_EXECUTABLE_SUFFIX), X_OK)
-#endif
- )
- {
-#if defined (HAVE_SYS_STAT_H) && defined (S_ISREG)
- struct stat st;
- if (stat (nstore, &st) >= 0 && S_ISREG (st.st_mode))
-#endif
- {
- progname = nstore;
- break;
- }
- }
-
- if (*endp == 0)
- break;
- endp = startp = endp + 1;
- }
- else
- endp++;
- }
- }
- }
-
- if (resolve_links)
- full_progname = lrealpath (progname);
- else
- full_progname = strdup (progname);
- if (full_progname == NULL)
- return NULL;
-
- prog_dirs = split_directories (full_progname, &prog_num);
- free (full_progname);
- if (prog_dirs == NULL)
- return NULL;
-
- bin_dirs = split_directories (bin_prefix, &bin_num);
- if (bin_dirs == NULL)
- goto bailout;
-
- /* Remove the program name from comparison of directory names. */
- prog_num--;
-
- /* If we are still installed in the standard location, we don't need to
- specify relative directories. Also, if argv[0] still doesn't contain
- any directory specifiers after the search above, then there is not much
- we can do. */
- if (prog_num == bin_num)
- {
- for (i = 0; i < bin_num; i++)
- {
- if (strcmp (prog_dirs[i], bin_dirs[i]) != 0)
- break;
- }
-
- if (prog_num <= 0 || i == bin_num)
- goto bailout;
- }
-
- prefix_dirs = split_directories (prefix, &prefix_num);
- if (prefix_dirs == NULL)
- goto bailout;
-
- /* Find how many directories are in common between bin_prefix & prefix. */
- n = (prefix_num < bin_num) ? prefix_num : bin_num;
- for (common = 0; common < n; common++)
- {
- if (strcmp (bin_dirs[common], prefix_dirs[common]) != 0)
- break;
- }
-
- /* If there are no common directories, there can be no relative prefix. */
- if (common == 0)
- goto bailout;
-
- /* Two passes: first figure out the size of the result string, and
- then construct it. */
- needed_len = 0;
- for (i = 0; i < prog_num; i++)
- needed_len += strlen (prog_dirs[i]);
- needed_len += sizeof (DIR_UP) * (bin_num - common);
- for (i = common; i < prefix_num; i++)
- needed_len += strlen (prefix_dirs[i]);
- needed_len += 1; /* Trailing NUL. */
-
- ret = (char *) malloc (needed_len);
- if (ret == NULL)
- goto bailout;
-
- /* Build up the pathnames in argv[0]. */
- *ret = '\0';
- for (i = 0; i < prog_num; i++)
- strcat (ret, prog_dirs[i]);
-
- /* Now build up the ..'s. */
- ptr = ret + strlen(ret);
- for (i = common; i < bin_num; i++)
- {
- strcpy (ptr, DIR_UP);
- ptr += sizeof (DIR_UP) - 1;
- *(ptr++) = DIR_SEPARATOR;
- }
- *ptr = '\0';
-
- /* Put in directories to move over to prefix. */
- for (i = common; i < prefix_num; i++)
- strcat (ret, prefix_dirs[i]);
-
- bailout:
- free_split_directories (prog_dirs);
- free_split_directories (bin_dirs);
- free_split_directories (prefix_dirs);
-
- return ret;
-}
-
-
-/* Do the full job, including symlink resolution.
- This path will find files installed in the same place as the
- program even when a soft link has been made to the program
- from somwhere else. */
-
-char *
-make_relative_prefix (const char *progname, const char *bin_prefix,
- const char *prefix)
-{
- return make_relative_prefix_1 (progname, bin_prefix, prefix, 1);
-}
-
-/* Make the relative pathname without attempting to resolve any links.
- '..' etc may also be left in the pathname.
- This will find the files the user meant the program to find if the
- installation is patched together with soft links. */
-
-char *
-make_relative_prefix_ignore_links (const char *progname,
- const char *bin_prefix,
- const char *prefix)
-{
- return make_relative_prefix_1 (progname, bin_prefix, prefix, 0);
-}
-
diff --git a/gcc-4.7/libiberty/make-temp-file.c b/gcc-4.7/libiberty/make-temp-file.c
deleted file mode 100644
index 7b74f8179..000000000
--- a/gcc-4.7/libiberty/make-temp-file.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/* Utility to pick a temporary filename prefix.
- Copyright (C) 1996, 1997, 1998, 2001, 2009, 2010
- Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <stdio.h> /* May get P_tmpdir. */
-#include <sys/types.h>
-#include <errno.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_SYS_FILE_H
-#include <sys/file.h> /* May get R_OK, etc. on some systems. */
-#endif
-#if defined(_WIN32) && !defined(__CYGWIN__)
-#include <windows.h>
-#endif
-
-#ifndef R_OK
-#define R_OK 4
-#define W_OK 2
-#define X_OK 1
-#endif
-
-#include "libiberty.h"
-extern int mkstemps (char *, int);
-
-/* '/' works just fine on MS-DOS based systems. */
-#ifndef DIR_SEPARATOR
-#define DIR_SEPARATOR '/'
-#endif
-
-/* Name of temporary file.
- mktemp requires 6 trailing X's. */
-#define TEMP_FILE "ccXXXXXX"
-#define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1)
-
-#if !defined(_WIN32) || defined(__CYGWIN__)
-
-/* Subroutine of choose_tmpdir.
- If BASE is non-NULL, return it.
- Otherwise it checks if DIR is a usable directory.
- If success, DIR is returned.
- Otherwise NULL is returned. */
-
-static inline const char *try_dir (const char *, const char *);
-
-static inline const char *
-try_dir (const char *dir, const char *base)
-{
- if (base != 0)
- return base;
- if (dir != 0
- && access (dir, R_OK | W_OK | X_OK) == 0)
- return dir;
- return 0;
-}
-
-static const char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 };
-static const char usrtmp[] =
-{ DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 };
-static const char vartmp[] =
-{ DIR_SEPARATOR, 'v', 'a', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 };
-
-#endif
-
-static char *memoized_tmpdir;
-
-/*
-
-@deftypefn Replacement char* choose_tmpdir ()
-
-Returns a pointer to a directory path suitable for creating temporary
-files in.
-
-@end deftypefn
-
-*/
-
-char *
-choose_tmpdir (void)
-{
- if (!memoized_tmpdir)
- {
-#if !defined(_WIN32) || defined(__CYGWIN__)
- const char *base = 0;
- char *tmpdir;
- unsigned int len;
-
-#ifdef VMS
- /* Try VMS standard temp logical. */
- base = try_dir ("/sys$scratch", base);
-#else
- base = try_dir (getenv ("TMPDIR"), base);
- base = try_dir (getenv ("TMP"), base);
- base = try_dir (getenv ("TEMP"), base);
-#endif
-
-#ifdef P_tmpdir
- /* We really want a directory name here as if concatenated with say \dir
- we do not end up with a double \\ which defines an UNC path. */
- if (strcmp (P_tmpdir, "\\") == 0)
- base = try_dir ("\\.", base);
- else
- base = try_dir (P_tmpdir, base);
-#endif
-
- /* Try /var/tmp, /usr/tmp, then /tmp. */
- base = try_dir (vartmp, base);
- base = try_dir (usrtmp, base);
- base = try_dir (tmp, base);
-
- /* If all else fails, use the current directory! */
- if (base == 0)
- base = ".";
- /* Append DIR_SEPARATOR to the directory we've chosen
- and return it. */
- len = strlen (base);
- tmpdir = XNEWVEC (char, len + 2);
- strcpy (tmpdir, base);
- tmpdir[len] = DIR_SEPARATOR;
- tmpdir[len+1] = '\0';
- memoized_tmpdir = tmpdir;
-#else /* defined(_WIN32) && !defined(__CYGWIN__) */
- DWORD len;
-
- /* Figure out how much space we need. */
- len = GetTempPath(0, NULL);
- if (len)
- {
- memoized_tmpdir = XNEWVEC (char, len);
- if (!GetTempPath(len, memoized_tmpdir))
- {
- XDELETEVEC (memoized_tmpdir);
- memoized_tmpdir = NULL;
- }
- }
- if (!memoized_tmpdir)
- /* If all else fails, use the current directory. */
- memoized_tmpdir = xstrdup (".\\");
-#endif /* defined(_WIN32) && !defined(__CYGWIN__) */
- }
-
- return memoized_tmpdir;
-}
-
-/*
-
-@deftypefn Replacement char* make_temp_file (const char *@var{suffix})
-
-Return a temporary file name (as a string) or @code{NULL} if unable to
-create one. @var{suffix} is a suffix to append to the file name. The
-string is @code{malloc}ed, and the temporary file has been created.
-
-@end deftypefn
-
-*/
-
-char *
-make_temp_file (const char *suffix)
-{
- const char *base = choose_tmpdir ();
- char *temp_filename;
- int base_len, suffix_len;
- int fd;
-
- if (suffix == 0)
- suffix = "";
-
- base_len = strlen (base);
- suffix_len = strlen (suffix);
-
- temp_filename = XNEWVEC (char, base_len
- + TEMP_FILE_LEN
- + suffix_len + 1);
- strcpy (temp_filename, base);
- strcpy (temp_filename + base_len, TEMP_FILE);
- strcpy (temp_filename + base_len + TEMP_FILE_LEN, suffix);
-
- fd = mkstemps (temp_filename, suffix_len);
- /* Mkstemps failed. It may be EPERM, ENOSPC etc. */
- if (fd == -1)
- {
- fprintf (stderr, "Cannot create temporary file in %s: %s\n",
- base, strerror (errno));
- abort ();
- }
- /* We abort on failed close out of sheer paranoia. */
- if (close (fd))
- abort ();
- return temp_filename;
-}
diff --git a/gcc-4.7/libiberty/makefile.vms b/gcc-4.7/libiberty/makefile.vms
deleted file mode 100644
index 606adac09..000000000
--- a/gcc-4.7/libiberty/makefile.vms
+++ /dev/null
@@ -1,35 +0,0 @@
-#
-# Makefile for libiberty under openVMS
-#
-# For use with gnu-make for vms
-#
-# Created by Klaus K"ampf, kkaempf@progis.de
-#
-#
-
-OBJS=getopt.obj,obstack.obj,xexit.obj,xmalloc.obj,hex.obj,\
- getopt1.obj,cplus-dem.obj,cp-demangle.obj,cp-demint.obj,\
- asprintf.obj vasprintf.obj,mkstemps.obj,filename_cmp.obj,\
- concat.obj,getruntime.obj,getpagesize.obj,getpwd.obj,xstrerror.obj,\
- xmemdup.obj,xstrdup.obj,xatexit.obj,choose-temp.obj,fnmatch.obj,\
- objalloc.obj,safe-ctype.obj,hashtab.obj,lbasename.obj,argv.obj,\
- lrealpath.obj,make-temp-file.obj,stpcpy.obj,unlink-if-ordinary.obj
-
-ifeq ($(CC),gcc)
-CFLAGS=/include=([],[-.include])
-else
-# assume dec c
-OPT=/noopt/debug/warnings=disable=(missingreturn)
-CFLAGS=$(OPT)/include=([],[-.include])/name=(as_is,shortened)\
- /define=(HAVE_CONFIG_H=1)\
- /prefix=(all,except=("getopt","optarg","optopt","optind","opterr"))
-endif
-
-libiberty.olb: $(OBJS)
- purge
- lib/create libiberty *.obj
-
-clean:
- $$ purge
- $(RM) *.obj;
- $(RM) libiberty.olb;
diff --git a/gcc-4.7/libiberty/md5.c b/gcc-4.7/libiberty/md5.c
deleted file mode 100644
index 0db8fc893..000000000
--- a/gcc-4.7/libiberty/md5.c
+++ /dev/null
@@ -1,437 +0,0 @@
-/* md5.c - Functions to compute MD5 message digest of files or memory blocks
- according to the definition of MD5 in RFC 1321 from April 1992.
- Copyright (C) 1995, 1996, 2011 Free Software Foundation, Inc.
-
- NOTE: This source is derived from an old version taken from the GNU C
- Library (glibc).
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995. */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-
-#if STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-# include <string.h>
-#else
-# ifndef HAVE_MEMCPY
-# define memcpy(d, s, n) bcopy ((s), (d), (n))
-# endif
-#endif
-
-#include "ansidecl.h"
-#include "md5.h"
-
-#ifdef _LIBC
-# include <endian.h>
-# if __BYTE_ORDER == __BIG_ENDIAN
-# define WORDS_BIGENDIAN 1
-# endif
-#endif
-
-#ifdef WORDS_BIGENDIAN
-# define SWAP(n) \
- (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
-#else
-# define SWAP(n) (n)
-#endif
-
-
-/* This array contains the bytes used to pad the buffer to the next
- 64-byte boundary. (RFC 1321, 3.1: Step 1) */
-static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
-
-
-/* Initialize structure containing state of computation.
- (RFC 1321, 3.3: Step 3) */
-void
-md5_init_ctx (struct md5_ctx *ctx)
-{
- ctx->A = (md5_uint32) 0x67452301;
- ctx->B = (md5_uint32) 0xefcdab89;
- ctx->C = (md5_uint32) 0x98badcfe;
- ctx->D = (md5_uint32) 0x10325476;
-
- ctx->total[0] = ctx->total[1] = 0;
- ctx->buflen = 0;
-}
-
-/* Put result from CTX in first 16 bytes following RESBUF. The result
- must be in little endian byte order.
-
- IMPORTANT: RESBUF may not be aligned as strongly as MD5_UNIT32 so we
- put things in a local (aligned) buffer first, then memcpy into RESBUF. */
-void *
-md5_read_ctx (const struct md5_ctx *ctx, void *resbuf)
-{
- md5_uint32 buffer[4];
-
- buffer[0] = SWAP (ctx->A);
- buffer[1] = SWAP (ctx->B);
- buffer[2] = SWAP (ctx->C);
- buffer[3] = SWAP (ctx->D);
-
- memcpy (resbuf, buffer, 16);
-
- return resbuf;
-}
-
-/* Process the remaining bytes in the internal buffer and the usual
- prolog according to the standard and write the result to RESBUF.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32 bits value. */
-void *
-md5_finish_ctx (struct md5_ctx *ctx, void *resbuf)
-{
- /* Take yet unprocessed bytes into account. */
- md5_uint32 bytes = ctx->buflen;
- size_t pad;
-
- /* Now count remaining bytes. */
- ctx->total[0] += bytes;
- if (ctx->total[0] < bytes)
- ++ctx->total[1];
-
- pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes;
- memcpy (&ctx->buffer[bytes], fillbuf, pad);
-
- /* Put the 64-bit file length in *bits* at the end of the buffer. */
- *(md5_uint32 *) &ctx->buffer[bytes + pad] = SWAP (ctx->total[0] << 3);
- *(md5_uint32 *) &ctx->buffer[bytes + pad + 4] = SWAP ((ctx->total[1] << 3) |
- (ctx->total[0] >> 29));
-
- /* Process last bytes. */
- md5_process_block (ctx->buffer, bytes + pad + 8, ctx);
-
- return md5_read_ctx (ctx, resbuf);
-}
-
-/* Compute MD5 message digest for bytes read from STREAM. The
- resulting message digest number will be written into the 16 bytes
- beginning at RESBLOCK. */
-int
-md5_stream (FILE *stream, void *resblock)
-{
- /* Important: BLOCKSIZE must be a multiple of 64. */
-#define BLOCKSIZE 4096
- struct md5_ctx ctx;
- char buffer[BLOCKSIZE + 72];
- size_t sum;
-
- /* Initialize the computation context. */
- md5_init_ctx (&ctx);
-
- /* Iterate over full file contents. */
- while (1)
- {
- /* We read the file in blocks of BLOCKSIZE bytes. One call of the
- computation function processes the whole buffer so that with the
- next round of the loop another block can be read. */
- size_t n;
- sum = 0;
-
- /* Read block. Take care for partial reads. */
- do
- {
- n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
-
- sum += n;
- }
- while (sum < BLOCKSIZE && n != 0);
- if (n == 0 && ferror (stream))
- return 1;
-
- /* If end of file is reached, end the loop. */
- if (n == 0)
- break;
-
- /* Process buffer with BLOCKSIZE bytes. Note that
- BLOCKSIZE % 64 == 0
- */
- md5_process_block (buffer, BLOCKSIZE, &ctx);
- }
-
- /* Add the last bytes if necessary. */
- if (sum > 0)
- md5_process_bytes (buffer, sum, &ctx);
-
- /* Construct result in desired memory. */
- md5_finish_ctx (&ctx, resblock);
- return 0;
-}
-
-/* Compute MD5 message digest for LEN bytes beginning at BUFFER. The
- result is always in little endian byte order, so that a byte-wise
- output yields to the wanted ASCII representation of the message
- digest. */
-void *
-md5_buffer (const char *buffer, size_t len, void *resblock)
-{
- struct md5_ctx ctx;
-
- /* Initialize the computation context. */
- md5_init_ctx (&ctx);
-
- /* Process whole buffer but last len % 64 bytes. */
- md5_process_bytes (buffer, len, &ctx);
-
- /* Put result in desired memory area. */
- return md5_finish_ctx (&ctx, resblock);
-}
-
-
-void
-md5_process_bytes (const void *buffer, size_t len, struct md5_ctx *ctx)
-{
- /* When we already have some bits in our internal buffer concatenate
- both inputs first. */
- if (ctx->buflen != 0)
- {
- size_t left_over = ctx->buflen;
- size_t add = 128 - left_over > len ? len : 128 - left_over;
-
- memcpy (&ctx->buffer[left_over], buffer, add);
- ctx->buflen += add;
-
- if (left_over + add > 64)
- {
- md5_process_block (ctx->buffer, (left_over + add) & ~63, ctx);
- /* The regions in the following copy operation cannot overlap. */
- memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63],
- (left_over + add) & 63);
- ctx->buflen = (left_over + add) & 63;
- }
-
- buffer = (const void *) ((const char *) buffer + add);
- len -= add;
- }
-
- /* Process available complete blocks. */
- if (len > 64)
- {
-#if !_STRING_ARCH_unaligned
-/* To check alignment gcc has an appropriate operator. Other
- compilers don't. */
-# if __GNUC__ >= 2
-# define UNALIGNED_P(p) (((md5_uintptr) p) % __alignof__ (md5_uint32) != 0)
-# else
-# define UNALIGNED_P(p) (((md5_uintptr) p) % sizeof (md5_uint32) != 0)
-# endif
- if (UNALIGNED_P (buffer))
- while (len > 64)
- {
- memcpy (ctx->buffer, buffer, 64);
- md5_process_block (ctx->buffer, 64, ctx);
- buffer = (const char *) buffer + 64;
- len -= 64;
- }
- else
-#endif
- {
- md5_process_block (buffer, len & ~63, ctx);
- buffer = (const void *) ((const char *) buffer + (len & ~63));
- len &= 63;
- }
- }
-
- /* Move remaining bytes in internal buffer. */
- if (len > 0)
- {
- memcpy (ctx->buffer, buffer, len);
- ctx->buflen = len;
- }
-}
-
-
-/* These are the four functions used in the four steps of the MD5 algorithm
- and defined in the RFC 1321. The first function is a little bit optimized
- (as found in Colin Plumbs public domain implementation). */
-/* #define FF(b, c, d) ((b & c) | (~b & d)) */
-#define FF(b, c, d) (d ^ (b & (c ^ d)))
-#define FG(b, c, d) FF (d, b, c)
-#define FH(b, c, d) (b ^ c ^ d)
-#define FI(b, c, d) (c ^ (b | ~d))
-
-/* Process LEN bytes of BUFFER, accumulating context into CTX.
- It is assumed that LEN % 64 == 0. */
-
-void
-md5_process_block (const void *buffer, size_t len, struct md5_ctx *ctx)
-{
- md5_uint32 correct_words[16];
- const md5_uint32 *words = (const md5_uint32 *) buffer;
- size_t nwords = len / sizeof (md5_uint32);
- const md5_uint32 *endp = words + nwords;
- md5_uint32 A = ctx->A;
- md5_uint32 B = ctx->B;
- md5_uint32 C = ctx->C;
- md5_uint32 D = ctx->D;
-
- /* First increment the byte count. RFC 1321 specifies the possible
- length of the file up to 2^64 bits. Here we only compute the
- number of bytes. Do a double word increment. */
- ctx->total[0] += len;
- if (ctx->total[0] < len)
- ++ctx->total[1];
-
- /* Process all bytes in the buffer with 64 bytes in each round of
- the loop. */
- while (words < endp)
- {
- md5_uint32 *cwp = correct_words;
- md5_uint32 A_save = A;
- md5_uint32 B_save = B;
- md5_uint32 C_save = C;
- md5_uint32 D_save = D;
-
- /* First round: using the given function, the context and a constant
- the next context is computed. Because the algorithms processing
- unit is a 32-bit word and it is determined to work on words in
- little endian byte order we perhaps have to change the byte order
- before the computation. To reduce the work for the next steps
- we store the swapped words in the array CORRECT_WORDS. */
-
-#define OP(a, b, c, d, s, T) \
- do \
- { \
- a += FF (b, c, d) + (*cwp++ = SWAP (*words)) + T; \
- ++words; \
- CYCLIC (a, s); \
- a += b; \
- } \
- while (0)
-
- /* It is unfortunate that C does not provide an operator for
- cyclic rotation. Hope the C compiler is smart enough. */
-#define CYCLIC(w, s) (w = (w << s) | (w >> (32 - s)))
-
- /* Before we start, one word to the strange constants.
- They are defined in RFC 1321 as
-
- T[i] = (int) (4294967296.0 * fabs (sin (i))), i=1..64
- */
-
- /* Round 1. */
- OP (A, B, C, D, 7, (md5_uint32) 0xd76aa478);
- OP (D, A, B, C, 12, (md5_uint32) 0xe8c7b756);
- OP (C, D, A, B, 17, (md5_uint32) 0x242070db);
- OP (B, C, D, A, 22, (md5_uint32) 0xc1bdceee);
- OP (A, B, C, D, 7, (md5_uint32) 0xf57c0faf);
- OP (D, A, B, C, 12, (md5_uint32) 0x4787c62a);
- OP (C, D, A, B, 17, (md5_uint32) 0xa8304613);
- OP (B, C, D, A, 22, (md5_uint32) 0xfd469501);
- OP (A, B, C, D, 7, (md5_uint32) 0x698098d8);
- OP (D, A, B, C, 12, (md5_uint32) 0x8b44f7af);
- OP (C, D, A, B, 17, (md5_uint32) 0xffff5bb1);
- OP (B, C, D, A, 22, (md5_uint32) 0x895cd7be);
- OP (A, B, C, D, 7, (md5_uint32) 0x6b901122);
- OP (D, A, B, C, 12, (md5_uint32) 0xfd987193);
- OP (C, D, A, B, 17, (md5_uint32) 0xa679438e);
- OP (B, C, D, A, 22, (md5_uint32) 0x49b40821);
-
- /* For the second to fourth round we have the possibly swapped words
- in CORRECT_WORDS. Redefine the macro to take an additional first
- argument specifying the function to use. */
-#undef OP
-#define OP(a, b, c, d, k, s, T) \
- do \
- { \
- a += FX (b, c, d) + correct_words[k] + T; \
- CYCLIC (a, s); \
- a += b; \
- } \
- while (0)
-
-#define FX(b, c, d) FG (b, c, d)
-
- /* Round 2. */
- OP (A, B, C, D, 1, 5, (md5_uint32) 0xf61e2562);
- OP (D, A, B, C, 6, 9, (md5_uint32) 0xc040b340);
- OP (C, D, A, B, 11, 14, (md5_uint32) 0x265e5a51);
- OP (B, C, D, A, 0, 20, (md5_uint32) 0xe9b6c7aa);
- OP (A, B, C, D, 5, 5, (md5_uint32) 0xd62f105d);
- OP (D, A, B, C, 10, 9, (md5_uint32) 0x02441453);
- OP (C, D, A, B, 15, 14, (md5_uint32) 0xd8a1e681);
- OP (B, C, D, A, 4, 20, (md5_uint32) 0xe7d3fbc8);
- OP (A, B, C, D, 9, 5, (md5_uint32) 0x21e1cde6);
- OP (D, A, B, C, 14, 9, (md5_uint32) 0xc33707d6);
- OP (C, D, A, B, 3, 14, (md5_uint32) 0xf4d50d87);
- OP (B, C, D, A, 8, 20, (md5_uint32) 0x455a14ed);
- OP (A, B, C, D, 13, 5, (md5_uint32) 0xa9e3e905);
- OP (D, A, B, C, 2, 9, (md5_uint32) 0xfcefa3f8);
- OP (C, D, A, B, 7, 14, (md5_uint32) 0x676f02d9);
- OP (B, C, D, A, 12, 20, (md5_uint32) 0x8d2a4c8a);
-
-#undef FX
-#define FX(b, c, d) FH (b, c, d)
-
- /* Round 3. */
- OP (A, B, C, D, 5, 4, (md5_uint32) 0xfffa3942);
- OP (D, A, B, C, 8, 11, (md5_uint32) 0x8771f681);
- OP (C, D, A, B, 11, 16, (md5_uint32) 0x6d9d6122);
- OP (B, C, D, A, 14, 23, (md5_uint32) 0xfde5380c);
- OP (A, B, C, D, 1, 4, (md5_uint32) 0xa4beea44);
- OP (D, A, B, C, 4, 11, (md5_uint32) 0x4bdecfa9);
- OP (C, D, A, B, 7, 16, (md5_uint32) 0xf6bb4b60);
- OP (B, C, D, A, 10, 23, (md5_uint32) 0xbebfbc70);
- OP (A, B, C, D, 13, 4, (md5_uint32) 0x289b7ec6);
- OP (D, A, B, C, 0, 11, (md5_uint32) 0xeaa127fa);
- OP (C, D, A, B, 3, 16, (md5_uint32) 0xd4ef3085);
- OP (B, C, D, A, 6, 23, (md5_uint32) 0x04881d05);
- OP (A, B, C, D, 9, 4, (md5_uint32) 0xd9d4d039);
- OP (D, A, B, C, 12, 11, (md5_uint32) 0xe6db99e5);
- OP (C, D, A, B, 15, 16, (md5_uint32) 0x1fa27cf8);
- OP (B, C, D, A, 2, 23, (md5_uint32) 0xc4ac5665);
-
-#undef FX
-#define FX(b, c, d) FI (b, c, d)
-
- /* Round 4. */
- OP (A, B, C, D, 0, 6, (md5_uint32) 0xf4292244);
- OP (D, A, B, C, 7, 10, (md5_uint32) 0x432aff97);
- OP (C, D, A, B, 14, 15, (md5_uint32) 0xab9423a7);
- OP (B, C, D, A, 5, 21, (md5_uint32) 0xfc93a039);
- OP (A, B, C, D, 12, 6, (md5_uint32) 0x655b59c3);
- OP (D, A, B, C, 3, 10, (md5_uint32) 0x8f0ccc92);
- OP (C, D, A, B, 10, 15, (md5_uint32) 0xffeff47d);
- OP (B, C, D, A, 1, 21, (md5_uint32) 0x85845dd1);
- OP (A, B, C, D, 8, 6, (md5_uint32) 0x6fa87e4f);
- OP (D, A, B, C, 15, 10, (md5_uint32) 0xfe2ce6e0);
- OP (C, D, A, B, 6, 15, (md5_uint32) 0xa3014314);
- OP (B, C, D, A, 13, 21, (md5_uint32) 0x4e0811a1);
- OP (A, B, C, D, 4, 6, (md5_uint32) 0xf7537e82);
- OP (D, A, B, C, 11, 10, (md5_uint32) 0xbd3af235);
- OP (C, D, A, B, 2, 15, (md5_uint32) 0x2ad7d2bb);
- OP (B, C, D, A, 9, 21, (md5_uint32) 0xeb86d391);
-
- /* Add the starting values of the context. */
- A += A_save;
- B += B_save;
- C += C_save;
- D += D_save;
- }
-
- /* Put checksum in context given as argument. */
- ctx->A = A;
- ctx->B = B;
- ctx->C = C;
- ctx->D = D;
-}
diff --git a/gcc-4.7/libiberty/memchr.c b/gcc-4.7/libiberty/memchr.c
deleted file mode 100644
index 7448ab9e7..000000000
--- a/gcc-4.7/libiberty/memchr.c
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-
-@deftypefn Supplemental void* memchr (const void *@var{s}, int @var{c}, @
- size_t @var{n})
-
-This function searches memory starting at @code{*@var{s}} for the
-character @var{c}. The search only ends with the first occurrence of
-@var{c}, or after @var{length} characters; in particular, a null
-character does not terminate the search. If the character @var{c} is
-found within @var{length} characters of @code{*@var{s}}, a pointer
-to the character is returned. If @var{c} is not found, then @code{NULL} is
-returned.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-PTR
-memchr (register const PTR src_void, int c, size_t length)
-{
- const unsigned char *src = (const unsigned char *)src_void;
-
- while (length-- > 0)
- {
- if (*src == c)
- return (PTR)src;
- src++;
- }
- return NULL;
-}
diff --git a/gcc-4.7/libiberty/memcmp.c b/gcc-4.7/libiberty/memcmp.c
deleted file mode 100644
index 37db60f38..000000000
--- a/gcc-4.7/libiberty/memcmp.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* memcmp -- compare two memory regions.
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental int memcmp (const void *@var{x}, const void *@var{y}, @
- size_t @var{count})
-
-Compares the first @var{count} bytes of two areas of memory. Returns
-zero if they are the same, a value less than zero if @var{x} is
-lexically less than @var{y}, or a value greater than zero if @var{x}
-is lexically greater than @var{y}. Note that lexical order is determined
-as if comparing unsigned char arrays.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-int
-memcmp (const PTR str1, const PTR str2, size_t count)
-{
- register const unsigned char *s1 = (const unsigned char*)str1;
- register const unsigned char *s2 = (const unsigned char*)str2;
-
- while (count-- > 0)
- {
- if (*s1++ != *s2++)
- return s1[-1] < s2[-1] ? -1 : 1;
- }
- return 0;
-}
-
diff --git a/gcc-4.7/libiberty/memcpy.c b/gcc-4.7/libiberty/memcpy.c
deleted file mode 100644
index 7f67d0bd1..000000000
--- a/gcc-4.7/libiberty/memcpy.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* memcpy (the standard C function)
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental void* memcpy (void *@var{out}, const void *@var{in}, @
- size_t @var{length})
-
-Copies @var{length} bytes from memory region @var{in} to region
-@var{out}. Returns a pointer to @var{out}.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-void bcopy (const void*, void*, size_t);
-
-PTR
-memcpy (PTR out, const PTR in, size_t length)
-{
- bcopy(in, out, length);
- return out;
-}
diff --git a/gcc-4.7/libiberty/memmem.c b/gcc-4.7/libiberty/memmem.c
deleted file mode 100644
index 147253f5b..000000000
--- a/gcc-4.7/libiberty/memmem.c
+++ /dev/null
@@ -1,71 +0,0 @@
-/* Copyright (C) 1991,92,93,94,96,97,98,2000,2004,2007,2011 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License along
- with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Supplemental void* memmem (const void *@var{haystack}, @
- size_t @var{haystack_len} const void *@var{needle}, size_t @var{needle_len})
-
-Returns a pointer to the first occurrence of @var{needle} (length
-@var{needle_len}) in @var{haystack} (length @var{haystack_len}).
-Returns @code{NULL} if not found.
-
-@end deftypefn
-
-*/
-
-#ifndef _LIBC
-# include <config.h>
-#endif
-
-#include <stddef.h>
-#include <string.h>
-
-#ifndef _LIBC
-# define __builtin_expect(expr, val) (expr)
-#endif
-
-#undef memmem
-
-/* Return the first occurrence of NEEDLE in HAYSTACK. */
-void *
-memmem (const void *haystack, size_t haystack_len, const void *needle,
- size_t needle_len)
-{
- const char *begin;
- const char *const last_possible
- = (const char *) haystack + haystack_len - needle_len;
-
- if (needle_len == 0)
- /* The first occurrence of the empty string is deemed to occur at
- the beginning of the string. */
- return (void *) haystack;
-
- /* Sanity check, otherwise the loop might search through the whole
- memory. */
- if (__builtin_expect (haystack_len < needle_len, 0))
- return NULL;
-
- for (begin = (const char *) haystack; begin <= last_possible; ++begin)
- if (begin[0] == ((const char *) needle)[0] &&
- !memcmp ((const void *) &begin[1],
- (const void *) ((const char *) needle + 1),
- needle_len - 1))
- return (void *) begin;
-
- return NULL;
-}
diff --git a/gcc-4.7/libiberty/memmove.c b/gcc-4.7/libiberty/memmove.c
deleted file mode 100644
index ebda7cbb4..000000000
--- a/gcc-4.7/libiberty/memmove.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* Wrapper to implement ANSI C's memmove using BSD's bcopy. */
-/* This function is in the public domain. --Per Bothner. */
-
-/*
-
-@deftypefn Supplemental void* memmove (void *@var{from}, const void *@var{to}, @
- size_t @var{count})
-
-Copies @var{count} bytes from memory area @var{from} to memory area
-@var{to}, returning a pointer to @var{to}.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-void bcopy (const void*, void*, size_t);
-
-PTR
-memmove (PTR s1, const PTR s2, size_t n)
-{
- bcopy (s2, s1, n);
- return s1;
-}
diff --git a/gcc-4.7/libiberty/mempcpy.c b/gcc-4.7/libiberty/mempcpy.c
deleted file mode 100644
index f85a07f29..000000000
--- a/gcc-4.7/libiberty/mempcpy.c
+++ /dev/null
@@ -1,42 +0,0 @@
-/* Implement the mempcpy function.
- Copyright (C) 2003, 2004, 2005, 2011 Free Software Foundation, Inc.
- Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Supplemental void* mempcpy (void *@var{out}, const void *@var{in}, @
- size_t @var{length})
-
-Copies @var{length} bytes from memory region @var{in} to region
-@var{out}. Returns a pointer to @var{out} + @var{length}.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-extern PTR memcpy (PTR, const PTR, size_t);
-
-PTR
-mempcpy (PTR dst, const PTR src, size_t len)
-{
- return (char *) memcpy (dst, src, len) + len;
-}
diff --git a/gcc-4.7/libiberty/memset.c b/gcc-4.7/libiberty/memset.c
deleted file mode 100644
index 476668961..000000000
--- a/gcc-4.7/libiberty/memset.c
+++ /dev/null
@@ -1,26 +0,0 @@
-/* memset
- This implementation is in the public domain. */
-
-/*
-
-@deftypefn Supplemental void* memset (void *@var{s}, int @var{c}, @
- size_t @var{count})
-
-Sets the first @var{count} bytes of @var{s} to the constant byte
-@var{c}, returning a pointer to @var{s}.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-PTR
-memset (PTR dest, register int val, register size_t len)
-{
- register unsigned char *ptr = (unsigned char*)dest;
- while (len-- > 0)
- *ptr++ = val;
- return dest;
-}
diff --git a/gcc-4.7/libiberty/mkstemps.c b/gcc-4.7/libiberty/mkstemps.c
deleted file mode 100644
index a0e68a73b..000000000
--- a/gcc-4.7/libiberty/mkstemps.c
+++ /dev/null
@@ -1,147 +0,0 @@
-/* Copyright (C) 1991, 1992, 1996, 1998, 2004 Free Software Foundation, Inc.
- This file is derived from mkstemp.c from the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/types.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#include <errno.h>
-#include <stdio.h>
-#include <fcntl.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#include "ansidecl.h"
-
-/* We need to provide a type for gcc_uint64_t. */
-#ifdef __GNUC__
-__extension__ typedef unsigned long long gcc_uint64_t;
-#else
-typedef unsigned long gcc_uint64_t;
-#endif
-
-#ifndef TMP_MAX
-#define TMP_MAX 16384
-#endif
-
-#ifndef O_BINARY
-# define O_BINARY 0
-#endif
-
-/*
-
-@deftypefn Replacement int mkstemps (char *@var{pattern}, int @var{suffix_len})
-
-Generate a unique temporary file name from @var{pattern}.
-@var{pattern} has the form:
-
-@example
- @var{path}/ccXXXXXX@var{suffix}
-@end example
-
-@var{suffix_len} tells us how long @var{suffix} is (it can be zero
-length). The last six characters of @var{pattern} before @var{suffix}
-must be @samp{XXXXXX}; they are replaced with a string that makes the
-filename unique. Returns a file descriptor open on the file for
-reading and writing.
-
-@end deftypefn
-
-*/
-
-int
-mkstemps (char *pattern, int suffix_len)
-{
- static const char letters[]
- = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
- static gcc_uint64_t value;
-#ifdef HAVE_GETTIMEOFDAY
- struct timeval tv;
-#endif
- char *XXXXXX;
- size_t len;
- int count;
-
- len = strlen (pattern);
-
- if ((int) len < 6 + suffix_len
- || strncmp (&pattern[len - 6 - suffix_len], "XXXXXX", 6))
- {
- return -1;
- }
-
- XXXXXX = &pattern[len - 6 - suffix_len];
-
-#ifdef HAVE_GETTIMEOFDAY
- /* Get some more or less random data. */
- gettimeofday (&tv, NULL);
- value += ((gcc_uint64_t) tv.tv_usec << 16) ^ tv.tv_sec ^ getpid ();
-#else
- value += getpid ();
-#endif
-
- for (count = 0; count < TMP_MAX; ++count)
- {
- gcc_uint64_t v = value;
- int fd;
-
- /* Fill in the random bits. */
- XXXXXX[0] = letters[v % 62];
- v /= 62;
- XXXXXX[1] = letters[v % 62];
- v /= 62;
- XXXXXX[2] = letters[v % 62];
- v /= 62;
- XXXXXX[3] = letters[v % 62];
- v /= 62;
- XXXXXX[4] = letters[v % 62];
- v /= 62;
- XXXXXX[5] = letters[v % 62];
-
- fd = open (pattern, O_BINARY|O_RDWR|O_CREAT|O_EXCL, 0600);
- if (fd >= 0)
- /* The file does not exist. */
- return fd;
- if (errno != EEXIST
-#ifdef EISDIR
- && errno != EISDIR
-#endif
- )
- /* Fatal error (EPERM, ENOSPC etc). Doesn't make sense to loop. */
- break;
-
- /* This is a random value. It is only necessary that the next
- TMP_MAX values generated by adding 7777 to VALUE are different
- with (module 2^32). */
- value += 7777;
- }
-
- /* We return the null string if we can't find a unique file name. */
- pattern[0] = '\0';
- return -1;
-}
diff --git a/gcc-4.7/libiberty/msdos.c b/gcc-4.7/libiberty/msdos.c
deleted file mode 100644
index 923e64d4e..000000000
--- a/gcc-4.7/libiberty/msdos.c
+++ /dev/null
@@ -1,15 +0,0 @@
-char msg[] = "No vfork available - aborting\n";
-vfork()
-{
- write(1, msg, sizeof(msg));
-}
-
-sigsetmask()
-{
- /* no signals support in go32 (yet) */
-}
-
-waitpid()
-{
- return -1;
-}
diff --git a/gcc-4.7/libiberty/objalloc.c b/gcc-4.7/libiberty/objalloc.c
deleted file mode 100644
index 3ddac2ce4..000000000
--- a/gcc-4.7/libiberty/objalloc.c
+++ /dev/null
@@ -1,291 +0,0 @@
-/* objalloc.c -- routines to allocate memory for objects
- Copyright 1997 Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Cygnus Solutions.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-#include "ansidecl.h"
-
-#include "objalloc.h"
-
-/* Get a definition for NULL. */
-#include <stdio.h>
-
-#if VMS
-#include <stdlib.h>
-#include <unixlib.h>
-#else
-
-/* Get a definition for size_t. */
-#include <stddef.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#else
-/* For systems with larger pointers than ints, this must be declared. */
-extern PTR malloc (size_t);
-extern void free (PTR);
-#endif
-
-#endif
-
-/* These routines allocate space for an object. Freeing allocated
- space may or may not free all more recently allocated space.
-
- We handle large and small allocation requests differently. If we
- don't have enough space in the current block, and the allocation
- request is for more than 512 bytes, we simply pass it through to
- malloc. */
-
-/* The objalloc structure is defined in objalloc.h. */
-
-/* This structure appears at the start of each chunk. */
-
-struct objalloc_chunk
-{
- /* Next chunk. */
- struct objalloc_chunk *next;
- /* If this chunk contains large objects, this is the value of
- current_ptr when this chunk was allocated. If this chunk
- contains small objects, this is NULL. */
- char *current_ptr;
-};
-
-/* The aligned size of objalloc_chunk. */
-
-#define CHUNK_HEADER_SIZE \
- ((sizeof (struct objalloc_chunk) + OBJALLOC_ALIGN - 1) \
- &~ (OBJALLOC_ALIGN - 1))
-
-/* We ask for this much memory each time we create a chunk which is to
- hold small objects. */
-
-#define CHUNK_SIZE (4096 - 32)
-
-/* A request for this amount or more is just passed through to malloc. */
-
-#define BIG_REQUEST (512)
-
-/* Create an objalloc structure. */
-
-struct objalloc *
-objalloc_create (void)
-{
- struct objalloc *ret;
- struct objalloc_chunk *chunk;
-
- ret = (struct objalloc *) malloc (sizeof *ret);
- if (ret == NULL)
- return NULL;
-
- ret->chunks = (PTR) malloc (CHUNK_SIZE);
- if (ret->chunks == NULL)
- {
- free (ret);
- return NULL;
- }
-
- chunk = (struct objalloc_chunk *) ret->chunks;
- chunk->next = NULL;
- chunk->current_ptr = NULL;
-
- ret->current_ptr = (char *) chunk + CHUNK_HEADER_SIZE;
- ret->current_space = CHUNK_SIZE - CHUNK_HEADER_SIZE;
-
- return ret;
-}
-
-/* Allocate space from an objalloc structure. */
-
-PTR
-_objalloc_alloc (struct objalloc *o, unsigned long len)
-{
- /* We avoid confusion from zero sized objects by always allocating
- at least 1 byte. */
- if (len == 0)
- len = 1;
-
- len = (len + OBJALLOC_ALIGN - 1) &~ (OBJALLOC_ALIGN - 1);
-
- if (len <= o->current_space)
- {
- o->current_ptr += len;
- o->current_space -= len;
- return (PTR) (o->current_ptr - len);
- }
-
- if (len >= BIG_REQUEST)
- {
- char *ret;
- struct objalloc_chunk *chunk;
-
- ret = (char *) malloc (CHUNK_HEADER_SIZE + len);
- if (ret == NULL)
- return NULL;
-
- chunk = (struct objalloc_chunk *) ret;
- chunk->next = (struct objalloc_chunk *) o->chunks;
- chunk->current_ptr = o->current_ptr;
-
- o->chunks = (PTR) chunk;
-
- return (PTR) (ret + CHUNK_HEADER_SIZE);
- }
- else
- {
- struct objalloc_chunk *chunk;
-
- chunk = (struct objalloc_chunk *) malloc (CHUNK_SIZE);
- if (chunk == NULL)
- return NULL;
- chunk->next = (struct objalloc_chunk *) o->chunks;
- chunk->current_ptr = NULL;
-
- o->current_ptr = (char *) chunk + CHUNK_HEADER_SIZE;
- o->current_space = CHUNK_SIZE - CHUNK_HEADER_SIZE;
-
- o->chunks = (PTR) chunk;
-
- return objalloc_alloc (o, len);
- }
-}
-
-/* Free an entire objalloc structure. */
-
-void
-objalloc_free (struct objalloc *o)
-{
- struct objalloc_chunk *l;
-
- l = (struct objalloc_chunk *) o->chunks;
- while (l != NULL)
- {
- struct objalloc_chunk *next;
-
- next = l->next;
- free (l);
- l = next;
- }
-
- free (o);
-}
-
-/* Free a block from an objalloc structure. This also frees all more
- recently allocated blocks. */
-
-void
-objalloc_free_block (struct objalloc *o, PTR block)
-{
- struct objalloc_chunk *p, *small;
- char *b = (char *) block;
-
- /* First set P to the chunk which contains the block we are freeing,
- and set Q to the last small object chunk we see before P. */
- small = NULL;
- for (p = (struct objalloc_chunk *) o->chunks; p != NULL; p = p->next)
- {
- if (p->current_ptr == NULL)
- {
- if (b > (char *) p && b < (char *) p + CHUNK_SIZE)
- break;
- small = p;
- }
- else
- {
- if (b == (char *) p + CHUNK_HEADER_SIZE)
- break;
- }
- }
-
- /* If we can't find the chunk, the caller has made a mistake. */
- if (p == NULL)
- abort ();
-
- if (p->current_ptr == NULL)
- {
- struct objalloc_chunk *q;
- struct objalloc_chunk *first;
-
- /* The block is in a chunk containing small objects. We can
- free every chunk through SMALL, because they have certainly
- been allocated more recently. After SMALL, we will not see
- any chunks containing small objects; we can free any big
- chunk if the current_ptr is greater than or equal to B. We
- can then reset the new current_ptr to B. */
-
- first = NULL;
- q = (struct objalloc_chunk *) o->chunks;
- while (q != p)
- {
- struct objalloc_chunk *next;
-
- next = q->next;
- if (small != NULL)
- {
- if (small == q)
- small = NULL;
- free (q);
- }
- else if (q->current_ptr > b)
- free (q);
- else if (first == NULL)
- first = q;
-
- q = next;
- }
-
- if (first == NULL)
- first = p;
- o->chunks = (PTR) first;
-
- /* Now start allocating from this small block again. */
- o->current_ptr = b;
- o->current_space = ((char *) p + CHUNK_SIZE) - b;
- }
- else
- {
- struct objalloc_chunk *q;
- char *current_ptr;
-
- /* This block is in a large chunk by itself. We can free
- everything on the list up to and including this block. We
- then start allocating from the next chunk containing small
- objects, setting current_ptr from the value stored with the
- large chunk we are freeing. */
-
- current_ptr = p->current_ptr;
- p = p->next;
-
- q = (struct objalloc_chunk *) o->chunks;
- while (q != p)
- {
- struct objalloc_chunk *next;
-
- next = q->next;
- free (q);
- q = next;
- }
-
- o->chunks = (PTR) p;
-
- while (p->current_ptr != NULL)
- p = p->next;
-
- o->current_ptr = current_ptr;
- o->current_space = ((char *) p + CHUNK_SIZE) - current_ptr;
- }
-}
diff --git a/gcc-4.7/libiberty/obstack.c b/gcc-4.7/libiberty/obstack.c
deleted file mode 100644
index a6dbaf095..000000000
--- a/gcc-4.7/libiberty/obstack.c
+++ /dev/null
@@ -1,510 +0,0 @@
-/* obstack.c - subroutines used implicitly by object stack macros
- Copyright (C) 1988,89,90,91,92,93,94,96,97 Free Software Foundation, Inc.
-
-
- NOTE: This source is derived from an old version taken from the GNU C
- Library (glibc).
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
- USA. */
-
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "obstack.h"
-
-/* NOTE BEFORE MODIFYING THIS FILE: This version number must be
- incremented whenever callers compiled using an old obstack.h can no
- longer properly call the functions in this obstack.c. */
-#define OBSTACK_INTERFACE_VERSION 1
-
-/* Comment out all this code if we are using the GNU C Library, and are not
- actually compiling the library itself, and the installed library
- supports the same library interface we do. This code is part of the GNU
- C Library, but also included in many other GNU distributions. Compiling
- and linking in this code is a waste when using the GNU C library
- (especially if it is a shared library). Rather than having every GNU
- program understand `configure --with-gnu-libc' and omit the object
- files, it is simpler to just do this in the source for each such file. */
-
-#include <stdio.h> /* Random thing to get __GNU_LIBRARY__. */
-#if !defined (_LIBC) && defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
-#include <gnu-versions.h>
-#if _GNU_OBSTACK_INTERFACE_VERSION == OBSTACK_INTERFACE_VERSION
-#define ELIDE_CODE
-#endif
-#endif
-
-
-#ifndef ELIDE_CODE
-
-
-#define POINTER void *
-
-/* Determine default alignment. */
-struct fooalign {char x; double d;};
-#define DEFAULT_ALIGNMENT \
- ((PTR_INT_TYPE) ((char *) &((struct fooalign *) 0)->d - (char *) 0))
-/* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT.
- But in fact it might be less smart and round addresses to as much as
- DEFAULT_ROUNDING. So we prepare for it to do that. */
-union fooround {long x; double d;};
-#define DEFAULT_ROUNDING (sizeof (union fooround))
-
-/* When we copy a long block of data, this is the unit to do it with.
- On some machines, copying successive ints does not work;
- in such a case, redefine COPYING_UNIT to `long' (if that works)
- or `char' as a last resort. */
-#ifndef COPYING_UNIT
-#define COPYING_UNIT int
-#endif
-
-
-/* The functions allocating more room by calling `obstack_chunk_alloc'
- jump to the handler pointed to by `obstack_alloc_failed_handler'.
- This variable by default points to the internal function
- `print_and_abort'. */
-static void print_and_abort (void);
-void (*obstack_alloc_failed_handler) (void) = print_and_abort;
-
-/* Exit value used when `print_and_abort' is used. */
-#if defined __GNU_LIBRARY__ || defined HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifndef EXIT_FAILURE
-#define EXIT_FAILURE 1
-#endif
-int obstack_exit_failure = EXIT_FAILURE;
-
-/* The non-GNU-C macros copy the obstack into this global variable
- to avoid multiple evaluation. */
-
-struct obstack *_obstack;
-
-/* Define a macro that either calls functions with the traditional malloc/free
- calling interface, or calls functions with the mmalloc/mfree interface
- (that adds an extra first argument), based on the state of use_extra_arg.
- For free, do not use ?:, since some compilers, like the MIPS compilers,
- do not allow (expr) ? void : void. */
-
-#if defined (__STDC__) && __STDC__
-#define CALL_CHUNKFUN(h, size) \
- (((h) -> use_extra_arg) \
- ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
- : (*(struct _obstack_chunk *(*) (long)) (h)->chunkfun) ((size)))
-
-#define CALL_FREEFUN(h, old_chunk) \
- do { \
- if ((h) -> use_extra_arg) \
- (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
- else \
- (*(void (*) (void *)) (h)->freefun) ((old_chunk)); \
- } while (0)
-#else
-#define CALL_CHUNKFUN(h, size) \
- (((h) -> use_extra_arg) \
- ? (*(h)->chunkfun) ((h)->extra_arg, (size)) \
- : (*(struct _obstack_chunk *(*) ()) (h)->chunkfun) ((size)))
-
-#define CALL_FREEFUN(h, old_chunk) \
- do { \
- if ((h) -> use_extra_arg) \
- (*(h)->freefun) ((h)->extra_arg, (old_chunk)); \
- else \
- (*(void (*) ()) (h)->freefun) ((old_chunk)); \
- } while (0)
-#endif
-
-
-/* Initialize an obstack H for use. Specify chunk size SIZE (0 means default).
- Objects start on multiples of ALIGNMENT (0 means use default).
- CHUNKFUN is the function to use to allocate chunks,
- and FREEFUN the function to free them.
-
- Return nonzero if successful, zero if out of memory.
- To recover from an out of memory error,
- free up some memory, then call this again. */
-
-int
-_obstack_begin (struct obstack *h, int size, int alignment,
- POINTER (*chunkfun) (long), void (*freefun) (void *))
-{
- register struct _obstack_chunk *chunk; /* points to new chunk */
-
- if (alignment == 0)
- alignment = (int) DEFAULT_ALIGNMENT;
- if (size == 0)
- /* Default size is what GNU malloc can fit in a 4096-byte block. */
- {
- /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
- Use the values for range checking, because if range checking is off,
- the extra bytes won't be missed terribly, but if range checking is on
- and we used a larger request, a whole extra 4096 bytes would be
- allocated.
-
- These number are irrelevant to the new GNU malloc. I suspect it is
- less sensitive to the size of the request. */
- int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
- + 4 + DEFAULT_ROUNDING - 1)
- & ~(DEFAULT_ROUNDING - 1));
- size = 4096 - extra;
- }
-
- h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
- h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
- h->chunk_size = size;
- h->alignment_mask = alignment - 1;
- h->use_extra_arg = 0;
-
- chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size);
- if (!chunk)
- (*obstack_alloc_failed_handler) ();
- h->next_free = h->object_base = chunk->contents;
- h->chunk_limit = chunk->limit
- = (char *) chunk + h->chunk_size;
- chunk->prev = 0;
- /* The initial chunk now contains no empty object. */
- h->maybe_empty_object = 0;
- h->alloc_failed = 0;
- return 1;
-}
-
-int
-_obstack_begin_1 (struct obstack *h, int size, int alignment,
- POINTER (*chunkfun) (POINTER, long),
- void (*freefun) (POINTER, POINTER), POINTER arg)
-{
- register struct _obstack_chunk *chunk; /* points to new chunk */
-
- if (alignment == 0)
- alignment = (int) DEFAULT_ALIGNMENT;
- if (size == 0)
- /* Default size is what GNU malloc can fit in a 4096-byte block. */
- {
- /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc.
- Use the values for range checking, because if range checking is off,
- the extra bytes won't be missed terribly, but if range checking is on
- and we used a larger request, a whole extra 4096 bytes would be
- allocated.
-
- These number are irrelevant to the new GNU malloc. I suspect it is
- less sensitive to the size of the request. */
- int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1))
- + 4 + DEFAULT_ROUNDING - 1)
- & ~(DEFAULT_ROUNDING - 1));
- size = 4096 - extra;
- }
-
- h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
- h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
- h->chunk_size = size;
- h->alignment_mask = alignment - 1;
- h->extra_arg = arg;
- h->use_extra_arg = 1;
-
- chunk = h->chunk = CALL_CHUNKFUN (h, h -> chunk_size);
- if (!chunk)
- (*obstack_alloc_failed_handler) ();
- h->next_free = h->object_base = chunk->contents;
- h->chunk_limit = chunk->limit
- = (char *) chunk + h->chunk_size;
- chunk->prev = 0;
- /* The initial chunk now contains no empty object. */
- h->maybe_empty_object = 0;
- h->alloc_failed = 0;
- return 1;
-}
-
-/* Allocate a new current chunk for the obstack *H
- on the assumption that LENGTH bytes need to be added
- to the current object, or a new object of length LENGTH allocated.
- Copies any partial object from the end of the old chunk
- to the beginning of the new one. */
-
-void
-_obstack_newchunk (struct obstack *h, int length)
-{
- register struct _obstack_chunk *old_chunk = h->chunk;
- register struct _obstack_chunk *new_chunk;
- register long new_size;
- register long obj_size = h->next_free - h->object_base;
- register long i;
- long already;
-
- /* Compute size for new chunk. */
- new_size = (obj_size + length) + (obj_size >> 3) + 100;
- if (new_size < h->chunk_size)
- new_size = h->chunk_size;
-
- /* Allocate and initialize the new chunk. */
- new_chunk = CALL_CHUNKFUN (h, new_size);
- if (!new_chunk)
- (*obstack_alloc_failed_handler) ();
- h->chunk = new_chunk;
- new_chunk->prev = old_chunk;
- new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size;
-
- /* Move the existing object to the new chunk.
- Word at a time is fast and is safe if the object
- is sufficiently aligned. */
- if (h->alignment_mask + 1 >= DEFAULT_ALIGNMENT)
- {
- for (i = obj_size / sizeof (COPYING_UNIT) - 1;
- i >= 0; i--)
- ((COPYING_UNIT *)new_chunk->contents)[i]
- = ((COPYING_UNIT *)h->object_base)[i];
- /* We used to copy the odd few remaining bytes as one extra COPYING_UNIT,
- but that can cross a page boundary on a machine
- which does not do strict alignment for COPYING_UNITS. */
- already = obj_size / sizeof (COPYING_UNIT) * sizeof (COPYING_UNIT);
- }
- else
- already = 0;
- /* Copy remaining bytes one by one. */
- for (i = already; i < obj_size; i++)
- new_chunk->contents[i] = h->object_base[i];
-
- /* If the object just copied was the only data in OLD_CHUNK,
- free that chunk and remove it from the chain.
- But not if that chunk might contain an empty object. */
- if (h->object_base == old_chunk->contents && ! h->maybe_empty_object)
- {
- new_chunk->prev = old_chunk->prev;
- CALL_FREEFUN (h, old_chunk);
- }
-
- h->object_base = new_chunk->contents;
- h->next_free = h->object_base + obj_size;
- /* The new chunk certainly contains no empty object yet. */
- h->maybe_empty_object = 0;
-}
-
-/* Return nonzero if object OBJ has been allocated from obstack H.
- This is here for debugging.
- If you use it in a program, you are probably losing. */
-
-/* Suppress -Wmissing-prototypes warning. We don't want to declare this in
- obstack.h because it is just for debugging. */
-int _obstack_allocated_p (struct obstack *h, POINTER obj);
-
-int
-_obstack_allocated_p (struct obstack *h, POINTER obj)
-{
- register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */
- register struct _obstack_chunk *plp; /* point to previous chunk if any */
-
- lp = (h)->chunk;
- /* We use >= rather than > since the object cannot be exactly at
- the beginning of the chunk but might be an empty object exactly
- at the end of an adjacent chunk. */
- while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj))
- {
- plp = lp->prev;
- lp = plp;
- }
- return lp != 0;
-}
-
-/* Free objects in obstack H, including OBJ and everything allocate
- more recently than OBJ. If OBJ is zero, free everything in H. */
-
-#undef obstack_free
-
-/* This function has two names with identical definitions.
- This is the first one, called from non-ANSI code. */
-
-void
-_obstack_free (struct obstack *h, POINTER obj)
-{
- register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */
- register struct _obstack_chunk *plp; /* point to previous chunk if any */
-
- lp = h->chunk;
- /* We use >= because there cannot be an object at the beginning of a chunk.
- But there can be an empty object at that address
- at the end of another chunk. */
- while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj))
- {
- plp = lp->prev;
- CALL_FREEFUN (h, lp);
- lp = plp;
- /* If we switch chunks, we can't tell whether the new current
- chunk contains an empty object, so assume that it may. */
- h->maybe_empty_object = 1;
- }
- if (lp)
- {
- h->object_base = h->next_free = (char *) (obj);
- h->chunk_limit = lp->limit;
- h->chunk = lp;
- }
- else if (obj != 0)
- /* obj is not in any of the chunks! */
- abort ();
-}
-
-/* This function is used from ANSI code. */
-
-void
-obstack_free (struct obstack *h, POINTER obj)
-{
- register struct _obstack_chunk *lp; /* below addr of any objects in this chunk */
- register struct _obstack_chunk *plp; /* point to previous chunk if any */
-
- lp = h->chunk;
- /* We use >= because there cannot be an object at the beginning of a chunk.
- But there can be an empty object at that address
- at the end of another chunk. */
- while (lp != 0 && ((POINTER) lp >= obj || (POINTER) (lp)->limit < obj))
- {
- plp = lp->prev;
- CALL_FREEFUN (h, lp);
- lp = plp;
- /* If we switch chunks, we can't tell whether the new current
- chunk contains an empty object, so assume that it may. */
- h->maybe_empty_object = 1;
- }
- if (lp)
- {
- h->object_base = h->next_free = (char *) (obj);
- h->chunk_limit = lp->limit;
- h->chunk = lp;
- }
- else if (obj != 0)
- /* obj is not in any of the chunks! */
- abort ();
-}
-
-int
-_obstack_memory_used (struct obstack *h)
-{
- register struct _obstack_chunk* lp;
- register int nbytes = 0;
-
- for (lp = h->chunk; lp != 0; lp = lp->prev)
- {
- nbytes += lp->limit - (char *) lp;
- }
- return nbytes;
-}
-
-/* Define the error handler. */
-#ifndef _
-# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
-# include <libintl.h>
-# ifndef _
-# define _(Str) gettext (Str)
-# endif
-# else
-# define _(Str) (Str)
-# endif
-#endif
-
-static void
-print_and_abort (void)
-{
- fputs (_("memory exhausted\n"), stderr);
- exit (obstack_exit_failure);
-}
-
-#if 0
-/* These are now turned off because the applications do not use it
- and it uses bcopy via obstack_grow, which causes trouble on sysV. */
-
-/* Now define the functional versions of the obstack macros.
- Define them to simply use the corresponding macros to do the job. */
-
-/* The function names appear in parentheses in order to prevent
- the macro-definitions of the names from being expanded there. */
-
-POINTER (obstack_base) (struct obstack *obstack)
-{
- return obstack_base (obstack);
-}
-
-POINTER (obstack_next_free) (struct obstack *obstack)
-{
- return obstack_next_free (obstack);
-}
-
-int (obstack_object_size) (struct obstack *obstack)
-{
- return obstack_object_size (obstack);
-}
-
-int (obstack_room) (struct obstack *obstack)
-{
- return obstack_room (obstack);
-}
-
-int (obstack_make_room) (struct obstack *obstack, int length)
-{
- return obstack_make_room (obstack, length);
-}
-
-void (obstack_grow) (struct obstack *obstack, POINTER pointer, int length)
-{
- obstack_grow (obstack, pointer, length);
-}
-
-void (obstack_grow0) (struct obstack *obstack, POINTER pointer, int length)
-{
- obstack_grow0 (obstack, pointer, length);
-}
-
-void (obstack_1grow) (struct obstack *obstack, int character)
-{
- obstack_1grow (obstack, character);
-}
-
-void (obstack_blank) (struct obstack *obstack, int length)
-{
- obstack_blank (obstack, length);
-}
-
-void (obstack_1grow_fast) (struct obstack *obstack, int character)
-{
- obstack_1grow_fast (obstack, character);
-}
-
-void (obstack_blank_fast) (struct obstack *obstack, int length)
-{
- obstack_blank_fast (obstack, length);
-}
-
-POINTER (obstack_finish) (struct obstack *obstack)
-{
- return obstack_finish (obstack);
-}
-
-POINTER (obstack_alloc) (struct obstack *obstack, int length)
-{
- return obstack_alloc (obstack, length);
-}
-
-POINTER (obstack_copy) (struct obstack *obstack, POINTER pointer, int length)
-{
- return obstack_copy (obstack, pointer, length);
-}
-
-POINTER (obstack_copy0) (struct obstack *obstack, POINTER pointer, int length)
-{
- return obstack_copy0 (obstack, pointer, length);
-}
-
-#endif /* 0 */
-
-#endif /* !ELIDE_CODE */
diff --git a/gcc-4.7/libiberty/obstacks.texi b/gcc-4.7/libiberty/obstacks.texi
deleted file mode 100644
index a1b1b478c..000000000
--- a/gcc-4.7/libiberty/obstacks.texi
+++ /dev/null
@@ -1,758 +0,0 @@
-@node Obstacks,Licenses,Functions,Top
-@chapter Obstacks
-@cindex obstacks
-
-An @dfn{obstack} is a pool of memory containing a stack of objects. You
-can create any number of separate obstacks, and then allocate objects in
-specified obstacks. Within each obstack, the last object allocated must
-always be the first one freed, but distinct obstacks are independent of
-each other.
-
-Aside from this one constraint of order of freeing, obstacks are totally
-general: an obstack can contain any number of objects of any size. They
-are implemented with macros, so allocation is usually very fast as long as
-the objects are usually small. And the only space overhead per object is
-the padding needed to start each object on a suitable boundary.
-
-@menu
-* Creating Obstacks:: How to declare an obstack in your program.
-* Preparing for Obstacks:: Preparations needed before you can
- use obstacks.
-* Allocation in an Obstack:: Allocating objects in an obstack.
-* Freeing Obstack Objects:: Freeing objects in an obstack.
-* Obstack Functions:: The obstack functions are both
- functions and macros.
-* Growing Objects:: Making an object bigger by stages.
-* Extra Fast Growing:: Extra-high-efficiency (though more
- complicated) growing objects.
-* Status of an Obstack:: Inquiries about the status of an obstack.
-* Obstacks Data Alignment:: Controlling alignment of objects in obstacks.
-* Obstack Chunks:: How obstacks obtain and release chunks;
- efficiency considerations.
-* Summary of Obstacks::
-@end menu
-
-@node Creating Obstacks
-@section Creating Obstacks
-
-The utilities for manipulating obstacks are declared in the header
-file @file{obstack.h}.
-@pindex obstack.h
-
-@comment obstack.h
-@comment GNU
-@deftp {Data Type} {struct obstack}
-An obstack is represented by a data structure of type @code{struct
-obstack}. This structure has a small fixed size; it records the status
-of the obstack and how to find the space in which objects are allocated.
-It does not contain any of the objects themselves. You should not try
-to access the contents of the structure directly; use only the functions
-described in this chapter.
-@end deftp
-
-You can declare variables of type @code{struct obstack} and use them as
-obstacks, or you can allocate obstacks dynamically like any other kind
-of object. Dynamic allocation of obstacks allows your program to have a
-variable number of different stacks. (You can even allocate an
-obstack structure in another obstack, but this is rarely useful.)
-
-All the functions that work with obstacks require you to specify which
-obstack to use. You do this with a pointer of type @code{struct obstack
-*}. In the following, we often say ``an obstack'' when strictly
-speaking the object at hand is such a pointer.
-
-The objects in the obstack are packed into large blocks called
-@dfn{chunks}. The @code{struct obstack} structure points to a chain of
-the chunks currently in use.
-
-The obstack library obtains a new chunk whenever you allocate an object
-that won't fit in the previous chunk. Since the obstack library manages
-chunks automatically, you don't need to pay much attention to them, but
-you do need to supply a function which the obstack library should use to
-get a chunk. Usually you supply a function which uses @code{malloc}
-directly or indirectly. You must also supply a function to free a chunk.
-These matters are described in the following section.
-
-@node Preparing for Obstacks
-@section Preparing for Using Obstacks
-
-Each source file in which you plan to use the obstack functions
-must include the header file @file{obstack.h}, like this:
-
-@smallexample
-#include <obstack.h>
-@end smallexample
-
-@findex obstack_chunk_alloc
-@findex obstack_chunk_free
-Also, if the source file uses the macro @code{obstack_init}, it must
-declare or define two functions or macros that will be called by the
-obstack library. One, @code{obstack_chunk_alloc}, is used to allocate
-the chunks of memory into which objects are packed. The other,
-@code{obstack_chunk_free}, is used to return chunks when the objects in
-them are freed. These macros should appear before any use of obstacks
-in the source file.
-
-Usually these are defined to use @code{malloc} via the intermediary
-@code{xmalloc} (@pxref{Unconstrained Allocation, , , libc, The GNU C Library Reference Manual}). This is done with
-the following pair of macro definitions:
-
-@smallexample
-#define obstack_chunk_alloc xmalloc
-#define obstack_chunk_free free
-@end smallexample
-
-@noindent
-Though the memory you get using obstacks really comes from @code{malloc},
-using obstacks is faster because @code{malloc} is called less often, for
-larger blocks of memory. @xref{Obstack Chunks}, for full details.
-
-At run time, before the program can use a @code{struct obstack} object
-as an obstack, it must initialize the obstack by calling
-@code{obstack_init}.
-
-@comment obstack.h
-@comment GNU
-@deftypefun int obstack_init (struct obstack *@var{obstack-ptr})
-Initialize obstack @var{obstack-ptr} for allocation of objects. This
-function calls the obstack's @code{obstack_chunk_alloc} function. If
-allocation of memory fails, the function pointed to by
-@code{obstack_alloc_failed_handler} is called. The @code{obstack_init}
-function always returns 1 (Compatibility notice: Former versions of
-obstack returned 0 if allocation failed).
-@end deftypefun
-
-Here are two examples of how to allocate the space for an obstack and
-initialize it. First, an obstack that is a static variable:
-
-@smallexample
-static struct obstack myobstack;
-@dots{}
-obstack_init (&myobstack);
-@end smallexample
-
-@noindent
-Second, an obstack that is itself dynamically allocated:
-
-@smallexample
-struct obstack *myobstack_ptr
- = (struct obstack *) xmalloc (sizeof (struct obstack));
-
-obstack_init (myobstack_ptr);
-@end smallexample
-
-@comment obstack.h
-@comment GNU
-@defvar obstack_alloc_failed_handler
-The value of this variable is a pointer to a function that
-@code{obstack} uses when @code{obstack_chunk_alloc} fails to allocate
-memory. The default action is to print a message and abort.
-You should supply a function that either calls @code{exit}
-(@pxref{Program Termination, , , libc, The GNU C Library Reference Manual}) or @code{longjmp} (@pxref{Non-Local
-Exits, , , libc, The GNU C Library Reference Manual}) and doesn't return.
-
-@smallexample
-void my_obstack_alloc_failed (void)
-@dots{}
-obstack_alloc_failed_handler = &my_obstack_alloc_failed;
-@end smallexample
-
-@end defvar
-
-@node Allocation in an Obstack
-@section Allocation in an Obstack
-@cindex allocation (obstacks)
-
-The most direct way to allocate an object in an obstack is with
-@code{obstack_alloc}, which is invoked almost like @code{malloc}.
-
-@comment obstack.h
-@comment GNU
-@deftypefun {void *} obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size})
-This allocates an uninitialized block of @var{size} bytes in an obstack
-and returns its address. Here @var{obstack-ptr} specifies which obstack
-to allocate the block in; it is the address of the @code{struct obstack}
-object which represents the obstack. Each obstack function or macro
-requires you to specify an @var{obstack-ptr} as the first argument.
-
-This function calls the obstack's @code{obstack_chunk_alloc} function if
-it needs to allocate a new chunk of memory; it calls
-@code{obstack_alloc_failed_handler} if allocation of memory by
-@code{obstack_chunk_alloc} failed.
-@end deftypefun
-
-For example, here is a function that allocates a copy of a string @var{str}
-in a specific obstack, which is in the variable @code{string_obstack}:
-
-@smallexample
-struct obstack string_obstack;
-
-char *
-copystring (char *string)
-@{
- size_t len = strlen (string) + 1;
- char *s = (char *) obstack_alloc (&string_obstack, len);
- memcpy (s, string, len);
- return s;
-@}
-@end smallexample
-
-To allocate a block with specified contents, use the function
-@code{obstack_copy}, declared like this:
-
-@comment obstack.h
-@comment GNU
-@deftypefun {void *} obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
-This allocates a block and initializes it by copying @var{size}
-bytes of data starting at @var{address}. It calls
-@code{obstack_alloc_failed_handler} if allocation of memory by
-@code{obstack_chunk_alloc} failed.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun {void *} obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
-Like @code{obstack_copy}, but appends an extra byte containing a null
-character. This extra byte is not counted in the argument @var{size}.
-@end deftypefun
-
-The @code{obstack_copy0} function is convenient for copying a sequence
-of characters into an obstack as a null-terminated string. Here is an
-example of its use:
-
-@smallexample
-char *
-obstack_savestring (char *addr, int size)
-@{
- return obstack_copy0 (&myobstack, addr, size);
-@}
-@end smallexample
-
-@noindent
-Contrast this with the previous example of @code{savestring} using
-@code{malloc} (@pxref{Basic Allocation, , , libc, The GNU C Library Reference Manual}).
-
-@node Freeing Obstack Objects
-@section Freeing Objects in an Obstack
-@cindex freeing (obstacks)
-
-To free an object allocated in an obstack, use the function
-@code{obstack_free}. Since the obstack is a stack of objects, freeing
-one object automatically frees all other objects allocated more recently
-in the same obstack.
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object})
-If @var{object} is a null pointer, everything allocated in the obstack
-is freed. Otherwise, @var{object} must be the address of an object
-allocated in the obstack. Then @var{object} is freed, along with
-everything allocated in @var{obstack} since @var{object}.
-@end deftypefun
-
-Note that if @var{object} is a null pointer, the result is an
-uninitialized obstack. To free all memory in an obstack but leave it
-valid for further allocation, call @code{obstack_free} with the address
-of the first object allocated on the obstack:
-
-@smallexample
-obstack_free (obstack_ptr, first_object_allocated_ptr);
-@end smallexample
-
-Recall that the objects in an obstack are grouped into chunks. When all
-the objects in a chunk become free, the obstack library automatically
-frees the chunk (@pxref{Preparing for Obstacks}). Then other
-obstacks, or non-obstack allocation, can reuse the space of the chunk.
-
-@node Obstack Functions
-@section Obstack Functions and Macros
-@cindex macros
-
-The interfaces for using obstacks may be defined either as functions or
-as macros, depending on the compiler. The obstack facility works with
-all C compilers, including both @w{ISO C} and traditional C, but there are
-precautions you must take if you plan to use compilers other than GNU C.
-
-If you are using an old-fashioned @w{non-ISO C} compiler, all the obstack
-``functions'' are actually defined only as macros. You can call these
-macros like functions, but you cannot use them in any other way (for
-example, you cannot take their address).
-
-Calling the macros requires a special precaution: namely, the first
-operand (the obstack pointer) may not contain any side effects, because
-it may be computed more than once. For example, if you write this:
-
-@smallexample
-obstack_alloc (get_obstack (), 4);
-@end smallexample
-
-@noindent
-you will find that @code{get_obstack} may be called several times.
-If you use @code{*obstack_list_ptr++} as the obstack pointer argument,
-you will get very strange results since the incrementation may occur
-several times.
-
-In @w{ISO C}, each function has both a macro definition and a function
-definition. The function definition is used if you take the address of the
-function without calling it. An ordinary call uses the macro definition by
-default, but you can request the function definition instead by writing the
-function name in parentheses, as shown here:
-
-@smallexample
-char *x;
-void *(*funcp) ();
-/* @r{Use the macro}. */
-x = (char *) obstack_alloc (obptr, size);
-/* @r{Call the function}. */
-x = (char *) (obstack_alloc) (obptr, size);
-/* @r{Take the address of the function}. */
-funcp = obstack_alloc;
-@end smallexample
-
-@noindent
-This is the same situation that exists in @w{ISO C} for the standard library
-functions. @xref{Macro Definitions, , , libc, The GNU C Library Reference Manual}.
-
-@strong{Warning:} When you do use the macros, you must observe the
-precaution of avoiding side effects in the first operand, even in @w{ISO C}.
-
-If you use the GNU C compiler, this precaution is not necessary, because
-various language extensions in GNU C permit defining the macros so as to
-compute each argument only once.
-
-@node Growing Objects
-@section Growing Objects
-@cindex growing objects (in obstacks)
-@cindex changing the size of a block (obstacks)
-
-Because memory in obstack chunks is used sequentially, it is possible to
-build up an object step by step, adding one or more bytes at a time to the
-end of the object. With this technique, you do not need to know how much
-data you will put in the object until you come to the end of it. We call
-this the technique of @dfn{growing objects}. The special functions
-for adding data to the growing object are described in this section.
-
-You don't need to do anything special when you start to grow an object.
-Using one of the functions to add data to the object automatically
-starts it. However, it is necessary to say explicitly when the object is
-finished. This is done with the function @code{obstack_finish}.
-
-The actual address of the object thus built up is not known until the
-object is finished. Until then, it always remains possible that you will
-add so much data that the object must be copied into a new chunk.
-
-While the obstack is in use for a growing object, you cannot use it for
-ordinary allocation of another object. If you try to do so, the space
-already added to the growing object will become part of the other object.
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size})
-The most basic function for adding to a growing object is
-@code{obstack_blank}, which adds space without initializing it.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
-To add a block of initialized space, use @code{obstack_grow}, which is
-the growing-object analogue of @code{obstack_copy}. It adds @var{size}
-bytes of data to the growing object, copying the contents from
-@var{data}.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{data}, int @var{size})
-This is the growing-object analogue of @code{obstack_copy0}. It adds
-@var{size} bytes copied from @var{data}, followed by an additional null
-character.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{c})
-To add one character at a time, use the function @code{obstack_1grow}.
-It adds a single byte containing @var{c} to the growing object.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_ptr_grow (struct obstack *@var{obstack-ptr}, void *@var{data})
-Adding the value of a pointer one can use the function
-@code{obstack_ptr_grow}. It adds @code{sizeof (void *)} bytes
-containing the value of @var{data}.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_int_grow (struct obstack *@var{obstack-ptr}, int @var{data})
-A single value of type @code{int} can be added by using the
-@code{obstack_int_grow} function. It adds @code{sizeof (int)} bytes to
-the growing object and initializes them with the value of @var{data}.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun {void *} obstack_finish (struct obstack *@var{obstack-ptr})
-When you are finished growing the object, use the function
-@code{obstack_finish} to close it off and return its final address.
-
-Once you have finished the object, the obstack is available for ordinary
-allocation or for growing another object.
-
-This function can return a null pointer under the same conditions as
-@code{obstack_alloc} (@pxref{Allocation in an Obstack}).
-@end deftypefun
-
-When you build an object by growing it, you will probably need to know
-afterward how long it became. You need not keep track of this as you grow
-the object, because you can find out the length from the obstack just
-before finishing the object with the function @code{obstack_object_size},
-declared as follows:
-
-@comment obstack.h
-@comment GNU
-@deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
-This function returns the current size of the growing object, in bytes.
-Remember to call this function @emph{before} finishing the object.
-After it is finished, @code{obstack_object_size} will return zero.
-@end deftypefun
-
-If you have started growing an object and wish to cancel it, you should
-finish it and then free it, like this:
-
-@smallexample
-obstack_free (obstack_ptr, obstack_finish (obstack_ptr));
-@end smallexample
-
-@noindent
-This has no effect if no object was growing.
-
-@cindex shrinking objects
-You can use @code{obstack_blank} with a negative size argument to make
-the current object smaller. Just don't try to shrink it beyond zero
-length---there's no telling what will happen if you do that.
-
-@node Extra Fast Growing
-@section Extra Fast Growing Objects
-@cindex efficiency and obstacks
-
-The usual functions for growing objects incur overhead for checking
-whether there is room for the new growth in the current chunk. If you
-are frequently constructing objects in small steps of growth, this
-overhead can be significant.
-
-You can reduce the overhead by using special ``fast growth''
-functions that grow the object without checking. In order to have a
-robust program, you must do the checking yourself. If you do this checking
-in the simplest way each time you are about to add data to the object, you
-have not saved anything, because that is what the ordinary growth
-functions do. But if you can arrange to check less often, or check
-more efficiently, then you make the program faster.
-
-The function @code{obstack_room} returns the amount of room available
-in the current chunk. It is declared as follows:
-
-@comment obstack.h
-@comment GNU
-@deftypefun int obstack_room (struct obstack *@var{obstack-ptr})
-This returns the number of bytes that can be added safely to the current
-growing object (or to an object about to be started) in obstack
-@var{obstack} using the fast growth functions.
-@end deftypefun
-
-While you know there is room, you can use these fast growth functions
-for adding data to a growing object:
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{c})
-The function @code{obstack_1grow_fast} adds one byte containing the
-character @var{c} to the growing object in obstack @var{obstack-ptr}.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_ptr_grow_fast (struct obstack *@var{obstack-ptr}, void *@var{data})
-The function @code{obstack_ptr_grow_fast} adds @code{sizeof (void *)}
-bytes containing the value of @var{data} to the growing object in
-obstack @var{obstack-ptr}.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_int_grow_fast (struct obstack *@var{obstack-ptr}, int @var{data})
-The function @code{obstack_int_grow_fast} adds @code{sizeof (int)} bytes
-containing the value of @var{data} to the growing object in obstack
-@var{obstack-ptr}.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size})
-The function @code{obstack_blank_fast} adds @var{size} bytes to the
-growing object in obstack @var{obstack-ptr} without initializing them.
-@end deftypefun
-
-When you check for space using @code{obstack_room} and there is not
-enough room for what you want to add, the fast growth functions
-are not safe. In this case, simply use the corresponding ordinary
-growth function instead. Very soon this will copy the object to a
-new chunk; then there will be lots of room available again.
-
-So, each time you use an ordinary growth function, check afterward for
-sufficient space using @code{obstack_room}. Once the object is copied
-to a new chunk, there will be plenty of space again, so the program will
-start using the fast growth functions again.
-
-Here is an example:
-
-@smallexample
-@group
-void
-add_string (struct obstack *obstack, const char *ptr, int len)
-@{
- while (len > 0)
- @{
- int room = obstack_room (obstack);
- if (room == 0)
- @{
- /* @r{Not enough room. Add one character slowly,}
- @r{which may copy to a new chunk and make room.} */
- obstack_1grow (obstack, *ptr++);
- len--;
- @}
- else
- @{
- if (room > len)
- room = len;
- /* @r{Add fast as much as we have room for.} */
- len -= room;
- while (room-- > 0)
- obstack_1grow_fast (obstack, *ptr++);
- @}
- @}
-@}
-@end group
-@end smallexample
-
-@node Status of an Obstack
-@section Status of an Obstack
-@cindex obstack status
-@cindex status of obstack
-
-Here are functions that provide information on the current status of
-allocation in an obstack. You can use them to learn about an object while
-still growing it.
-
-@comment obstack.h
-@comment GNU
-@deftypefun {void *} obstack_base (struct obstack *@var{obstack-ptr})
-This function returns the tentative address of the beginning of the
-currently growing object in @var{obstack-ptr}. If you finish the object
-immediately, it will have that address. If you make it larger first, it
-may outgrow the current chunk---then its address will change!
-
-If no object is growing, this value says where the next object you
-allocate will start (once again assuming it fits in the current
-chunk).
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun {void *} obstack_next_free (struct obstack *@var{obstack-ptr})
-This function returns the address of the first free byte in the current
-chunk of obstack @var{obstack-ptr}. This is the end of the currently
-growing object. If no object is growing, @code{obstack_next_free}
-returns the same value as @code{obstack_base}.
-@end deftypefun
-
-@comment obstack.h
-@comment GNU
-@deftypefun int obstack_object_size (struct obstack *@var{obstack-ptr})
-This function returns the size in bytes of the currently growing object.
-This is equivalent to
-
-@smallexample
-obstack_next_free (@var{obstack-ptr}) - obstack_base (@var{obstack-ptr})
-@end smallexample
-@end deftypefun
-
-@node Obstacks Data Alignment
-@section Alignment of Data in Obstacks
-@cindex alignment (in obstacks)
-
-Each obstack has an @dfn{alignment boundary}; each object allocated in
-the obstack automatically starts on an address that is a multiple of the
-specified boundary. By default, this boundary is 4 bytes.
-
-To access an obstack's alignment boundary, use the macro
-@code{obstack_alignment_mask}, whose function prototype looks like
-this:
-
-@comment obstack.h
-@comment GNU
-@deftypefn Macro int obstack_alignment_mask (struct obstack *@var{obstack-ptr})
-The value is a bit mask; a bit that is 1 indicates that the corresponding
-bit in the address of an object should be 0. The mask value should be one
-less than a power of 2; the effect is that all object addresses are
-multiples of that power of 2. The default value of the mask is 3, so that
-addresses are multiples of 4. A mask value of 0 means an object can start
-on any multiple of 1 (that is, no alignment is required).
-
-The expansion of the macro @code{obstack_alignment_mask} is an lvalue,
-so you can alter the mask by assignment. For example, this statement:
-
-@smallexample
-obstack_alignment_mask (obstack_ptr) = 0;
-@end smallexample
-
-@noindent
-has the effect of turning off alignment processing in the specified obstack.
-@end deftypefn
-
-Note that a change in alignment mask does not take effect until
-@emph{after} the next time an object is allocated or finished in the
-obstack. If you are not growing an object, you can make the new
-alignment mask take effect immediately by calling @code{obstack_finish}.
-This will finish a zero-length object and then do proper alignment for
-the next object.
-
-@node Obstack Chunks
-@section Obstack Chunks
-@cindex efficiency of chunks
-@cindex chunks
-
-Obstacks work by allocating space for themselves in large chunks, and
-then parceling out space in the chunks to satisfy your requests. Chunks
-are normally 4096 bytes long unless you specify a different chunk size.
-The chunk size includes 8 bytes of overhead that are not actually used
-for storing objects. Regardless of the specified size, longer chunks
-will be allocated when necessary for long objects.
-
-The obstack library allocates chunks by calling the function
-@code{obstack_chunk_alloc}, which you must define. When a chunk is no
-longer needed because you have freed all the objects in it, the obstack
-library frees the chunk by calling @code{obstack_chunk_free}, which you
-must also define.
-
-These two must be defined (as macros) or declared (as functions) in each
-source file that uses @code{obstack_init} (@pxref{Creating Obstacks}).
-Most often they are defined as macros like this:
-
-@smallexample
-#define obstack_chunk_alloc malloc
-#define obstack_chunk_free free
-@end smallexample
-
-Note that these are simple macros (no arguments). Macro definitions with
-arguments will not work! It is necessary that @code{obstack_chunk_alloc}
-or @code{obstack_chunk_free}, alone, expand into a function name if it is
-not itself a function name.
-
-If you allocate chunks with @code{malloc}, the chunk size should be a
-power of 2. The default chunk size, 4096, was chosen because it is long
-enough to satisfy many typical requests on the obstack yet short enough
-not to waste too much memory in the portion of the last chunk not yet used.
-
-@comment obstack.h
-@comment GNU
-@deftypefn Macro int obstack_chunk_size (struct obstack *@var{obstack-ptr})
-This returns the chunk size of the given obstack.
-@end deftypefn
-
-Since this macro expands to an lvalue, you can specify a new chunk size by
-assigning it a new value. Doing so does not affect the chunks already
-allocated, but will change the size of chunks allocated for that particular
-obstack in the future. It is unlikely to be useful to make the chunk size
-smaller, but making it larger might improve efficiency if you are
-allocating many objects whose size is comparable to the chunk size. Here
-is how to do so cleanly:
-
-@smallexample
-if (obstack_chunk_size (obstack_ptr) < @var{new-chunk-size})
- obstack_chunk_size (obstack_ptr) = @var{new-chunk-size};
-@end smallexample
-
-@node Summary of Obstacks
-@section Summary of Obstack Functions
-
-Here is a summary of all the functions associated with obstacks. Each
-takes the address of an obstack (@code{struct obstack *}) as its first
-argument.
-
-@table @code
-@item void obstack_init (struct obstack *@var{obstack-ptr})
-Initialize use of an obstack. @xref{Creating Obstacks}.
-
-@item void *obstack_alloc (struct obstack *@var{obstack-ptr}, int @var{size})
-Allocate an object of @var{size} uninitialized bytes.
-@xref{Allocation in an Obstack}.
-
-@item void *obstack_copy (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
-Allocate an object of @var{size} bytes, with contents copied from
-@var{address}. @xref{Allocation in an Obstack}.
-
-@item void *obstack_copy0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
-Allocate an object of @var{size}+1 bytes, with @var{size} of them copied
-from @var{address}, followed by a null character at the end.
-@xref{Allocation in an Obstack}.
-
-@item void obstack_free (struct obstack *@var{obstack-ptr}, void *@var{object})
-Free @var{object} (and everything allocated in the specified obstack
-more recently than @var{object}). @xref{Freeing Obstack Objects}.
-
-@item void obstack_blank (struct obstack *@var{obstack-ptr}, int @var{size})
-Add @var{size} uninitialized bytes to a growing object.
-@xref{Growing Objects}.
-
-@item void obstack_grow (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
-Add @var{size} bytes, copied from @var{address}, to a growing object.
-@xref{Growing Objects}.
-
-@item void obstack_grow0 (struct obstack *@var{obstack-ptr}, void *@var{address}, int @var{size})
-Add @var{size} bytes, copied from @var{address}, to a growing object,
-and then add another byte containing a null character. @xref{Growing
-Objects}.
-
-@item void obstack_1grow (struct obstack *@var{obstack-ptr}, char @var{data-char})
-Add one byte containing @var{data-char} to a growing object.
-@xref{Growing Objects}.
-
-@item void *obstack_finish (struct obstack *@var{obstack-ptr})
-Finalize the object that is growing and return its permanent address.
-@xref{Growing Objects}.
-
-@item int obstack_object_size (struct obstack *@var{obstack-ptr})
-Get the current size of the currently growing object. @xref{Growing
-Objects}.
-
-@item void obstack_blank_fast (struct obstack *@var{obstack-ptr}, int @var{size})
-Add @var{size} uninitialized bytes to a growing object without checking
-that there is enough room. @xref{Extra Fast Growing}.
-
-@item void obstack_1grow_fast (struct obstack *@var{obstack-ptr}, char @var{data-char})
-Add one byte containing @var{data-char} to a growing object without
-checking that there is enough room. @xref{Extra Fast Growing}.
-
-@item int obstack_room (struct obstack *@var{obstack-ptr})
-Get the amount of room now available for growing the current object.
-@xref{Extra Fast Growing}.
-
-@item int obstack_alignment_mask (struct obstack *@var{obstack-ptr})
-The mask used for aligning the beginning of an object. This is an
-lvalue. @xref{Obstacks Data Alignment}.
-
-@item int obstack_chunk_size (struct obstack *@var{obstack-ptr})
-The size for allocating chunks. This is an lvalue. @xref{Obstack Chunks}.
-
-@item void *obstack_base (struct obstack *@var{obstack-ptr})
-Tentative starting address of the currently growing object.
-@xref{Status of an Obstack}.
-
-@item void *obstack_next_free (struct obstack *@var{obstack-ptr})
-Address just after the end of the currently growing object.
-@xref{Status of an Obstack}.
-@end table
-
diff --git a/gcc-4.7/libiberty/partition.c b/gcc-4.7/libiberty/partition.c
deleted file mode 100644
index 5f0745c91..000000000
--- a/gcc-4.7/libiberty/partition.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* List implementation of a partition of consecutive integers.
- Copyright (C) 2000, 2001 Free Software Foundation, Inc.
- Contributed by CodeSourcery, LLC.
-
- 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, 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#include "libiberty.h"
-#include "partition.h"
-
-static int elem_compare (const void *, const void *);
-
-/* Creates a partition of NUM_ELEMENTS elements. Initially each
- element is in a class by itself. */
-
-partition
-partition_new (int num_elements)
-{
- int e;
-
- partition part = (partition)
- xmalloc (sizeof (struct partition_def) +
- (num_elements - 1) * sizeof (struct partition_elem));
- part->num_elements = num_elements;
- for (e = 0; e < num_elements; ++e)
- {
- part->elements[e].class_element = e;
- part->elements[e].next = &(part->elements[e]);
- part->elements[e].class_count = 1;
- }
-
- return part;
-}
-
-/* Freeds a partition. */
-
-void
-partition_delete (partition part)
-{
- free (part);
-}
-
-/* Unites the classes containing ELEM1 and ELEM2 into a single class
- of partition PART. If ELEM1 and ELEM2 are already in the same
- class, does nothing. Returns the canonical element of the
- resulting union class. */
-
-int
-partition_union (partition part, int elem1, int elem2)
-{
- struct partition_elem *elements = part->elements;
- struct partition_elem *e1;
- struct partition_elem *e2;
- struct partition_elem *p;
- struct partition_elem *old_next;
- /* The canonical element of the resulting union class. */
- int class_element = elements[elem1].class_element;
-
- /* If they're already in the same class, do nothing. */
- if (class_element == elements[elem2].class_element)
- return class_element;
-
- /* Make sure ELEM1 is in the larger class of the two. If not, swap
- them. This way we always scan the shorter list. */
- if (elements[elem1].class_count < elements[elem2].class_count)
- {
- int temp = elem1;
- elem1 = elem2;
- elem2 = temp;
- class_element = elements[elem1].class_element;
- }
-
- e1 = &(elements[elem1]);
- e2 = &(elements[elem2]);
-
- /* Keep a count of the number of elements in the list. */
- elements[class_element].class_count
- += elements[e2->class_element].class_count;
-
- /* Update the class fields in elem2's class list. */
- e2->class_element = class_element;
- for (p = e2->next; p != e2; p = p->next)
- p->class_element = class_element;
-
- /* Splice ELEM2's class list into ELEM1's. These are circular
- lists. */
- old_next = e1->next;
- e1->next = e2->next;
- e2->next = old_next;
-
- return class_element;
-}
-
-/* Compare elements ELEM1 and ELEM2 from array of integers, given a
- pointer to each. Used to qsort such an array. */
-
-static int
-elem_compare (const void *elem1, const void *elem2)
-{
- int e1 = * (const int *) elem1;
- int e2 = * (const int *) elem2;
- if (e1 < e2)
- return -1;
- else if (e1 > e2)
- return 1;
- else
- return 0;
-}
-
-/* Prints PART to the file pointer FP. The elements of each
- class are sorted. */
-
-void
-partition_print (partition part, FILE *fp)
-{
- char *done;
- int num_elements = part->num_elements;
- struct partition_elem *elements = part->elements;
- int *class_elements;
- int e;
-
- /* Flag the elements we've already printed. */
- done = (char *) xmalloc (num_elements);
- memset (done, 0, num_elements);
-
- /* A buffer used to sort elements in a class. */
- class_elements = (int *) xmalloc (num_elements * sizeof (int));
-
- fputc ('[', fp);
- for (e = 0; e < num_elements; ++e)
- /* If we haven't printed this element, print its entire class. */
- if (! done[e])
- {
- int c = e;
- int count = elements[elements[e].class_element].class_count;
- int i;
-
- /* Collect the elements in this class. */
- for (i = 0; i < count; ++i) {
- class_elements[i] = c;
- done[c] = 1;
- c = elements[c].next - elements;
- }
- /* Sort them. */
- qsort ((void *) class_elements, count, sizeof (int), elem_compare);
- /* Print them. */
- fputc ('(', fp);
- for (i = 0; i < count; ++i)
- fprintf (fp, i == 0 ? "%d" : " %d", class_elements[i]);
- fputc (')', fp);
- }
- fputc (']', fp);
-
- free (class_elements);
- free (done);
-}
-
diff --git a/gcc-4.7/libiberty/pex-common.c b/gcc-4.7/libiberty/pex-common.c
deleted file mode 100644
index 6fd3fdecd..000000000
--- a/gcc-4.7/libiberty/pex-common.c
+++ /dev/null
@@ -1,646 +0,0 @@
-/* Common code for executing a program in a sub-process.
- Copyright (C) 2005, 2010 Free Software Foundation, Inc.
- Written by Ian Lance Taylor <ian@airs.com>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-#include "libiberty.h"
-#include "pex-common.h"
-
-#include <stdio.h>
-#include <errno.h>
-#ifdef NEED_DECLARATION_ERRNO
-extern int errno;
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-extern int mkstemps (char *, int);
-
-/* This file contains subroutines for the program execution routines
- (pex_init, pex_run, etc.). This file is compiled on all
- systems. */
-
-static void pex_add_remove (struct pex_obj *, const char *, int);
-static int pex_get_status_and_time (struct pex_obj *, int, const char **,
- int *);
-
-/* Initialize a pex_obj structure. */
-
-struct pex_obj *
-pex_init_common (int flags, const char *pname, const char *tempbase,
- const struct pex_funcs *funcs)
-{
- struct pex_obj *obj;
-
- obj = XNEW (struct pex_obj);
- obj->flags = flags;
- obj->pname = pname;
- obj->tempbase = tempbase;
- obj->next_input = STDIN_FILE_NO;
- obj->next_input_name = NULL;
- obj->next_input_name_allocated = 0;
- obj->stderr_pipe = -1;
- obj->count = 0;
- obj->children = NULL;
- obj->status = NULL;
- obj->time = NULL;
- obj->number_waited = 0;
- obj->input_file = NULL;
- obj->read_output = NULL;
- obj->read_err = NULL;
- obj->remove_count = 0;
- obj->remove = NULL;
- obj->funcs = funcs;
- obj->sysdep = NULL;
- return obj;
-}
-
-/* Add a file to be removed when we are done. */
-
-static void
-pex_add_remove (struct pex_obj *obj, const char *name, int allocated)
-{
- char *add;
-
- ++obj->remove_count;
- obj->remove = XRESIZEVEC (char *, obj->remove, obj->remove_count);
- if (allocated)
- add = (char *) name;
- else
- add = xstrdup (name);
- obj->remove[obj->remove_count - 1] = add;
-}
-
-/* Generate a temporary file name based on OBJ, FLAGS, and NAME.
- Return NULL if we were unable to reserve a temporary filename.
-
- If non-NULL, the result is either allocated with malloc, or the
- same pointer as NAME. */
-static char *
-temp_file (struct pex_obj *obj, int flags, char *name)
-{
- if (name == NULL)
- {
- if (obj->tempbase == NULL)
- {
- name = make_temp_file (NULL);
- }
- else
- {
- int len = strlen (obj->tempbase);
- int out;
-
- if (len >= 6
- && strcmp (obj->tempbase + len - 6, "XXXXXX") == 0)
- name = xstrdup (obj->tempbase);
- else
- name = concat (obj->tempbase, "XXXXXX", NULL);
-
- out = mkstemps (name, 0);
- if (out < 0)
- {
- free (name);
- return NULL;
- }
-
- /* This isn't obj->funcs->close because we got the
- descriptor from mkstemps, not from a function in
- obj->funcs. Calling close here is just like what
- make_temp_file does. */
- close (out);
- }
- }
- else if ((flags & PEX_SUFFIX) != 0)
- {
- if (obj->tempbase == NULL)
- name = make_temp_file (name);
- else
- name = concat (obj->tempbase, name, NULL);
- }
-
- return name;
-}
-
-
-/* As for pex_run (), but permits the environment for the child process
- to be specified. */
-
-const char *
-pex_run_in_environment (struct pex_obj *obj, int flags, const char *executable,
- char * const * argv, char * const * env,
- const char *orig_outname, const char *errname,
- int *err)
-{
- const char *errmsg;
- int in, out, errdes;
- char *outname;
- int outname_allocated;
- int p[2];
- int toclose;
- pid_t pid;
-
- in = -1;
- out = -1;
- errdes = -1;
- outname = (char *) orig_outname;
- outname_allocated = 0;
-
- /* If the user called pex_input_file, close the file now. */
- if (obj->input_file)
- {
- if (fclose (obj->input_file) == EOF)
- {
- errmsg = "closing pipeline input file";
- goto error_exit;
- }
- obj->input_file = NULL;
- }
-
- /* Set IN. */
-
- if (obj->next_input_name != NULL)
- {
- /* We have to make sure that the previous process has completed
- before we try to read the file. */
- if (!pex_get_status_and_time (obj, 0, &errmsg, err))
- goto error_exit;
-
- in = obj->funcs->open_read (obj, obj->next_input_name,
- (flags & PEX_BINARY_INPUT) != 0);
- if (in < 0)
- {
- *err = errno;
- errmsg = "open temporary file";
- goto error_exit;
- }
- if (obj->next_input_name_allocated)
- {
- free (obj->next_input_name);
- obj->next_input_name_allocated = 0;
- }
- obj->next_input_name = NULL;
- }
- else
- {
- in = obj->next_input;
- if (in < 0)
- {
- *err = 0;
- errmsg = "pipeline already complete";
- goto error_exit;
- }
- }
-
- /* Set OUT and OBJ->NEXT_INPUT/OBJ->NEXT_INPUT_NAME. */
-
- if ((flags & PEX_LAST) != 0)
- {
- if (outname == NULL)
- out = STDOUT_FILE_NO;
- else if ((flags & PEX_SUFFIX) != 0)
- {
- outname = concat (obj->tempbase, outname, NULL);
- outname_allocated = 1;
- }
- obj->next_input = -1;
- }
- else if ((obj->flags & PEX_USE_PIPES) == 0)
- {
- outname = temp_file (obj, flags, outname);
- if (! outname)
- {
- *err = 0;
- errmsg = "could not create temporary file";
- goto error_exit;
- }
-
- if (outname != orig_outname)
- outname_allocated = 1;
-
- if ((obj->flags & PEX_SAVE_TEMPS) == 0)
- {
- pex_add_remove (obj, outname, outname_allocated);
- outname_allocated = 0;
- }
-
- /* Hand off ownership of outname to the next stage. */
- obj->next_input_name = outname;
- obj->next_input_name_allocated = outname_allocated;
- outname_allocated = 0;
- }
- else
- {
- if (obj->funcs->pipe (obj, p, (flags & PEX_BINARY_OUTPUT) != 0) < 0)
- {
- *err = errno;
- errmsg = "pipe";
- goto error_exit;
- }
-
- out = p[WRITE_PORT];
- obj->next_input = p[READ_PORT];
- }
-
- if (out < 0)
- {
- out = obj->funcs->open_write (obj, outname,
- (flags & PEX_BINARY_OUTPUT) != 0);
- if (out < 0)
- {
- *err = errno;
- errmsg = "open temporary output file";
- goto error_exit;
- }
- }
-
- if (outname_allocated)
- {
- free (outname);
- outname_allocated = 0;
- }
-
- /* Set ERRDES. */
-
- if (errname != NULL && (flags & PEX_STDERR_TO_PIPE) != 0)
- {
- *err = 0;
- errmsg = "both ERRNAME and PEX_STDERR_TO_PIPE specified.";
- goto error_exit;
- }
-
- if (obj->stderr_pipe != -1)
- {
- *err = 0;
- errmsg = "PEX_STDERR_TO_PIPE used in the middle of pipeline";
- goto error_exit;
- }
-
- if (errname == NULL)
- {
- if (flags & PEX_STDERR_TO_PIPE)
- {
- if (obj->funcs->pipe (obj, p, (flags & PEX_BINARY_ERROR) != 0) < 0)
- {
- *err = errno;
- errmsg = "pipe";
- goto error_exit;
- }
-
- errdes = p[WRITE_PORT];
- obj->stderr_pipe = p[READ_PORT];
- }
- else
- {
- errdes = STDERR_FILE_NO;
- }
- }
- else
- {
- errdes = obj->funcs->open_write (obj, errname,
- (flags & PEX_BINARY_ERROR) != 0);
- if (errdes < 0)
- {
- *err = errno;
- errmsg = "open error file";
- goto error_exit;
- }
- }
-
- /* If we are using pipes, the child process has to close the next
- input pipe. */
-
- if ((obj->flags & PEX_USE_PIPES) == 0)
- toclose = -1;
- else
- toclose = obj->next_input;
-
- /* Run the program. */
-
- pid = obj->funcs->exec_child (obj, flags, executable, argv, env,
- in, out, errdes, toclose, &errmsg, err);
- if (pid < 0)
- goto error_exit;
-
- ++obj->count;
- obj->children = XRESIZEVEC (pid_t, obj->children, obj->count);
- obj->children[obj->count - 1] = pid;
-
- return NULL;
-
- error_exit:
- if (in >= 0 && in != STDIN_FILE_NO)
- obj->funcs->close (obj, in);
- if (out >= 0 && out != STDOUT_FILE_NO)
- obj->funcs->close (obj, out);
- if (errdes >= 0 && errdes != STDERR_FILE_NO)
- obj->funcs->close (obj, errdes);
- if (outname_allocated)
- free (outname);
- return errmsg;
-}
-
-/* Run a program. */
-
-const char *
-pex_run (struct pex_obj *obj, int flags, const char *executable,
- char * const * argv, const char *orig_outname, const char *errname,
- int *err)
-{
- return pex_run_in_environment (obj, flags, executable, argv, NULL,
- orig_outname, errname, err);
-}
-
-/* Return a FILE pointer for a temporary file to fill with input for
- the pipeline. */
-FILE *
-pex_input_file (struct pex_obj *obj, int flags, const char *in_name)
-{
- char *name = (char *) in_name;
- FILE *f;
-
- /* This must be called before the first pipeline stage is run, and
- there must not have been any other input selected. */
- if (obj->count != 0
- || (obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO)
- || obj->next_input_name)
- {
- errno = EINVAL;
- return NULL;
- }
-
- name = temp_file (obj, flags, name);
- if (! name)
- return NULL;
-
- f = fopen (name, (flags & PEX_BINARY_OUTPUT) ? "wb" : "w");
- if (! f)
- {
- free (name);
- return NULL;
- }
-
- obj->input_file = f;
- obj->next_input_name = name;
- obj->next_input_name_allocated = (name != in_name);
-
- return f;
-}
-
-/* Return a stream for a pipe connected to the standard input of the
- first stage of the pipeline. */
-FILE *
-pex_input_pipe (struct pex_obj *obj, int binary)
-{
- int p[2];
- FILE *f;
-
- /* You must call pex_input_pipe before the first pex_run or pex_one. */
- if (obj->count > 0)
- goto usage_error;
-
- /* You must be using pipes. Implementations that don't support
- pipes clear this flag before calling pex_init_common. */
- if (! (obj->flags & PEX_USE_PIPES))
- goto usage_error;
-
- /* If we have somehow already selected other input, that's a
- mistake. */
- if ((obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO)
- || obj->next_input_name)
- goto usage_error;
-
- if (obj->funcs->pipe (obj, p, binary != 0) < 0)
- return NULL;
-
- f = obj->funcs->fdopenw (obj, p[WRITE_PORT], binary != 0);
- if (! f)
- {
- int saved_errno = errno;
- obj->funcs->close (obj, p[READ_PORT]);
- obj->funcs->close (obj, p[WRITE_PORT]);
- errno = saved_errno;
- return NULL;
- }
-
- obj->next_input = p[READ_PORT];
-
- return f;
-
- usage_error:
- errno = EINVAL;
- return NULL;
-}
-
-/* Return a FILE pointer for the output of the last program
- executed. */
-
-FILE *
-pex_read_output (struct pex_obj *obj, int binary)
-{
- if (obj->next_input_name != NULL)
- {
- const char *errmsg;
- int err;
-
- /* We have to make sure that the process has completed before we
- try to read the file. */
- if (!pex_get_status_and_time (obj, 0, &errmsg, &err))
- {
- errno = err;
- return NULL;
- }
-
- obj->read_output = fopen (obj->next_input_name, binary ? "rb" : "r");
-
- if (obj->next_input_name_allocated)
- {
- free (obj->next_input_name);
- obj->next_input_name_allocated = 0;
- }
- obj->next_input_name = NULL;
- }
- else
- {
- int o;
-
- o = obj->next_input;
- if (o < 0 || o == STDIN_FILE_NO)
- return NULL;
- obj->read_output = obj->funcs->fdopenr (obj, o, binary);
- obj->next_input = -1;
- }
-
- return obj->read_output;
-}
-
-FILE *
-pex_read_err (struct pex_obj *obj, int binary)
-{
- int o;
-
- o = obj->stderr_pipe;
- if (o < 0 || o == STDIN_FILE_NO)
- return NULL;
- obj->read_err = obj->funcs->fdopenr (obj, o, binary);
- obj->stderr_pipe = -1;
- return obj->read_err;
-}
-
-/* Get the exit status and, if requested, the resource time for all
- the child processes. Return 0 on failure, 1 on success. */
-
-static int
-pex_get_status_and_time (struct pex_obj *obj, int done, const char **errmsg,
- int *err)
-{
- int ret;
- int i;
-
- if (obj->number_waited == obj->count)
- return 1;
-
- obj->status = XRESIZEVEC (int, obj->status, obj->count);
- if ((obj->flags & PEX_RECORD_TIMES) != 0)
- obj->time = XRESIZEVEC (struct pex_time, obj->time, obj->count);
-
- ret = 1;
- for (i = obj->number_waited; i < obj->count; ++i)
- {
- if (obj->funcs->wait (obj, obj->children[i], &obj->status[i],
- obj->time == NULL ? NULL : &obj->time[i],
- done, errmsg, err) < 0)
- ret = 0;
- }
- obj->number_waited = i;
-
- return ret;
-}
-
-/* Get exit status of executed programs. */
-
-int
-pex_get_status (struct pex_obj *obj, int count, int *vector)
-{
- if (obj->status == NULL)
- {
- const char *errmsg;
- int err;
-
- if (!pex_get_status_and_time (obj, 0, &errmsg, &err))
- return 0;
- }
-
- if (count > obj->count)
- {
- memset (vector + obj->count, 0, (count - obj->count) * sizeof (int));
- count = obj->count;
- }
-
- memcpy (vector, obj->status, count * sizeof (int));
-
- return 1;
-}
-
-/* Get process times of executed programs. */
-
-int
-pex_get_times (struct pex_obj *obj, int count, struct pex_time *vector)
-{
- if (obj->status == NULL)
- {
- const char *errmsg;
- int err;
-
- if (!pex_get_status_and_time (obj, 0, &errmsg, &err))
- return 0;
- }
-
- if (obj->time == NULL)
- return 0;
-
- if (count > obj->count)
- {
- memset (vector + obj->count, 0,
- (count - obj->count) * sizeof (struct pex_time));
- count = obj->count;
- }
-
- memcpy (vector, obj->time, count * sizeof (struct pex_time));
-
- return 1;
-}
-
-/* Free a pex_obj structure. */
-
-void
-pex_free (struct pex_obj *obj)
-{
- /* Close pipe file descriptors corresponding to child's stdout and
- stderr so that the child does not hang trying to output something
- while we're waiting for it. */
- if (obj->next_input >= 0 && obj->next_input != STDIN_FILE_NO)
- obj->funcs->close (obj, obj->next_input);
- if (obj->stderr_pipe >= 0 && obj->stderr_pipe != STDIN_FILE_NO)
- obj->funcs->close (obj, obj->stderr_pipe);
- if (obj->read_output != NULL)
- fclose (obj->read_output);
- if (obj->read_err != NULL)
- fclose (obj->read_err);
-
- /* If the caller forgot to wait for the children, we do it here, to
- avoid zombies. */
- if (obj->status == NULL)
- {
- const char *errmsg;
- int err;
-
- obj->flags &= ~ PEX_RECORD_TIMES;
- pex_get_status_and_time (obj, 1, &errmsg, &err);
- }
-
- if (obj->next_input_name_allocated)
- free (obj->next_input_name);
- free (obj->children);
- free (obj->status);
- free (obj->time);
-
- if (obj->remove_count > 0)
- {
- int i;
-
- for (i = 0; i < obj->remove_count; ++i)
- {
- remove (obj->remove[i]);
- free (obj->remove[i]);
- }
- free (obj->remove);
- }
-
- if (obj->funcs->cleanup != NULL)
- obj->funcs->cleanup (obj);
-
- free (obj);
-}
diff --git a/gcc-4.7/libiberty/pex-common.h b/gcc-4.7/libiberty/pex-common.h
deleted file mode 100644
index af338e6a3..000000000
--- a/gcc-4.7/libiberty/pex-common.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/* Utilities to execute a program in a subprocess (possibly linked by pipes
- with other subprocesses), and wait for it. Shared logic.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004
- Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifndef PEX_COMMON_H
-#define PEX_COMMON_H
-
-#include "config.h"
-#include "libiberty.h"
-#include <stdio.h>
-
-/* pid_t is may defined by config.h or sys/types.h needs to be
- included. */
-#if !defined(pid_t) && defined(HAVE_SYS_TYPES_H)
-#include <sys/types.h>
-#endif
-
-#define install_error_msg "installation problem, cannot exec `%s'"
-
-/* stdin file number. */
-#define STDIN_FILE_NO 0
-
-/* stdout file number. */
-#define STDOUT_FILE_NO 1
-
-/* stderr file number. */
-#define STDERR_FILE_NO 2
-
-/* value of `pipe': port index for reading. */
-#define READ_PORT 0
-
-/* value of `pipe': port index for writing. */
-#define WRITE_PORT 1
-
-/* The structure used by pex_init and friends. */
-
-struct pex_obj
-{
- /* Flags. */
- int flags;
- /* Name of calling program, for error messages. */
- const char *pname;
- /* Base name to use for temporary files. */
- const char *tempbase;
- /* Pipe to use as stdin for next process. */
- int next_input;
- /* File name to use as stdin for next process. */
- char *next_input_name;
- /* Whether next_input_name was allocated using malloc. */
- int next_input_name_allocated;
- /* If not -1, stderr pipe from the last process. */
- int stderr_pipe;
- /* Number of child processes. */
- int count;
- /* PIDs of child processes; array allocated using malloc. */
- pid_t *children;
- /* Exit statuses of child processes; array allocated using malloc. */
- int *status;
- /* Time used by child processes; array allocated using malloc. */
- struct pex_time *time;
- /* Number of children we have already waited for. */
- int number_waited;
- /* FILE created by pex_input_file. */
- FILE *input_file;
- /* FILE created by pex_read_output. */
- FILE *read_output;
- /* FILE created by pex_read_err. */
- FILE *read_err;
- /* Number of temporary files to remove. */
- int remove_count;
- /* List of temporary files to remove; array allocated using malloc
- of strings allocated using malloc. */
- char **remove;
- /* Pointers to system dependent functions. */
- const struct pex_funcs *funcs;
- /* For use by system dependent code. */
- void *sysdep;
-};
-
-/* Functions passed to pex_run_common. */
-
-struct pex_funcs
-{
- /* Open file NAME for reading. If BINARY is non-zero, open in
- binary mode. Return >= 0 on success, -1 on error. */
- int (*open_read) (struct pex_obj *, const char */* name */, int /* binary */);
- /* Open file NAME for writing. If BINARY is non-zero, open in
- binary mode. Return >= 0 on success, -1 on error. */
- int (*open_write) (struct pex_obj *, const char */* name */,
- int /* binary */);
- /* Execute a child process. FLAGS, EXECUTABLE, ARGV, ERR are from
- pex_run. IN, OUT, ERRDES, TOCLOSE are all descriptors, from
- open_read, open_write, or pipe, or they are one of STDIN_FILE_NO,
- STDOUT_FILE_NO or STDERR_FILE_NO; if IN, OUT, and ERRDES are not
- STD*_FILE_NO, they should be closed. If the descriptor TOCLOSE
- is not -1, and the system supports pipes, TOCLOSE should be
- closed in the child process. The function should handle the
- PEX_STDERR_TO_STDOUT flag. Return >= 0 on success, or -1 on
- error and set *ERRMSG and *ERR. */
- pid_t (*exec_child) (struct pex_obj *, int /* flags */,
- const char */* executable */, char * const * /* argv */,
- char * const * /* env */,
- int /* in */, int /* out */, int /* errdes */,
- int /* toclose */, const char **/* errmsg */,
- int */* err */);
- /* Close a descriptor. Return 0 on success, -1 on error. */
- int (*close) (struct pex_obj *, int);
- /* Wait for a child to complete, returning exit status in *STATUS
- and time in *TIME (if it is not null). CHILD is from fork. DONE
- is 1 if this is called via pex_free. ERRMSG and ERR are as in
- fork. Return 0 on success, -1 on error. */
- pid_t (*wait) (struct pex_obj *, pid_t /* child */, int * /* status */,
- struct pex_time * /* time */, int /* done */,
- const char ** /* errmsg */, int * /* err */);
- /* Create a pipe (only called if PEX_USE_PIPES is set) storing two
- descriptors in P[0] and P[1]. If BINARY is non-zero, open in
- binary mode. Return 0 on success, -1 on error. */
- int (*pipe) (struct pex_obj *, int * /* p */, int /* binary */);
- /* Get a FILE pointer to read from a file descriptor (only called if
- PEX_USE_PIPES is set). If BINARY is non-zero, open in binary
- mode. Return pointer on success, NULL on error. */
- FILE * (*fdopenr) (struct pex_obj *, int /* fd */, int /* binary */);
- /* Get a FILE pointer to write to the file descriptor FD (only
- called if PEX_USE_PIPES is set). If BINARY is non-zero, open in
- binary mode. Arrange for FD not to be inherited by the child
- processes. Return pointer on success, NULL on error. */
- FILE * (*fdopenw) (struct pex_obj *, int /* fd */, int /* binary */);
- /* Free any system dependent data associated with OBJ. May be
- NULL if there is nothing to do. */
- void (*cleanup) (struct pex_obj *);
-};
-
-extern struct pex_obj *pex_init_common (int, const char *, const char *,
- const struct pex_funcs *);
-
-#endif
diff --git a/gcc-4.7/libiberty/pex-djgpp.c b/gcc-4.7/libiberty/pex-djgpp.c
deleted file mode 100644
index 072113995..000000000
--- a/gcc-4.7/libiberty/pex-djgpp.c
+++ /dev/null
@@ -1,294 +0,0 @@
-/* Utilities to execute a program in a subprocess (possibly linked by pipes
- with other subprocesses), and wait for it. DJGPP specialization.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005
- Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "pex-common.h"
-
-#include <stdio.h>
-#include <errno.h>
-#ifdef NEED_DECLARATION_ERRNO
-extern int errno;
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include <string.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <sys/stat.h>
-#include <process.h>
-
-/* Use ECHILD if available, otherwise use EINVAL. */
-#ifdef ECHILD
-#define PWAIT_ERROR ECHILD
-#else
-#define PWAIT_ERROR EINVAL
-#endif
-
-static int pex_djgpp_open_read (struct pex_obj *, const char *, int);
-static int pex_djgpp_open_write (struct pex_obj *, const char *, int);
-static pid_t pex_djgpp_exec_child (struct pex_obj *, int, const char *,
- char * const *, char * const *,
- int, int, int, int,
- const char **, int *);
-static int pex_djgpp_close (struct pex_obj *, int);
-static pid_t pex_djgpp_wait (struct pex_obj *, pid_t, int *, struct pex_time *,
- int, const char **, int *);
-
-/* The list of functions we pass to the common routines. */
-
-const struct pex_funcs funcs =
-{
- pex_djgpp_open_read,
- pex_djgpp_open_write,
- pex_djgpp_exec_child,
- pex_djgpp_close,
- pex_djgpp_wait,
- NULL, /* pipe */
- NULL, /* fdopenr */
- NULL, /* fdopenw */
- NULL /* cleanup */
-};
-
-/* Return a newly initialized pex_obj structure. */
-
-struct pex_obj *
-pex_init (int flags, const char *pname, const char *tempbase)
-{
- /* DJGPP does not support pipes. */
- flags &= ~ PEX_USE_PIPES;
- return pex_init_common (flags, pname, tempbase, &funcs);
-}
-
-/* Open a file for reading. */
-
-static int
-pex_djgpp_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED,
- const char *name, int binary)
-{
- return open (name, O_RDONLY | (binary ? O_BINARY : O_TEXT));
-}
-
-/* Open a file for writing. */
-
-static int
-pex_djgpp_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED,
- const char *name, int binary)
-{
- /* Note that we can't use O_EXCL here because gcc may have already
- created the temporary file via make_temp_file. */
- return open (name,
- (O_WRONLY | O_CREAT | O_TRUNC
- | (binary ? O_BINARY : O_TEXT)),
- S_IRUSR | S_IWUSR);
-}
-
-/* Close a file. */
-
-static int
-pex_djgpp_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd)
-{
- return close (fd);
-}
-
-/* Execute a child. */
-
-static pid_t
-pex_djgpp_exec_child (struct pex_obj *obj, int flags, const char *executable,
- char * const * argv, char * const * env,
- int in, int out, int errdes,
- int toclose ATTRIBUTE_UNUSED, const char **errmsg,
- int *err)
-{
- int org_in, org_out, org_errdes;
- int status;
- int *statuses;
-
- org_in = -1;
- org_out = -1;
- org_errdes = -1;
-
- if (in != STDIN_FILE_NO)
- {
- org_in = dup (STDIN_FILE_NO);
- if (org_in < 0)
- {
- *err = errno;
- *errmsg = "dup";
- return (pid_t) -1;
- }
- if (dup2 (in, STDIN_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "dup2";
- return (pid_t) -1;
- }
- if (close (in) < 0)
- {
- *err = errno;
- *errmsg = "close";
- return (pid_t) -1;
- }
- }
-
- if (out != STDOUT_FILE_NO)
- {
- org_out = dup (STDOUT_FILE_NO);
- if (org_out < 0)
- {
- *err = errno;
- *errmsg = "dup";
- return (pid_t) -1;
- }
- if (dup2 (out, STDOUT_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "dup2";
- return (pid_t) -1;
- }
- if (close (out) < 0)
- {
- *err = errno;
- *errmsg = "close";
- return (pid_t) -1;
- }
- }
-
- if (errdes != STDERR_FILE_NO
- || (flags & PEX_STDERR_TO_STDOUT) != 0)
- {
- org_errdes = dup (STDERR_FILE_NO);
- if (org_errdes < 0)
- {
- *err = errno;
- *errmsg = "dup";
- return (pid_t) -1;
- }
- if (dup2 ((flags & PEX_STDERR_TO_STDOUT) != 0 ? STDOUT_FILE_NO : errdes,
- STDERR_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "dup2";
- return (pid_t) -1;
- }
- if (errdes != STDERR_FILE_NO)
- {
- if (close (errdes) < 0)
- {
- *err = errno;
- *errmsg = "close";
- return (pid_t) -1;
- }
- }
- }
-
- if (env)
- status = (((flags & PEX_SEARCH) != 0 ? spawnvpe : spawnve)
- (P_WAIT, executable, argv, env));
- else
- status = (((flags & PEX_SEARCH) != 0 ? spawnvp : spawnv)
- (P_WAIT, executable, argv));
-
- if (status == -1)
- {
- *err = errno;
- *errmsg = ((flags & PEX_SEARCH) != 0) ? "spawnvp" : "spawnv";
- }
-
- if (in != STDIN_FILE_NO)
- {
- if (dup2 (org_in, STDIN_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "dup2";
- return (pid_t) -1;
- }
- if (close (org_in) < 0)
- {
- *err = errno;
- *errmsg = "close";
- return (pid_t) -1;
- }
- }
-
- if (out != STDOUT_FILE_NO)
- {
- if (dup2 (org_out, STDOUT_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "dup2";
- return (pid_t) -1;
- }
- if (close (org_out) < 0)
- {
- *err = errno;
- *errmsg = "close";
- return (pid_t) -1;
- }
- }
-
- if (errdes != STDERR_FILE_NO
- || (flags & PEX_STDERR_TO_STDOUT) != 0)
- {
- if (dup2 (org_errdes, STDERR_FILE_NO) < 0)
- {
- *err = errno;
- *errmsg = "dup2";
- return (pid_t) -1;
- }
- if (close (org_errdes) < 0)
- {
- *err = errno;
- *errmsg = "close";
- return (pid_t) -1;
- }
- }
-
- /* Save the exit status for later. When we are called, obj->count
- is the number of children which have executed before this
- one. */
- statuses = (int *) obj->sysdep;
- statuses = XRESIZEVEC (int, statuses, obj->count + 1);
- statuses[obj->count] = status;
- obj->sysdep = (void *) statuses;
-
- return (pid_t) obj->count;
-}
-
-/* Wait for a child process to complete. Actually the child process
- has already completed, and we just need to return the exit
- status. */
-
-static pid_t
-pex_djgpp_wait (struct pex_obj *obj, pid_t pid, int *status,
- struct pex_time *time, int done ATTRIBUTE_UNUSED,
- const char **errmsg ATTRIBUTE_UNUSED,
- int *err ATTRIBUTE_UNUSED)
-{
- int *statuses;
-
- if (time != NULL)
- memset (time, 0, sizeof *time);
-
- statuses = (int *) obj->sysdep;
- *status = statuses[pid];
-
- return 0;
-}
diff --git a/gcc-4.7/libiberty/pex-msdos.c b/gcc-4.7/libiberty/pex-msdos.c
deleted file mode 100644
index fa0f40ac9..000000000
--- a/gcc-4.7/libiberty/pex-msdos.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/* Utilities to execute a program in a subprocess (possibly linked by pipes
- with other subprocesses), and wait for it. Generic MSDOS specialization.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2005
- Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "pex-common.h"
-
-#include <stdio.h>
-#include <errno.h>
-#ifdef NEED_DECLARATION_ERRNO
-extern int errno;
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include "safe-ctype.h"
-#include <process.h>
-
-/* The structure we keep in obj->sysdep. */
-
-#define PEX_MSDOS_FILE_COUNT 3
-
-#define PEX_MSDOS_FD_OFFSET 10
-
-struct pex_msdos
-{
- /* An array of file names. We refer to these using file descriptors
- of 10 + array index. */
- const char *files[PEX_MSDOS_FILE_COUNT];
- /* Exit statuses of programs which have been run. */
- int *statuses;
-};
-
-static int pex_msdos_open (struct pex_obj *, const char *, int);
-static int pex_msdos_open (struct pex_obj *, const char *, int);
-static int pex_msdos_fdindex (struct pex_msdos *, int);
-static pid_t pex_msdos_exec_child (struct pex_obj *, int, const char *,
- char * const *, char * const *,
- int, int, int, int,
- int, const char **, int *);
-static int pex_msdos_close (struct pex_obj *, int);
-static pid_t pex_msdos_wait (struct pex_obj *, pid_t, int *, struct pex_time *,
- int, const char **, int *);
-static void pex_msdos_cleanup (struct pex_obj *);
-
-/* The list of functions we pass to the common routines. */
-
-const struct pex_funcs funcs =
-{
- pex_msdos_open,
- pex_msdos_open,
- pex_msdos_exec_child,
- pex_msdos_close,
- pex_msdos_wait,
- NULL, /* pipe */
- NULL, /* fdopenr */
- NULL, /* fdopenw */
- pex_msdos_cleanup
-};
-
-/* Return a newly initialized pex_obj structure. */
-
-struct pex_obj *
-pex_init (int flags, const char *pname, const char *tempbase)
-{
- struct pex_obj *ret;
- int i;
-
- /* MSDOS does not support pipes. */
- flags &= ~ PEX_USE_PIPES;
-
- ret = pex_init_common (flags, pname, tempbase, funcs);
-
- ret->sysdep = XNEW (struct pex_msdos);
- for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i)
- ret->files[i] = NULL;
- ret->statuses = NULL;
-
- return ret;
-}
-
-/* Open a file. FIXME: We ignore the binary argument, since we have
- no way to handle it. */
-
-static int
-pex_msdos_open (struct pex_obj *obj, const char *name,
- int binary ATTRIBUTE_UNUSED)
-{
- struct pex_msdos *ms;
- int i;
-
- ms = (struct pex_msdos *) obj->sysdep;
-
- for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i)
- {
- if (ms->files[i] == NULL)
- {
- ms->files[i] = xstrdup (name);
- return i + PEX_MSDOS_FD_OFFSET;
- }
- }
-
- abort ();
-}
-
-/* Get the index into msdos->files associated with an open file
- descriptor. */
-
-static int
-pex_msdos_fdindex (struct pex_msdos *ms, int fd)
-{
- fd -= PEX_MSDOS_FD_OFFSET;
- if (fd < 0 || fd >= PEX_MSDOS_FILE_COUNT || ms->files[fd] == NULL)
- abort ();
- return fd;
-}
-
-
-/* Close a file. */
-
-static int
-pex_msdos_close (struct pex_obj *obj, int fd)
-{
- struct pex_msdos *ms;
- int fdinex;
-
- ms = (struct pex_msdos *) obj->sysdep;
- fdindex = pe_msdos_fdindex (ms, fd);
- free (ms->files[fdindex]);
- ms->files[fdindex] = NULL;
-}
-
-/* Execute a child. */
-
-static pid_t
-pex_msdos_exec_child (struct pex_obj *obj, int flags, const char *executable,
- char * const * argv, char * const * env, int in, int out,
- int toclose ATTRIBUTE_UNUSED,
- int errdes ATTRIBUTE_UNUSED, const char **errmsg,
- int *err)
-{
- struct pex_msdos *ms;
- char *temp_base;
- int temp_base_allocated;
- char *rf;
- int inindex;
- char *infile;
- int outindex;
- char *outfile;
- char *scmd;
- FILE *argfile;
- int i;
- int status;
-
- ms = (struct pex_msdos *) obj->sysdep;
-
- /* FIXME: I don't know how to redirect stderr, so we ignore ERRDES
- and PEX_STDERR_TO_STDOUT. */
-
- temp_base = obj->temp_base;
- if (temp_base != NULL)
- temp_base_allocated = 0;
- else
- {
- temp_base = choose_temp_base ();
- temp_base_allocated = 1;
- }
-
- rf = concat (temp_base, ".gp", NULL);
-
- if (temp_base_allocated)
- free (temp_base);
-
- if (in == STDIN_FILE_NO)
- {
- inindex = -1;
- infile = "";
- }
- else
- {
- inindex = pex_msdos_fdindex (ms, in);
- infile = ms->files[inindex];
- }
-
- if (out == STDOUT_FILE_NO)
- {
- outindex = -1;
- outfile = "";
- }
- else
- {
- outindex = pex_msdos_fdindex (ms, out);
- outfile = ms->files[outindex];
- }
-
- scmd = XNEWVEC (char, strlen (program)
- + ((flags & PEXECUTE_SEARCH) != 0 ? 4 : 0)
- + strlen (rf)
- + strlen (infile)
- + strlen (outfile)
- + 10);
- sprintf (scmd, "%s%s @%s%s%s%s%s",
- program,
- (flags & PEXECUTE_SEARCH) != 0 ? ".exe" : "",
- rf,
- inindex != -1 ? " <" : "",
- infile,
- outindex != -1 ? " >" : "",
- outfile);
-
- argfile = fopen (rf, "w");
- if (argfile == NULL)
- {
- *err = errno;
- free (scmd);
- free (rf);
- *errmsg = "cannot open temporary command file";
- return (pid_t) -1;
- }
-
- for (i = 1; argv[i] != NULL; ++i)
- {
- char *p;
-
- for (p = argv[i]; *p != '\0'; ++p)
- {
- if (*p == '"' || *p == '\'' || *p == '\\' || ISSPACE (*p))
- putc ('\\', argfile);
- putc (*p, argfile);
- }
- putc ('\n', argfile);
- }
-
- fclose (argfile);
-
- status = system (scmd);
-
- if (status == -1)
- {
- *err = errno;
- remove (rf);
- free (scmd);
- free (rf);
- *errmsg = "system";
- return (pid_t) -1;
- }
-
- remove (rf);
- free (scmd);
- free (rf);
-
- /* Save the exit status for later. When we are called, obj->count
- is the number of children which have executed before this
- one. */
- ms->statuses = XRESIZEVEC(int, ms->statuses, obj->count + 1);
- ms->statuses[obj->count] = status;
-
- return (pid_t) obj->count;
-}
-
-/* Wait for a child process to complete. Actually the child process
- has already completed, and we just need to return the exit
- status. */
-
-static pid_t
-pex_msdos_wait (struct pex_obj *obj, pid_t pid, int *status,
- struct pex_time *time, int done ATTRIBUTE_UNUSED,
- const char **errmsg ATTRIBUTE_UNUSED,
- int *err ATTRIBUTE_UNUSED)
-{
- struct pex_msdos *ms;
-
- ms = (struct pex_msdos *) obj->sysdep;
-
- if (time != NULL)
- memset (time, 0, sizeof *time);
-
- *status = ms->statuses[pid];
-
- return 0;
-}
-
-/* Clean up the pex_msdos structure. */
-
-static void
-pex_msdos_cleanup (struct pex_obj *obj)
-{
- struct pex_msdos *ms;
- int i;
-
- ms = (struct pex_msdos *) obj->sysdep;
- for (i = 0; i < PEX_MSDOS_FILE_COUNT; ++i)
- free (msdos->files[i]);
- free (msdos->statuses);
- free (msdos);
- obj->sysdep = NULL;
-}
diff --git a/gcc-4.7/libiberty/pex-one.c b/gcc-4.7/libiberty/pex-one.c
deleted file mode 100644
index 696b8bcc6..000000000
--- a/gcc-4.7/libiberty/pex-one.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Execute a program and wait for a result.
- Copyright (C) 2005 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-#include "libiberty.h"
-
-const char *
-pex_one (int flags, const char *executable, char * const *argv,
- const char *pname, const char *outname, const char *errname,
- int *status, int *err)
-{
- struct pex_obj *obj;
- const char *errmsg;
-
- obj = pex_init (0, pname, NULL);
- errmsg = pex_run (obj, flags, executable, argv, outname, errname, err);
- if (errmsg == NULL)
- {
- if (!pex_get_status (obj, 1, status))
- {
- *err = 0;
- errmsg = "pex_get_status failed";
- }
- }
- pex_free (obj);
- return errmsg;
-}
diff --git a/gcc-4.7/libiberty/pex-unix.c b/gcc-4.7/libiberty/pex-unix.c
deleted file mode 100644
index 8d5145c52..000000000
--- a/gcc-4.7/libiberty/pex-unix.c
+++ /dev/null
@@ -1,788 +0,0 @@
-/* Utilities to execute a program in a subprocess (possibly linked by pipes
- with other subprocesses), and wait for it. Generic Unix version
- (also used for UWIN and VMS).
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2009,
- 2010 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-#include "libiberty.h"
-#include "pex-common.h"
-
-#include <stdio.h>
-#include <signal.h>
-#include <errno.h>
-#ifdef NEED_DECLARATION_ERRNO
-extern int errno;
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include <sys/types.h>
-
-#ifdef HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#ifdef HAVE_GETRUSAGE
-#include <sys/time.h>
-#include <sys/resource.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-#ifdef HAVE_PROCESS_H
-#include <process.h>
-#endif
-
-#ifdef vfork /* Autoconf may define this to fork for us. */
-# define VFORK_STRING "fork"
-#else
-# define VFORK_STRING "vfork"
-#endif
-#ifdef HAVE_VFORK_H
-#include <vfork.h>
-#endif
-#if defined(VMS) && defined (__LONG_POINTERS)
-#ifndef __CHAR_PTR32
-typedef char * __char_ptr32
-__attribute__ ((mode (SI)));
-#endif
-
-typedef __char_ptr32 *__char_ptr_char_ptr32
-__attribute__ ((mode (SI)));
-
-/* Return a 32 bit pointer to an array of 32 bit pointers
- given a 64 bit pointer to an array of 64 bit pointers. */
-
-static __char_ptr_char_ptr32
-to_ptr32 (char **ptr64)
-{
- int argc;
- __char_ptr_char_ptr32 short_argv;
-
- for (argc=0; ptr64[argc]; argc++);
-
- /* Reallocate argv with 32 bit pointers. */
- short_argv = (__char_ptr_char_ptr32) decc$malloc
- (sizeof (__char_ptr32) * (argc + 1));
-
- for (argc=0; ptr64[argc]; argc++)
- short_argv[argc] = (__char_ptr32) decc$strdup (ptr64[argc]);
-
- short_argv[argc] = (__char_ptr32) 0;
- return short_argv;
-
-}
-#else
-#define to_ptr32(argv) argv
-#endif
-
-/* File mode to use for private and world-readable files. */
-
-#if defined (S_IRUSR) && defined (S_IWUSR) && defined (S_IRGRP) && defined (S_IWGRP) && defined (S_IROTH) && defined (S_IWOTH)
-#define PUBLIC_MODE \
- (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
-#else
-#define PUBLIC_MODE 0666
-#endif
-
-/* Get the exit status of a particular process, and optionally get the
- time that it took. This is simple if we have wait4, slightly
- harder if we have waitpid, and is a pain if we only have wait. */
-
-static pid_t pex_wait (struct pex_obj *, pid_t, int *, struct pex_time *);
-
-#ifdef HAVE_WAIT4
-
-static pid_t
-pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
- struct pex_time *time)
-{
- pid_t ret;
- struct rusage r;
-
-#ifdef HAVE_WAITPID
- if (time == NULL)
- return waitpid (pid, status, 0);
-#endif
-
- ret = wait4 (pid, status, 0, &r);
-
- if (time != NULL)
- {
- time->user_seconds = r.ru_utime.tv_sec;
- time->user_microseconds= r.ru_utime.tv_usec;
- time->system_seconds = r.ru_stime.tv_sec;
- time->system_microseconds= r.ru_stime.tv_usec;
- }
-
- return ret;
-}
-
-#else /* ! defined (HAVE_WAIT4) */
-
-#ifdef HAVE_WAITPID
-
-#ifndef HAVE_GETRUSAGE
-
-static pid_t
-pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
- struct pex_time *time)
-{
- if (time != NULL)
- memset (time, 0, sizeof (struct pex_time));
- return waitpid (pid, status, 0);
-}
-
-#else /* defined (HAVE_GETRUSAGE) */
-
-static pid_t
-pex_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid, int *status,
- struct pex_time *time)
-{
- struct rusage r1, r2;
- pid_t ret;
-
- if (time == NULL)
- return waitpid (pid, status, 0);
-
- getrusage (RUSAGE_CHILDREN, &r1);
-
- ret = waitpid (pid, status, 0);
- if (ret < 0)
- return ret;
-
- getrusage (RUSAGE_CHILDREN, &r2);
-
- time->user_seconds = r2.ru_utime.tv_sec - r1.ru_utime.tv_sec;
- time->user_microseconds = r2.ru_utime.tv_usec - r1.ru_utime.tv_usec;
- if (r2.ru_utime.tv_usec < r1.ru_utime.tv_usec)
- {
- --time->user_seconds;
- time->user_microseconds += 1000000;
- }
-
- time->system_seconds = r2.ru_stime.tv_sec - r1.ru_stime.tv_sec;
- time->system_microseconds = r2.ru_stime.tv_usec - r1.ru_stime.tv_usec;
- if (r2.ru_stime.tv_usec < r1.ru_stime.tv_usec)
- {
- --time->system_seconds;
- time->system_microseconds += 1000000;
- }
-
- return ret;
-}
-
-#endif /* defined (HAVE_GETRUSAGE) */
-
-#else /* ! defined (HAVE_WAITPID) */
-
-struct status_list
-{
- struct status_list *next;
- pid_t pid;
- int status;
- struct pex_time time;
-};
-
-static pid_t
-pex_wait (struct pex_obj *obj, pid_t pid, int *status, struct pex_time *time)
-{
- struct status_list **pp;
-
- for (pp = (struct status_list **) &obj->sysdep;
- *pp != NULL;
- pp = &(*pp)->next)
- {
- if ((*pp)->pid == pid)
- {
- struct status_list *p;
-
- p = *pp;
- *status = p->status;
- if (time != NULL)
- *time = p->time;
- *pp = p->next;
- free (p);
- return pid;
- }
- }
-
- while (1)
- {
- pid_t cpid;
- struct status_list *psl;
- struct pex_time pt;
-#ifdef HAVE_GETRUSAGE
- struct rusage r1, r2;
-#endif
-
- if (time != NULL)
- {
-#ifdef HAVE_GETRUSAGE
- getrusage (RUSAGE_CHILDREN, &r1);
-#else
- memset (&pt, 0, sizeof (struct pex_time));
-#endif
- }
-
- cpid = wait (status);
-
-#ifdef HAVE_GETRUSAGE
- if (time != NULL && cpid >= 0)
- {
- getrusage (RUSAGE_CHILDREN, &r2);
-
- pt.user_seconds = r2.ru_utime.tv_sec - r1.ru_utime.tv_sec;
- pt.user_microseconds = r2.ru_utime.tv_usec - r1.ru_utime.tv_usec;
- if (pt.user_microseconds < 0)
- {
- --pt.user_seconds;
- pt.user_microseconds += 1000000;
- }
-
- pt.system_seconds = r2.ru_stime.tv_sec - r1.ru_stime.tv_sec;
- pt.system_microseconds = r2.ru_stime.tv_usec - r1.ru_stime.tv_usec;
- if (pt.system_microseconds < 0)
- {
- --pt.system_seconds;
- pt.system_microseconds += 1000000;
- }
- }
-#endif
-
- if (cpid < 0 || cpid == pid)
- {
- if (time != NULL)
- *time = pt;
- return cpid;
- }
-
- psl = XNEW (struct status_list);
- psl->pid = cpid;
- psl->status = *status;
- if (time != NULL)
- psl->time = pt;
- psl->next = (struct status_list *) obj->sysdep;
- obj->sysdep = (void *) psl;
- }
-}
-
-#endif /* ! defined (HAVE_WAITPID) */
-#endif /* ! defined (HAVE_WAIT4) */
-
-static void pex_child_error (struct pex_obj *, const char *, const char *, int)
- ATTRIBUTE_NORETURN;
-static int pex_unix_open_read (struct pex_obj *, const char *, int);
-static int pex_unix_open_write (struct pex_obj *, const char *, int);
-static pid_t pex_unix_exec_child (struct pex_obj *, int, const char *,
- char * const *, char * const *,
- int, int, int, int,
- const char **, int *);
-static int pex_unix_close (struct pex_obj *, int);
-static int pex_unix_wait (struct pex_obj *, pid_t, int *, struct pex_time *,
- int, const char **, int *);
-static int pex_unix_pipe (struct pex_obj *, int *, int);
-static FILE *pex_unix_fdopenr (struct pex_obj *, int, int);
-static FILE *pex_unix_fdopenw (struct pex_obj *, int, int);
-static void pex_unix_cleanup (struct pex_obj *);
-
-/* The list of functions we pass to the common routines. */
-
-const struct pex_funcs funcs =
-{
- pex_unix_open_read,
- pex_unix_open_write,
- pex_unix_exec_child,
- pex_unix_close,
- pex_unix_wait,
- pex_unix_pipe,
- pex_unix_fdopenr,
- pex_unix_fdopenw,
- pex_unix_cleanup
-};
-
-/* Return a newly initialized pex_obj structure. */
-
-struct pex_obj *
-pex_init (int flags, const char *pname, const char *tempbase)
-{
- return pex_init_common (flags, pname, tempbase, &funcs);
-}
-
-/* Open a file for reading. */
-
-static int
-pex_unix_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name,
- int binary ATTRIBUTE_UNUSED)
-{
- return open (name, O_RDONLY);
-}
-
-/* Open a file for writing. */
-
-static int
-pex_unix_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name,
- int binary ATTRIBUTE_UNUSED)
-{
- /* Note that we can't use O_EXCL here because gcc may have already
- created the temporary file via make_temp_file. */
- return open (name, O_WRONLY | O_CREAT | O_TRUNC, PUBLIC_MODE);
-}
-
-/* Close a file. */
-
-static int
-pex_unix_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd)
-{
- return close (fd);
-}
-
-/* Report an error from a child process. We don't use stdio routines,
- because we might be here due to a vfork call. */
-
-static void
-pex_child_error (struct pex_obj *obj, const char *executable,
- const char *errmsg, int err)
-{
- int retval = 0;
-#define writeerr(s) retval |= (write (STDERR_FILE_NO, s, strlen (s)) < 0)
- writeerr (obj->pname);
- writeerr (": error trying to exec '");
- writeerr (executable);
- writeerr ("': ");
- writeerr (errmsg);
- writeerr (": ");
- writeerr (xstrerror (err));
- writeerr ("\n");
-#undef writeerr
- /* Exit with -2 if the error output failed, too. */
- _exit (retval == 0 ? -1 : -2);
-}
-
-/* Execute a child. */
-
-extern char **environ;
-
-#if defined(HAVE_SPAWNVE) && defined(HAVE_SPAWNVPE)
-/* Implementation of pex->exec_child using the Cygwin spawn operation. */
-
-/* Subroutine of pex_unix_exec_child. Move OLD_FD to a new file descriptor
- to be stored in *PNEW_FD, save the flags in *PFLAGS, and arrange for the
- saved copy to be close-on-exec. Move CHILD_FD into OLD_FD. If CHILD_FD
- is -1, OLD_FD is to be closed. Return -1 on error. */
-
-static int
-save_and_install_fd(int *pnew_fd, int *pflags, int old_fd, int child_fd)
-{
- int new_fd, flags;
-
- flags = fcntl (old_fd, F_GETFD);
-
- /* If we could not retrieve the flags, then OLD_FD was not open. */
- if (flags < 0)
- {
- new_fd = -1, flags = 0;
- if (child_fd >= 0 && dup2 (child_fd, old_fd) < 0)
- return -1;
- }
- /* If we wish to close OLD_FD, just mark it CLOEXEC. */
- else if (child_fd == -1)
- {
- new_fd = old_fd;
- if ((flags & FD_CLOEXEC) == 0 && fcntl (old_fd, F_SETFD, FD_CLOEXEC) < 0)
- return -1;
- }
- /* Otherwise we need to save a copy of OLD_FD before installing CHILD_FD. */
- else
- {
-#ifdef F_DUPFD_CLOEXEC
- new_fd = fcntl (old_fd, F_DUPFD_CLOEXEC, 3);
- if (new_fd < 0)
- return -1;
-#else
- /* Prefer F_DUPFD over dup in order to avoid getting a new fd
- in the range 0-2, right where a new stderr fd might get put. */
- new_fd = fcntl (old_fd, F_DUPFD, 3);
- if (new_fd < 0)
- return -1;
- if (fcntl (new_fd, F_SETFD, FD_CLOEXEC) < 0)
- return -1;
-#endif
- if (dup2 (child_fd, old_fd) < 0)
- return -1;
- }
-
- *pflags = flags;
- if (pnew_fd)
- *pnew_fd = new_fd;
- else if (new_fd != old_fd)
- abort ();
-
- return 0;
-}
-
-/* Subroutine of pex_unix_exec_child. Move SAVE_FD back to OLD_FD
- restoring FLAGS. If SAVE_FD < 0, OLD_FD is to be closed. */
-
-static int
-restore_fd(int old_fd, int save_fd, int flags)
-{
- /* For SAVE_FD < 0, all we have to do is restore the
- "closed-ness" of the original. */
- if (save_fd < 0)
- return close (old_fd);
-
- /* For SAVE_FD == OLD_FD, all we have to do is restore the
- original setting of the CLOEXEC flag. */
- if (save_fd == old_fd)
- {
- if (flags & FD_CLOEXEC)
- return 0;
- return fcntl (old_fd, F_SETFD, flags);
- }
-
- /* Otherwise we have to move the descriptor back, restore the flags,
- and close the saved copy. */
-#ifdef HAVE_DUP3
- if (flags == FD_CLOEXEC)
- {
- if (dup3 (save_fd, old_fd, O_CLOEXEC) < 0)
- return -1;
- }
- else
-#endif
- {
- if (dup2 (save_fd, old_fd) < 0)
- return -1;
- if (flags != 0 && fcntl (old_fd, F_SETFD, flags) < 0)
- return -1;
- }
- return close (save_fd);
-}
-
-static pid_t
-pex_unix_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED,
- int flags, const char *executable,
- char * const * argv, char * const * env,
- int in, int out, int errdes, int toclose,
- const char **errmsg, int *err)
-{
- int fl_in = 0, fl_out = 0, fl_err = 0, fl_tc = 0;
- int save_in = -1, save_out = -1, save_err = -1;
- int max, retries;
- pid_t pid;
-
- if (flags & PEX_STDERR_TO_STDOUT)
- errdes = out;
-
- /* We need the three standard file descriptors to be set up as for
- the child before we perform the spawn. The file descriptors for
- the parent need to be moved and marked for close-on-exec. */
- if (in != STDIN_FILE_NO
- && save_and_install_fd (&save_in, &fl_in, STDIN_FILE_NO, in) < 0)
- goto error_dup2;
- if (out != STDOUT_FILE_NO
- && save_and_install_fd (&save_out, &fl_out, STDOUT_FILE_NO, out) < 0)
- goto error_dup2;
- if (errdes != STDERR_FILE_NO
- && save_and_install_fd (&save_err, &fl_err, STDERR_FILE_NO, errdes) < 0)
- goto error_dup2;
- if (toclose >= 0
- && save_and_install_fd (NULL, &fl_tc, toclose, -1) < 0)
- goto error_dup2;
-
- /* Now that we've moved the file descriptors for the child into place,
- close the originals. Be careful not to close any of the standard
- file descriptors that we just set up. */
- max = -1;
- if (errdes >= 0)
- max = STDERR_FILE_NO;
- else if (out >= 0)
- max = STDOUT_FILE_NO;
- else if (in >= 0)
- max = STDIN_FILE_NO;
- if (in > max)
- close (in);
- if (out > max)
- close (out);
- if (errdes > max && errdes != out)
- close (errdes);
-
- /* If we were not given an environment, use the global environment. */
- if (env == NULL)
- env = environ;
-
- /* Launch the program. If we get EAGAIN (normally out of pid's), try
- again a few times with increasing backoff times. */
- retries = 0;
- while (1)
- {
- typedef const char * const *cc_cp;
-
- if (flags & PEX_SEARCH)
- pid = spawnvpe (_P_NOWAITO, executable, (cc_cp)argv, (cc_cp)env);
- else
- pid = spawnve (_P_NOWAITO, executable, (cc_cp)argv, (cc_cp)env);
-
- if (pid > 0)
- break;
-
- *err = errno;
- *errmsg = "spawn";
- if (errno != EAGAIN || ++retries == 4)
- return (pid_t) -1;
- sleep (1 << retries);
- }
-
- /* Success. Restore the parent's file descriptors that we saved above. */
- if (toclose >= 0
- && restore_fd (toclose, toclose, fl_tc) < 0)
- goto error_dup2;
- if (in != STDIN_FILE_NO
- && restore_fd (STDIN_FILE_NO, save_in, fl_in) < 0)
- goto error_dup2;
- if (out != STDOUT_FILE_NO
- && restore_fd (STDOUT_FILE_NO, save_out, fl_out) < 0)
- goto error_dup2;
- if (errdes != STDERR_FILE_NO
- && restore_fd (STDERR_FILE_NO, save_err, fl_err) < 0)
- goto error_dup2;
-
- return pid;
-
- error_dup2:
- *err = errno;
- *errmsg = "dup2";
- return (pid_t) -1;
-}
-
-#else
-/* Implementation of pex->exec_child using standard vfork + exec. */
-
-static pid_t
-pex_unix_exec_child (struct pex_obj *obj, int flags, const char *executable,
- char * const * argv, char * const * env,
- int in, int out, int errdes,
- int toclose, const char **errmsg, int *err)
-{
- pid_t pid;
-
- /* We declare these to be volatile to avoid warnings from gcc about
- them being clobbered by vfork. */
- volatile int sleep_interval;
- volatile int retries;
-
- /* We vfork and then set environ in the child before calling execvp.
- This clobbers the parent's environ so we need to restore it.
- It would be nice to use one of the exec* functions that takes an
- environment as a parameter, but that may have portability issues. */
- char **save_environ = environ;
-
- sleep_interval = 1;
- pid = -1;
- for (retries = 0; retries < 4; ++retries)
- {
- pid = vfork ();
- if (pid >= 0)
- break;
- sleep (sleep_interval);
- sleep_interval *= 2;
- }
-
- switch (pid)
- {
- case -1:
- *err = errno;
- *errmsg = VFORK_STRING;
- return (pid_t) -1;
-
- case 0:
- /* Child process. */
- if (in != STDIN_FILE_NO)
- {
- if (dup2 (in, STDIN_FILE_NO) < 0)
- pex_child_error (obj, executable, "dup2", errno);
- if (close (in) < 0)
- pex_child_error (obj, executable, "close", errno);
- }
- if (out != STDOUT_FILE_NO)
- {
- if (dup2 (out, STDOUT_FILE_NO) < 0)
- pex_child_error (obj, executable, "dup2", errno);
- if (close (out) < 0)
- pex_child_error (obj, executable, "close", errno);
- }
- if (errdes != STDERR_FILE_NO)
- {
- if (dup2 (errdes, STDERR_FILE_NO) < 0)
- pex_child_error (obj, executable, "dup2", errno);
- if (close (errdes) < 0)
- pex_child_error (obj, executable, "close", errno);
- }
- if (toclose >= 0)
- {
- if (close (toclose) < 0)
- pex_child_error (obj, executable, "close", errno);
- }
- if ((flags & PEX_STDERR_TO_STDOUT) != 0)
- {
- if (dup2 (STDOUT_FILE_NO, STDERR_FILE_NO) < 0)
- pex_child_error (obj, executable, "dup2", errno);
- }
-
- if (env)
- {
- /* NOTE: In a standard vfork implementation this clobbers the
- parent's copy of environ "too" (in reality there's only one copy).
- This is ok as we restore it below. */
- environ = (char**) env;
- }
-
- if ((flags & PEX_SEARCH) != 0)
- {
- execvp (executable, to_ptr32 (argv));
- pex_child_error (obj, executable, "execvp", errno);
- }
- else
- {
- execv (executable, to_ptr32 (argv));
- pex_child_error (obj, executable, "execv", errno);
- }
-
- /* NOTREACHED */
- return (pid_t) -1;
-
- default:
- /* Parent process. */
-
- /* Restore environ.
- Note that the parent either doesn't run until the child execs/exits
- (standard vfork behaviour), or if it does run then vfork is behaving
- more like fork. In either case we needn't worry about clobbering
- the child's copy of environ. */
- environ = save_environ;
-
- if (in != STDIN_FILE_NO)
- {
- if (close (in) < 0)
- {
- *err = errno;
- *errmsg = "close";
- return (pid_t) -1;
- }
- }
- if (out != STDOUT_FILE_NO)
- {
- if (close (out) < 0)
- {
- *err = errno;
- *errmsg = "close";
- return (pid_t) -1;
- }
- }
- if (errdes != STDERR_FILE_NO)
- {
- if (close (errdes) < 0)
- {
- *err = errno;
- *errmsg = "close";
- return (pid_t) -1;
- }
- }
-
- return pid;
- }
-}
-#endif /* SPAWN */
-
-/* Wait for a child process to complete. */
-
-static int
-pex_unix_wait (struct pex_obj *obj, pid_t pid, int *status,
- struct pex_time *time, int done, const char **errmsg,
- int *err)
-{
- /* If we are cleaning up when the caller didn't retrieve process
- status for some reason, encourage the process to go away. */
- if (done)
- kill (pid, SIGTERM);
-
- if (pex_wait (obj, pid, status, time) < 0)
- {
- *err = errno;
- *errmsg = "wait";
- return -1;
- }
-
- return 0;
-}
-
-/* Create a pipe. */
-
-static int
-pex_unix_pipe (struct pex_obj *obj ATTRIBUTE_UNUSED, int *p,
- int binary ATTRIBUTE_UNUSED)
-{
- return pipe (p);
-}
-
-/* Get a FILE pointer to read from a file descriptor. */
-
-static FILE *
-pex_unix_fdopenr (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd,
- int binary ATTRIBUTE_UNUSED)
-{
- return fdopen (fd, "r");
-}
-
-static FILE *
-pex_unix_fdopenw (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd,
- int binary ATTRIBUTE_UNUSED)
-{
- if (fcntl (fd, F_SETFD, FD_CLOEXEC) < 0)
- return NULL;
- return fdopen (fd, "w");
-}
-
-static void
-pex_unix_cleanup (struct pex_obj *obj ATTRIBUTE_UNUSED)
-{
-#if !defined (HAVE_WAIT4) && !defined (HAVE_WAITPID)
- while (obj->sysdep != NULL)
- {
- struct status_list *this;
- struct status_list *next;
-
- this = (struct status_list *) obj->sysdep;
- next = this->next;
- free (this);
- obj->sysdep = (void *) next;
- }
-#endif
-}
diff --git a/gcc-4.7/libiberty/pex-win32.c b/gcc-4.7/libiberty/pex-win32.c
deleted file mode 100644
index 927eadefc..000000000
--- a/gcc-4.7/libiberty/pex-win32.c
+++ /dev/null
@@ -1,971 +0,0 @@
-/* Utilities to execute a program in a subprocess (possibly linked by pipes
- with other subprocesses), and wait for it. Generic Win32 specialization.
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006
- Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "pex-common.h"
-
-#include <windows.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-
-#include <assert.h>
-#include <process.h>
-#include <io.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <sys/stat.h>
-#include <errno.h>
-#include <ctype.h>
-
-/* mingw32 headers may not define the following. */
-
-#ifndef _P_WAIT
-# define _P_WAIT 0
-# define _P_NOWAIT 1
-# define _P_OVERLAY 2
-# define _P_NOWAITO 3
-# define _P_DETACH 4
-
-# define WAIT_CHILD 0
-# define WAIT_GRANDCHILD 1
-#endif
-
-#define MINGW_NAME "Minimalist GNU for Windows"
-#define MINGW_NAME_LEN (sizeof(MINGW_NAME) - 1)
-
-extern char *stpcpy (char *dst, const char *src);
-
-/* Ensure that the executable pathname uses Win32 backslashes. This
- is not necessary on NT, but on W9x, forward slashes causes
- failure of spawn* and exec* functions (and probably any function
- that calls CreateProcess) *iff* the executable pathname (argv[0])
- is a quoted string. And quoting is necessary in case a pathname
- contains embedded white space. You can't win. */
-static void
-backslashify (char *s)
-{
- while ((s = strchr (s, '/')) != NULL)
- *s = '\\';
- return;
-}
-
-static int pex_win32_open_read (struct pex_obj *, const char *, int);
-static int pex_win32_open_write (struct pex_obj *, const char *, int);
-static pid_t pex_win32_exec_child (struct pex_obj *, int, const char *,
- char * const *, char * const *,
- int, int, int, int,
- const char **, int *);
-static int pex_win32_close (struct pex_obj *, int);
-static pid_t pex_win32_wait (struct pex_obj *, pid_t, int *,
- struct pex_time *, int, const char **, int *);
-static int pex_win32_pipe (struct pex_obj *, int *, int);
-static FILE *pex_win32_fdopenr (struct pex_obj *, int, int);
-static FILE *pex_win32_fdopenw (struct pex_obj *, int, int);
-
-/* The list of functions we pass to the common routines. */
-
-const struct pex_funcs funcs =
-{
- pex_win32_open_read,
- pex_win32_open_write,
- pex_win32_exec_child,
- pex_win32_close,
- pex_win32_wait,
- pex_win32_pipe,
- pex_win32_fdopenr,
- pex_win32_fdopenw,
- NULL /* cleanup */
-};
-
-/* Return a newly initialized pex_obj structure. */
-
-struct pex_obj *
-pex_init (int flags, const char *pname, const char *tempbase)
-{
- return pex_init_common (flags, pname, tempbase, &funcs);
-}
-
-/* Open a file for reading. */
-
-static int
-pex_win32_open_read (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name,
- int binary)
-{
- return _open (name, _O_RDONLY | (binary ? _O_BINARY : _O_TEXT));
-}
-
-/* Open a file for writing. */
-
-static int
-pex_win32_open_write (struct pex_obj *obj ATTRIBUTE_UNUSED, const char *name,
- int binary)
-{
- /* Note that we can't use O_EXCL here because gcc may have already
- created the temporary file via make_temp_file. */
- return _open (name,
- (_O_WRONLY | _O_CREAT | _O_TRUNC
- | (binary ? _O_BINARY : _O_TEXT)),
- _S_IREAD | _S_IWRITE);
-}
-
-/* Close a file. */
-
-static int
-pex_win32_close (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd)
-{
- return _close (fd);
-}
-
-#ifdef USE_MINGW_MSYS
-static const char *mingw_keys[] = {"SOFTWARE", "Microsoft", "Windows", "CurrentVersion", "Uninstall", NULL};
-
-/* Tack the executable on the end of a (possibly slash terminated) buffer
- and convert everything to \. */
-static const char *
-tack_on_executable (char *buf, const char *executable)
-{
- char *p = strchr (buf, '\0');
- if (p > buf && (p[-1] == '\\' || p[-1] == '/'))
- p[-1] = '\0';
- backslashify (strcat (buf, executable));
- return buf;
-}
-
-/* Walk down a registry hierarchy until the end. Return the key. */
-static HKEY
-openkey (HKEY hStart, const char *keys[])
-{
- HKEY hKey, hTmp;
- for (hKey = hStart; *keys; keys++)
- {
- LONG res;
- hTmp = hKey;
- res = RegOpenKey (hTmp, *keys, &hKey);
-
- if (hTmp != HKEY_LOCAL_MACHINE)
- RegCloseKey (hTmp);
-
- if (res != ERROR_SUCCESS)
- return NULL;
- }
- return hKey;
-}
-
-/* Return the "mingw root" as derived from the mingw uninstall information. */
-static const char *
-mingw_rootify (const char *executable)
-{
- HKEY hKey, hTmp;
- DWORD maxlen;
- char *namebuf, *foundbuf;
- DWORD i;
- LONG res;
-
- /* Open the uninstall "directory". */
- hKey = openkey (HKEY_LOCAL_MACHINE, mingw_keys);
-
- /* Not found. */
- if (!hKey)
- return executable;
-
- /* Need to enumerate all of the keys here looking for one the most recent
- one for MinGW. */
- if (RegQueryInfoKey (hKey, NULL, NULL, NULL, NULL, &maxlen, NULL, NULL,
- NULL, NULL, NULL, NULL) != ERROR_SUCCESS)
- {
- RegCloseKey (hKey);
- return executable;
- }
- namebuf = XNEWVEC (char, ++maxlen);
- foundbuf = XNEWVEC (char, maxlen);
- foundbuf[0] = '\0';
- if (!namebuf || !foundbuf)
- {
- RegCloseKey (hKey);
- free (namebuf);
- free (foundbuf);
- return executable;
- }
-
- /* Look through all of the keys for one that begins with Minimal GNU...
- Try to get the latest version by doing a string compare although that
- string never really works with version number sorting. */
- for (i = 0; RegEnumKey (hKey, i, namebuf, maxlen) == ERROR_SUCCESS; i++)
- {
- int match = strcasecmp (namebuf, MINGW_NAME);
- if (match < 0)
- continue;
- if (match > 0 && strncasecmp (namebuf, MINGW_NAME, MINGW_NAME_LEN) > 0)
- continue;
- if (strcasecmp (namebuf, foundbuf) > 0)
- strcpy (foundbuf, namebuf);
- }
- free (namebuf);
-
- /* If foundbuf is empty, we didn't find anything. Punt. */
- if (!foundbuf[0])
- {
- free (foundbuf);
- RegCloseKey (hKey);
- return executable;
- }
-
- /* Open the key that we wanted */
- res = RegOpenKey (hKey, foundbuf, &hTmp);
- RegCloseKey (hKey);
- free (foundbuf);
-
- /* Don't know why this would fail, but you gotta check */
- if (res != ERROR_SUCCESS)
- return executable;
-
- maxlen = 0;
- /* Get the length of the value pointed to by InstallLocation */
- if (RegQueryValueEx (hTmp, "InstallLocation", 0, NULL, NULL,
- &maxlen) != ERROR_SUCCESS || maxlen == 0)
- {
- RegCloseKey (hTmp);
- return executable;
- }
-
- /* Allocate space for the install location */
- foundbuf = XNEWVEC (char, maxlen + strlen (executable));
- if (!foundbuf)
- {
- free (foundbuf);
- RegCloseKey (hTmp);
- }
-
- /* Read the install location into the buffer */
- res = RegQueryValueEx (hTmp, "InstallLocation", 0, NULL, (LPBYTE) foundbuf,
- &maxlen);
- RegCloseKey (hTmp);
- if (res != ERROR_SUCCESS)
- {
- free (foundbuf);
- return executable;
- }
-
- /* Concatenate the install location and the executable, turn all slashes
- to backslashes, and return that. */
- return tack_on_executable (foundbuf, executable);
-}
-
-/* Read the install location of msys from it's installation file and
- rootify the executable based on that. */
-static const char *
-msys_rootify (const char *executable)
-{
- size_t bufsize = 64;
- size_t execlen = strlen (executable) + 1;
- char *buf;
- DWORD res = 0;
- for (;;)
- {
- buf = XNEWVEC (char, bufsize + execlen);
- if (!buf)
- break;
- res = GetPrivateProfileString ("InstallSettings", "InstallPath", NULL,
- buf, bufsize, "msys.ini");
- if (!res)
- break;
- if (strlen (buf) < bufsize)
- break;
- res = 0;
- free (buf);
- bufsize *= 2;
- if (bufsize > 65536)
- {
- buf = NULL;
- break;
- }
- }
-
- if (res)
- return tack_on_executable (buf, executable);
-
- /* failed */
- free (buf);
- return executable;
-}
-#endif
-
-/* Return the number of arguments in an argv array, not including the null
- terminating argument. */
-
-static int
-argv_to_argc (char *const *argv)
-{
- char *const *i = argv;
- while (*i)
- i++;
- return i - argv;
-}
-
-/* Return a Windows command-line from ARGV. It is the caller's
- responsibility to free the string returned. */
-
-static char *
-argv_to_cmdline (char *const *argv)
-{
- char *cmdline;
- char *p;
- size_t cmdline_len;
- int i, j, k;
- int needs_quotes;
-
- cmdline_len = 0;
- for (i = 0; argv[i]; i++)
- {
- /* We only quote arguments that contain spaces, \n \t \v or " characters
- to prevent wasting 2 chars per argument of the CreateProcess 32k char limit
- We need only escape embedded double-quotes and immediately
- preceeding backslash characters. A sequence of backslach characters
- that is not follwed by a double quote character will not be
- escaped. */
- needs_quotes = 0;
- for (j = 0; argv[i][j]; j++)
- {
- if (argv[i][j] == ' ' || argv[i][j] == '\n' ||
- argv[i][j] == '\t' || argv[i][j] == '"' )
- {
- needs_quotes = 1;
- }
-
- if (argv[i][j] == '"')
- {
- /* Escape preceeding backslashes. */
- for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
- cmdline_len++;
- /* Escape the qote character. */
- cmdline_len++;
- }
- }
- /* Trailing backslashes also need to be escaped because they will be
- followed by the terminating quote. */
- if (needs_quotes)
- {
- for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
- cmdline_len++;
- }
- cmdline_len += j;
- cmdline_len += 1 + (needs_quotes<<1); /* for leading and trailing quotes and space */
- }
- cmdline = XNEWVEC (char, cmdline_len);
- p = cmdline;
- for (i = 0; argv[i]; i++)
- {
- needs_quotes = 0;
- for (j = 0; argv[i][j]; j++)
- {
- if (argv[i][j] == ' ' || argv[i][j] == '\n' ||
- argv[i][j] == '\t' || argv[i][j] == '"' )
- {
- needs_quotes = 1;
- break;
- }
- }
-
- if (needs_quotes)
- {
- *p++ = '"';
- }
- for (j = 0; argv[i][j]; j++)
- {
- if (argv[i][j] == '"')
- {
- for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
- *p++ = '\\';
- *p++ = '\\';
- }
- *p++ = argv[i][j];
- }
- if (needs_quotes)
- {
- for (k = j - 1; k >= 0 && argv[i][k] == '\\'; k--)
- *p++ = '\\';
- *p++ = '"';
- }
- *p++ = ' ';
- }
- p[-1] = '\0';
- return cmdline;
-}
-
-/* We'll try the passed filename with all the known standard
- extensions, and then without extension. We try no extension
- last so that we don't try to run some random extension-less
- file that might be hanging around. We try both extension
- and no extension so that we don't need any fancy logic
- to determine if a file has extension. */
-static const char *const
-std_suffixes[] = {
- ".com",
- ".exe",
- ".bat",
- ".cmd",
- "",
- 0
-};
-
-/* Returns the full path to PROGRAM. If SEARCH is true, look for
- PROGRAM in each directory in PATH. */
-
-static char *
-find_executable (const char *program, BOOL search)
-{
- char *full_executable;
- char *e;
- size_t fe_len;
- const char *path = 0;
- const char *const *ext;
- const char *p, *q;
- size_t proglen = strlen (program);
- int has_slash = (strchr (program, '/') || strchr (program, '\\'));
- HANDLE h;
-
- if (has_slash)
- search = FALSE;
-
- if (search)
- path = getenv ("PATH");
- if (!path)
- path = "";
-
- fe_len = 0;
- for (p = path; *p; p = q)
- {
- q = p;
- while (*q != ';' && *q != '\0')
- q++;
- if ((size_t)(q - p) > fe_len)
- fe_len = q - p;
- if (*q == ';')
- q++;
- }
- fe_len = fe_len + 1 + proglen + 5 /* space for extension */;
- full_executable = XNEWVEC (char, fe_len);
-
- p = path;
- do
- {
- q = p;
- while (*q != ';' && *q != '\0')
- q++;
-
- e = full_executable;
- memcpy (e, p, q - p);
- e += (q - p);
- if (q - p)
- *e++ = '\\';
- strcpy (e, program);
-
- if (*q == ';')
- q++;
-
- for (e = full_executable; *e; e++)
- if (*e == '/')
- *e = '\\';
-
- /* At this point, e points to the terminating NUL character for
- full_executable. */
- for (ext = std_suffixes; *ext; ext++)
- {
- /* Remove any current extension. */
- *e = '\0';
- /* Add the new one. */
- strcat (full_executable, *ext);
-
- /* Attempt to open this file. */
- h = CreateFile (full_executable, GENERIC_READ,
- FILE_SHARE_READ | FILE_SHARE_WRITE,
- 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
- if (h != INVALID_HANDLE_VALUE)
- goto found;
- }
- p = q;
- }
- while (*p);
- free (full_executable);
- return 0;
-
- found:
- CloseHandle (h);
- return full_executable;
-}
-
-/* Low-level process creation function and helper. */
-
-static int
-env_compare (const void *a_ptr, const void *b_ptr)
-{
- const char *a;
- const char *b;
- unsigned char c1;
- unsigned char c2;
-
- a = *(const char **) a_ptr;
- b = *(const char **) b_ptr;
-
- /* a and b will be of the form: VAR=VALUE
- We compare only the variable name part here using a case-insensitive
- comparison algorithm. It might appear that in fact strcasecmp () can
- take the place of this whole function, and indeed it could, save for
- the fact that it would fail in cases such as comparing A1=foo and
- A=bar (because 1 is less than = in the ASCII character set).
- (Environment variables containing no numbers would work in such a
- scenario.) */
-
- do
- {
- c1 = (unsigned char) tolower (*a++);
- c2 = (unsigned char) tolower (*b++);
-
- if (c1 == '=')
- c1 = '\0';
-
- if (c2 == '=')
- c2 = '\0';
- }
- while (c1 == c2 && c1 != '\0');
-
- return c1 - c2;
-}
-
-/* Execute a Windows executable as a child process. This will fail if the
- * target is not actually an executable, such as if it is a shell script. */
-
-static pid_t
-win32_spawn (const char *executable,
- BOOL search,
- char *const *argv,
- char *const *env, /* array of strings of the form: VAR=VALUE */
- DWORD dwCreationFlags,
- LPSTARTUPINFO si,
- LPPROCESS_INFORMATION pi)
-{
- char *full_executable;
- char *cmdline;
- char **env_copy;
- char *env_block = NULL;
-
- full_executable = NULL;
- cmdline = NULL;
-
- if (env)
- {
- int env_size;
-
- /* Count the number of environment bindings supplied. */
- for (env_size = 0; env[env_size]; env_size++)
- continue;
-
- /* Assemble an environment block, if required. This consists of
- VAR=VALUE strings juxtaposed (with one null character between each
- pair) and an additional null at the end. */
- if (env_size > 0)
- {
- int var;
- int total_size = 1; /* 1 is for the final null. */
- char *bufptr;
-
- /* Windows needs the members of the block to be sorted by variable
- name. */
- env_copy = (char **) alloca (sizeof (char *) * env_size);
- memcpy (env_copy, env, sizeof (char *) * env_size);
- qsort (env_copy, env_size, sizeof (char *), env_compare);
-
- for (var = 0; var < env_size; var++)
- total_size += strlen (env[var]) + 1;
-
- env_block = XNEWVEC (char, total_size);
- bufptr = env_block;
- for (var = 0; var < env_size; var++)
- bufptr = stpcpy (bufptr, env_copy[var]) + 1;
-
- *bufptr = '\0';
- }
- }
-
- full_executable = find_executable (executable, search);
- if (!full_executable)
- goto error;
- cmdline = argv_to_cmdline (argv);
- if (!cmdline)
- goto error;
-
- /* Create the child process. */
- if (!CreateProcess (full_executable, cmdline,
- /*lpProcessAttributes=*/NULL,
- /*lpThreadAttributes=*/NULL,
- /*bInheritHandles=*/TRUE,
- dwCreationFlags,
- (LPVOID) env_block,
- /*lpCurrentDirectory=*/NULL,
- si,
- pi))
- {
- free (env_block);
-
- free (full_executable);
-
- return (pid_t) -1;
- }
-
- /* Clean up. */
- CloseHandle (pi->hThread);
- free (full_executable);
- free (env_block);
-
- return (pid_t) pi->hProcess;
-
- error:
- free (env_block);
- free (cmdline);
- free (full_executable);
-
- return (pid_t) -1;
-}
-
-/* Spawn a script. This simulates the Unix script execution mechanism.
- This function is called as a fallback if win32_spawn fails. */
-
-static pid_t
-spawn_script (const char *executable, char *const *argv,
- char* const *env,
- DWORD dwCreationFlags,
- LPSTARTUPINFO si,
- LPPROCESS_INFORMATION pi)
-{
- pid_t pid = (pid_t) -1;
- int save_errno = errno;
- int fd = _open (executable, _O_RDONLY);
-
- /* Try to open script, check header format, extract interpreter path,
- and spawn script using that interpretter. */
- if (fd >= 0)
- {
- char buf[MAX_PATH + 5];
- int len = _read (fd, buf, sizeof (buf) - 1);
- _close (fd);
- if (len > 3)
- {
- char *eol;
- buf[len] = '\0';
- eol = strchr (buf, '\n');
- if (eol && strncmp (buf, "#!", 2) == 0)
- {
-
- /* Header format is OK. */
- char *executable1;
- int new_argc;
- const char **avhere;
-
- /* Extract interpreter path. */
- do
- *eol = '\0';
- while (*--eol == '\r' || *eol == ' ' || *eol == '\t');
- for (executable1 = buf + 2; *executable1 == ' ' || *executable1 == '\t'; executable1++)
- continue;
- backslashify (executable1);
-
- /* Duplicate argv, prepending the interpreter path. */
- new_argc = argv_to_argc (argv) + 1;
- avhere = XNEWVEC (const char *, new_argc + 1);
- *avhere = executable1;
- memcpy (avhere + 1, argv, new_argc * sizeof(*argv));
- argv = (char *const *)avhere;
-
- /* Spawn the child. */
-#ifndef USE_MINGW_MSYS
- executable = strrchr (executable1, '\\') + 1;
- if (!executable)
- executable = executable1;
- pid = win32_spawn (executable, TRUE, argv, env,
- dwCreationFlags, si, pi);
-#else
- if (strchr (executable1, '\\') == NULL)
- pid = win32_spawn (executable1, TRUE, argv, env,
- dwCreationFlags, si, pi);
- else if (executable1[0] != '\\')
- pid = win32_spawn (executable1, FALSE, argv, env,
- dwCreationFlags, si, pi);
- else
- {
- const char *newex = mingw_rootify (executable1);
- *avhere = newex;
- pid = win32_spawn (newex, FALSE, argv, env,
- dwCreationFlags, si, pi);
- if (executable1 != newex)
- free ((char *) newex);
- if (pid == (pid_t) -1)
- {
- newex = msys_rootify (executable1);
- if (newex != executable1)
- {
- *avhere = newex;
- pid = win32_spawn (newex, FALSE, argv, env,
- dwCreationFlags, si, pi);
- free ((char *) newex);
- }
- }
- }
-#endif
- free (avhere);
- }
- }
- }
- if (pid == (pid_t) -1)
- errno = save_errno;
- return pid;
-}
-
-/* Execute a child. */
-
-static pid_t
-pex_win32_exec_child (struct pex_obj *obj ATTRIBUTE_UNUSED, int flags,
- const char *executable, char * const * argv,
- char* const* env,
- int in, int out, int errdes,
- int toclose ATTRIBUTE_UNUSED,
- const char **errmsg,
- int *err)
-{
- pid_t pid;
- HANDLE stdin_handle;
- HANDLE stdout_handle;
- HANDLE stderr_handle;
- DWORD dwCreationFlags;
- OSVERSIONINFO version_info;
- STARTUPINFO si;
- PROCESS_INFORMATION pi;
- int orig_out, orig_in, orig_err;
- BOOL separate_stderr = !(flags & PEX_STDERR_TO_STDOUT);
-
- /* Ensure we have inheritable descriptors to pass to the child, and close the
- original descriptors. */
- orig_in = in;
- in = _dup (orig_in);
- if (orig_in != STDIN_FILENO)
- _close (orig_in);
-
- orig_out = out;
- out = _dup (orig_out);
- if (orig_out != STDOUT_FILENO)
- _close (orig_out);
-
- if (separate_stderr)
- {
- orig_err = errdes;
- errdes = _dup (orig_err);
- if (orig_err != STDERR_FILENO)
- _close (orig_err);
- }
-
- stdin_handle = INVALID_HANDLE_VALUE;
- stdout_handle = INVALID_HANDLE_VALUE;
- stderr_handle = INVALID_HANDLE_VALUE;
-
- stdin_handle = (HANDLE) _get_osfhandle (in);
- stdout_handle = (HANDLE) _get_osfhandle (out);
- if (separate_stderr)
- stderr_handle = (HANDLE) _get_osfhandle (errdes);
- else
- stderr_handle = stdout_handle;
-
- /* Determine the version of Windows we are running on. */
- version_info.dwOSVersionInfoSize = sizeof (version_info);
- GetVersionEx (&version_info);
- if (version_info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS)
- /* On Windows 95/98/ME the CREATE_NO_WINDOW flag is not
- supported, so we cannot avoid creating a console window. */
- dwCreationFlags = 0;
- else
- {
- HANDLE conout_handle;
-
- /* Determine whether or not we have an associated console. */
- conout_handle = CreateFile("CONOUT$",
- GENERIC_WRITE,
- FILE_SHARE_WRITE,
- /*lpSecurityAttributes=*/NULL,
- OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL,
- /*hTemplateFile=*/NULL);
- if (conout_handle == INVALID_HANDLE_VALUE)
- /* There is no console associated with this process. Since
- the child is a console process, the OS would normally
- create a new console Window for the child. Since we'll be
- redirecting the child's standard streams, we do not need
- the console window. */
- dwCreationFlags = CREATE_NO_WINDOW;
- else
- {
- /* There is a console associated with the process, so the OS
- will not create a new console. And, if we use
- CREATE_NO_WINDOW in this situation, the child will have
- no associated console. Therefore, if the child's
- standard streams are connected to the console, the output
- will be discarded. */
- CloseHandle(conout_handle);
- dwCreationFlags = 0;
- }
- }
-
- /* Since the child will be a console process, it will, by default,
- connect standard input/output to its console. However, we want
- the child to use the handles specifically designated above. In
- addition, if there is no console (such as when we are running in
- a Cygwin X window), then we must redirect the child's
- input/output, as there is no console for the child to use. */
- memset (&si, 0, sizeof (si));
- si.cb = sizeof (si);
- si.dwFlags = STARTF_USESTDHANDLES;
- si.hStdInput = stdin_handle;
- si.hStdOutput = stdout_handle;
- si.hStdError = stderr_handle;
-
- /* Create the child process. */
- pid = win32_spawn (executable, (flags & PEX_SEARCH) != 0,
- argv, env, dwCreationFlags, &si, &pi);
- if (pid == (pid_t) -1)
- pid = spawn_script (executable, argv, env, dwCreationFlags,
- &si, &pi);
- if (pid == (pid_t) -1)
- {
- *err = ENOENT;
- *errmsg = "CreateProcess";
- }
-
- /* Close the standard input, standard output and standard error handles
- in the parent. */
-
- _close (in);
- _close (out);
- if (separate_stderr)
- _close (errdes);
-
- return pid;
-}
-
-/* Wait for a child process to complete. MS CRTDLL doesn't return
- enough information in status to decide if the child exited due to a
- signal or not, rather it simply returns an integer with the exit
- code of the child; eg., if the child exited with an abort() call
- and didn't have a handler for SIGABRT, it simply returns with
- status == 3. We fix the status code to conform to the usual WIF*
- macros. Note that WIFSIGNALED will never be true under CRTDLL. */
-
-static pid_t
-pex_win32_wait (struct pex_obj *obj ATTRIBUTE_UNUSED, pid_t pid,
- int *status, struct pex_time *time, int done ATTRIBUTE_UNUSED,
- const char **errmsg, int *err)
-{
- DWORD termstat;
- HANDLE h;
-
- if (time != NULL)
- memset (time, 0, sizeof *time);
-
- h = (HANDLE) pid;
-
- /* FIXME: If done is non-zero, we should probably try to kill the
- process. */
- if (WaitForSingleObject (h, INFINITE) != WAIT_OBJECT_0)
- {
- CloseHandle (h);
- *err = ECHILD;
- *errmsg = "WaitForSingleObject";
- return -1;
- }
-
- GetExitCodeProcess (h, &termstat);
- CloseHandle (h);
-
- /* A value of 3 indicates that the child caught a signal, but not
- which one. Since only SIGABRT, SIGFPE and SIGINT do anything, we
- report SIGABRT. */
- if (termstat == 3)
- *status = SIGABRT;
- else
- *status = (termstat & 0xff) << 8;
-
- return 0;
-}
-
-/* Create a pipe. */
-
-static int
-pex_win32_pipe (struct pex_obj *obj ATTRIBUTE_UNUSED, int *p,
- int binary)
-{
- return _pipe (p, 256, (binary ? _O_BINARY : _O_TEXT) | _O_NOINHERIT);
-}
-
-/* Get a FILE pointer to read from a file descriptor. */
-
-static FILE *
-pex_win32_fdopenr (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd,
- int binary)
-{
- HANDLE h = (HANDLE) _get_osfhandle (fd);
- if (h == INVALID_HANDLE_VALUE)
- return NULL;
- if (! SetHandleInformation (h, HANDLE_FLAG_INHERIT, 0))
- return NULL;
- return fdopen (fd, binary ? "rb" : "r");
-}
-
-static FILE *
-pex_win32_fdopenw (struct pex_obj *obj ATTRIBUTE_UNUSED, int fd,
- int binary)
-{
- HANDLE h = (HANDLE) _get_osfhandle (fd);
- if (h == INVALID_HANDLE_VALUE)
- return NULL;
- if (! SetHandleInformation (h, HANDLE_FLAG_INHERIT, 0))
- return NULL;
- return fdopen (fd, binary ? "wb" : "w");
-}
-
-#ifdef MAIN
-#include <stdio.h>
-
-int
-main (int argc ATTRIBUTE_UNUSED, char **argv)
-{
- char const *errmsg;
- int err;
- argv++;
- printf ("%ld\n", (long) pex_win32_exec_child (NULL, PEX_SEARCH, argv[0], argv, NULL, 0, 0, 1, 2, &errmsg, &err));
- exit (0);
-}
-#endif
diff --git a/gcc-4.7/libiberty/pexecute.c b/gcc-4.7/libiberty/pexecute.c
deleted file mode 100644
index 97f157447..000000000
--- a/gcc-4.7/libiberty/pexecute.c
+++ /dev/null
@@ -1,124 +0,0 @@
-/* Utilities to execute a program in a subprocess (possibly linked by pipes
- with other subprocesses), and wait for it.
- Copyright (C) 2004 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/* pexecute is an old routine. This implementation uses the newer
- pex_init/pex_run/pex_get_status/pex_free routines. Don't use
- pexecute in new code. Use the newer routines instead. */
-
-#include "config.h"
-#include "libiberty.h"
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-/* We only permit a single pexecute chain to execute at a time. This
- was always true anyhow, though it wasn't documented. */
-
-static struct pex_obj *pex;
-static int idx;
-
-int
-pexecute (const char *program, char * const *argv, const char *pname,
- const char *temp_base, char **errmsg_fmt, char **errmsg_arg,
- int flags)
-{
- const char *errmsg;
- int err;
-
- if ((flags & PEXECUTE_FIRST) != 0)
- {
- if (pex != NULL)
- {
- *errmsg_fmt = (char *) "pexecute already in progress";
- *errmsg_arg = NULL;
- return -1;
- }
- pex = pex_init (PEX_USE_PIPES, pname, temp_base);
- idx = 0;
- }
- else
- {
- if (pex == NULL)
- {
- *errmsg_fmt = (char *) "pexecute not in progress";
- *errmsg_arg = NULL;
- return -1;
- }
- }
-
- errmsg = pex_run (pex,
- (((flags & PEXECUTE_LAST) != 0 ? PEX_LAST : 0)
- | ((flags & PEXECUTE_SEARCH) != 0 ? PEX_SEARCH : 0)),
- program, argv, NULL, NULL, &err);
- if (errmsg != NULL)
- {
- *errmsg_fmt = (char *) errmsg;
- *errmsg_arg = NULL;
- return -1;
- }
-
- /* Instead of a PID, we just return a one-based index into the
- status values. We avoid zero just because the old pexecute would
- never return it. */
- return ++idx;
-}
-
-int
-pwait (int pid, int *status, int flags ATTRIBUTE_UNUSED)
-{
- /* The PID returned by pexecute is one-based. */
- --pid;
-
- if (pex == NULL || pid < 0 || pid >= idx)
- return -1;
-
- if (pid == 0 && idx == 1)
- {
- if (!pex_get_status (pex, 1, status))
- return -1;
- }
- else
- {
- int *vector;
-
- vector = XNEWVEC (int, idx);
- if (!pex_get_status (pex, idx, vector))
- {
- free (vector);
- return -1;
- }
- *status = vector[pid];
- free (vector);
- }
-
- /* Assume that we are done after the caller has retrieved the last
- exit status. The original implementation did not require that
- the exit statuses be retrieved in order, but this implementation
- does. */
- if (pid + 1 == idx)
- {
- pex_free (pex);
- pex = NULL;
- idx = 0;
- }
-
- return pid + 1;
-}
diff --git a/gcc-4.7/libiberty/pexecute.txh b/gcc-4.7/libiberty/pexecute.txh
deleted file mode 100644
index c3e403856..000000000
--- a/gcc-4.7/libiberty/pexecute.txh
+++ /dev/null
@@ -1,316 +0,0 @@
-@c -*- mode: texinfo -*-
-@deftypefn Extension {struct pex_obj *} pex_init (int @var{flags}, @
- const char *@var{pname}, const char *@var{tempbase})
-
-Prepare to execute one or more programs, with standard output of each
-program fed to standard input of the next. This is a system
-independent interface to execute a pipeline.
-
-@var{flags} is a bitwise combination of the following:
-
-@table @code
-
-@vindex PEX_RECORD_TIMES
-@item PEX_RECORD_TIMES
-Record subprocess times if possible.
-
-@vindex PEX_USE_PIPES
-@item PEX_USE_PIPES
-Use pipes for communication between processes, if possible.
-
-@vindex PEX_SAVE_TEMPS
-@item PEX_SAVE_TEMPS
-Don't delete temporary files used for communication between
-processes.
-
-@end table
-
-@var{pname} is the name of program to be executed, used in error
-messages. @var{tempbase} is a base name to use for any required
-temporary files; it may be @code{NULL} to use a randomly chosen name.
-
-@end deftypefn
-
-@deftypefn Extension {const char *} pex_run (struct pex_obj *@var{obj}, @
- int @var{flags}, const char *@var{executable}, char * const *@var{argv}, @
- const char *@var{outname}, const char *@var{errname}, int *@var{err})
-
-Execute one program in a pipeline. On success this returns
-@code{NULL}. On failure it returns an error message, a statically
-allocated string.
-
-@var{obj} is returned by a previous call to @code{pex_init}.
-
-@var{flags} is a bitwise combination of the following:
-
-@table @code
-
-@vindex PEX_LAST
-@item PEX_LAST
-This must be set on the last program in the pipeline. In particular,
-it should be set when executing a single program. The standard output
-of the program will be sent to @var{outname}, or, if @var{outname} is
-@code{NULL}, to the standard output of the calling program. Do @emph{not}
-set this bit if you want to call @code{pex_read_output}
-(described below). After a call to @code{pex_run} with this bit set,
-@var{pex_run} may no longer be called with the same @var{obj}.
-
-@vindex PEX_SEARCH
-@item PEX_SEARCH
-Search for the program using the user's executable search path.
-
-@vindex PEX_SUFFIX
-@item PEX_SUFFIX
-@var{outname} is a suffix. See the description of @var{outname},
-below.
-
-@vindex PEX_STDERR_TO_STDOUT
-@item PEX_STDERR_TO_STDOUT
-Send the program's standard error to standard output, if possible.
-
-@vindex PEX_BINARY_INPUT
-@vindex PEX_BINARY_OUTPUT
-@vindex PEX_BINARY_ERROR
-@item PEX_BINARY_INPUT
-@itemx PEX_BINARY_OUTPUT
-@itemx PEX_BINARY_ERROR
-The standard input (output or error) of the program should be read (written) in
-binary mode rather than text mode. These flags are ignored on systems
-which do not distinguish binary mode and text mode, such as Unix. For
-proper behavior these flags should match appropriately---a call to
-@code{pex_run} using @code{PEX_BINARY_OUTPUT} should be followed by a
-call using @code{PEX_BINARY_INPUT}.
-
-@vindex PEX_STDERR_TO_PIPE
-@item PEX_STDERR_TO_PIPE
-Send the program's standard error to a pipe, if possible. This flag
-cannot be specified together with @code{PEX_STDERR_TO_STDOUT}. This
-flag can be specified only on the last program in pipeline.
-
-@end table
-
-@var{executable} is the program to execute. @var{argv} is the set of
-arguments to pass to the program; normally @code{@var{argv}[0]} will
-be a copy of @var{executable}.
-
-@var{outname} is used to set the name of the file to use for standard
-output. There are two cases in which no output file will be used:
-
-@enumerate
-@item
-if @code{PEX_LAST} is not set in @var{flags}, and @code{PEX_USE_PIPES}
-was set in the call to @code{pex_init}, and the system supports pipes
-
-@item
-if @code{PEX_LAST} is set in @var{flags}, and @var{outname} is
-@code{NULL}
-@end enumerate
-
-@noindent
-Otherwise the code will use a file to hold standard
-output. If @code{PEX_LAST} is not set, this file is considered to be
-a temporary file, and it will be removed when no longer needed, unless
-@code{PEX_SAVE_TEMPS} was set in the call to @code{pex_init}.
-
-There are two cases to consider when setting the name of the file to
-hold standard output.
-
-@enumerate
-@item
-@code{PEX_SUFFIX} is set in @var{flags}. In this case
-@var{outname} may not be @code{NULL}. If the @var{tempbase} parameter
-to @code{pex_init} was not @code{NULL}, then the output file name is
-the concatenation of @var{tempbase} and @var{outname}. If
-@var{tempbase} was @code{NULL}, then the output file name is a random
-file name ending in @var{outname}.
-
-@item
-@code{PEX_SUFFIX} was not set in @var{flags}. In this
-case, if @var{outname} is not @code{NULL}, it is used as the output
-file name. If @var{outname} is @code{NULL}, and @var{tempbase} was
-not NULL, the output file name is randomly chosen using
-@var{tempbase}. Otherwise the output file name is chosen completely
-at random.
-@end enumerate
-
-@var{errname} is the file name to use for standard error output. If
-it is @code{NULL}, standard error is the same as the caller's.
-Otherwise, standard error is written to the named file.
-
-On an error return, the code sets @code{*@var{err}} to an @code{errno}
-value, or to 0 if there is no relevant @code{errno}.
-
-@end deftypefn
-
-@deftypefn Extension {const char *} pex_run_in_environment (struct pex_obj *@var{obj}, @
- int @var{flags}, const char *@var{executable}, char * const *@var{argv}, @
- char * const *@var{env}, int @var{env_size}, const char *@var{outname}, @
- const char *@var{errname}, int *@var{err})
-
-Execute one program in a pipeline, permitting the environment for the
-program to be specified. Behaviour and parameters not listed below are
-as for @code{pex_run}.
-
-@var{env} is the environment for the child process, specified as an array of
-character pointers. Each element of the array should point to a string of the
-form @code{VAR=VALUE}, with the exception of the last element that must be
-@code{NULL}.
-
-@end deftypefn
-
-@deftypefn Extension {FILE *} pex_input_file (struct pex_obj *@var{obj}, @
- int @var{flags}, const char *@var{in_name})
-
-Return a stream for a temporary file to pass to the first program in
-the pipeline as input.
-
-The name of the input file is chosen according to the same rules
-@code{pex_run} uses to choose output file names, based on
-@var{in_name}, @var{obj} and the @code{PEX_SUFFIX} bit in @var{flags}.
-
-Don't call @code{fclose} on the returned stream; the first call to
-@code{pex_run} closes it automatically.
-
-If @var{flags} includes @code{PEX_BINARY_OUTPUT}, open the stream in
-binary mode; otherwise, open it in the default mode. Including
-@code{PEX_BINARY_OUTPUT} in @var{flags} has no effect on Unix.
-@end deftypefn
-
-@deftypefn Extension {FILE *} pex_input_pipe (struct pex_obj *@var{obj}, @
- int @var{binary})
-
-Return a stream @var{fp} for a pipe connected to the standard input of
-the first program in the pipeline; @var{fp} is opened for writing.
-You must have passed @code{PEX_USE_PIPES} to the @code{pex_init} call
-that returned @var{obj}.
-
-You must close @var{fp} using @code{fclose} yourself when you have
-finished writing data to the pipeline.
-
-The file descriptor underlying @var{fp} is marked not to be inherited
-by child processes.
-
-On systems that do not support pipes, this function returns
-@code{NULL}, and sets @code{errno} to @code{EINVAL}. If you would
-like to write code that is portable to all systems the @code{pex}
-functions support, consider using @code{pex_input_file} instead.
-
-There are two opportunities for deadlock using
-@code{pex_input_pipe}:
-
-@itemize @bullet
-@item
-Most systems' pipes can buffer only a fixed amount of data; a process
-that writes to a full pipe blocks. Thus, if you write to @file{fp}
-before starting the first process, you run the risk of blocking when
-there is no child process yet to read the data and allow you to
-continue. @code{pex_input_pipe} makes no promises about the
-size of the pipe's buffer, so if you need to write any data at all
-before starting the first process in the pipeline, consider using
-@code{pex_input_file} instead.
-
-@item
-Using @code{pex_input_pipe} and @code{pex_read_output} together
-may also cause deadlock. If the output pipe fills up, so that each
-program in the pipeline is waiting for the next to read more data, and
-you fill the input pipe by writing more data to @var{fp}, then there
-is no way to make progress: the only process that could read data from
-the output pipe is you, but you are blocked on the input pipe.
-
-@end itemize
-
-@end deftypefn
-
-@deftypefn Extension {FILE *} pex_read_output (struct pex_obj *@var{obj}, @
- int @var{binary})
-
-Returns a @code{FILE} pointer which may be used to read the standard
-output of the last program in the pipeline. When this is used,
-@code{PEX_LAST} should not be used in a call to @code{pex_run}. After
-this is called, @code{pex_run} may no longer be called with the same
-@var{obj}. @var{binary} should be non-zero if the file should be
-opened in binary mode. Don't call @code{fclose} on the returned file;
-it will be closed by @code{pex_free}.
-
-@end deftypefn
-
-@deftypefn Extension {FILE *} pex_read_err (struct pex_obj *@var{obj}, @
- int @var{binary})
-
-Returns a @code{FILE} pointer which may be used to read the standard
-error of the last program in the pipeline. When this is used,
-@code{PEX_LAST} should not be used in a call to @code{pex_run}. After
-this is called, @code{pex_run} may no longer be called with the same
-@var{obj}. @var{binary} should be non-zero if the file should be
-opened in binary mode. Don't call @code{fclose} on the returned file;
-it will be closed by @code{pex_free}.
-
-@end deftypefn
-
-
-@deftypefn Extension int pex_get_status (struct pex_obj *@var{obj}, @
- int @var{count}, int *@var{vector})
-
-Returns the exit status of all programs run using @var{obj}.
-@var{count} is the number of results expected. The results will be
-placed into @var{vector}. The results are in the order of the calls
-to @code{pex_run}. Returns 0 on error, 1 on success.
-
-@end deftypefn
-
-@deftypefn Extension int pex_get_times (struct pex_obj *@var{obj}, @
- int @var{count}, struct pex_time *@var{vector})
-
-Returns the process execution times of all programs run using
-@var{obj}. @var{count} is the number of results expected. The
-results will be placed into @var{vector}. The results are in the
-order of the calls to @code{pex_run}. Returns 0 on error, 1 on
-success.
-
-@code{struct pex_time} has the following fields of the type
-@code{unsigned long}: @code{user_seconds},
-@code{user_microseconds}, @code{system_seconds},
-@code{system_microseconds}. On systems which do not support reporting
-process times, all the fields will be set to @code{0}.
-
-@end deftypefn
-
-@deftypefn Extension void pex_free (struct pex_obj @var{obj})
-
-Clean up and free all data associated with @var{obj}. If you have not
-yet called @code{pex_get_times} or @code{pex_get_status}, this will
-try to kill the subprocesses.
-
-@end deftypefn
-
-@deftypefn Extension {const char *} pex_one (int @var{flags}, @
- const char *@var{executable}, char * const *@var{argv}, @
- const char *@var{pname}, const char *@var{outname}, const char *@var{errname}, @
- int *@var{status}, int *@var{err})
-
-An interface to permit the easy execution of a
-single program. The return value and most of the parameters are as
-for a call to @code{pex_run}. @var{flags} is restricted to a
-combination of @code{PEX_SEARCH}, @code{PEX_STDERR_TO_STDOUT}, and
-@code{PEX_BINARY_OUTPUT}. @var{outname} is interpreted as if
-@code{PEX_LAST} were set. On a successful return, @code{*@var{status}} will
-be set to the exit status of the program.
-
-@end deftypefn
-
-@deftypefn Extension int pexecute (const char *@var{program}, @
- char * const *@var{argv}, const char *@var{this_pname}, @
- const char *@var{temp_base}, char **@var{errmsg_fmt}, @
- char **@var{errmsg_arg}, int @var{flags})
-
-This is the old interface to execute one or more programs. It is
-still supported for compatibility purposes, but is no longer
-documented.
-
-@end deftypefn
-
-@deftypefn Extension int pwait (int @var{pid}, int *@var{status}, int @var{flags})
-
-Another part of the old execution interface.
-
-@end deftypefn
diff --git a/gcc-4.7/libiberty/physmem.c b/gcc-4.7/libiberty/physmem.c
deleted file mode 100644
index 09fbf3f8c..000000000
--- a/gcc-4.7/libiberty/physmem.c
+++ /dev/null
@@ -1,305 +0,0 @@
-/* Calculate the size of physical memory.
- Copyright 2000, 2001, 2003, 2004, 2005 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* Written by Paul Eggert. */
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#if HAVE_SYS_PSTAT_H
-# include <sys/pstat.h>
-#endif
-
-#if HAVE_SYS_SYSMP_H
-# include <sys/sysmp.h>
-#endif
-
-#if HAVE_SYS_SYSINFO_H && HAVE_MACHINE_HAL_SYSINFO_H
-# include <sys/sysinfo.h>
-# include <machine/hal_sysinfo.h>
-#endif
-
-#if HAVE_SYS_TABLE_H
-# include <sys/table.h>
-#endif
-
-#include <sys/types.h>
-
-#if HAVE_SYS_PARAM_H
-# include <sys/param.h>
-#endif
-
-#if HAVE_SYS_SYSCTL_H
-# include <sys/sysctl.h>
-#endif
-
-#if HAVE_SYS_SYSTEMCFG_H
-# include <sys/systemcfg.h>
-#endif
-
-#ifdef _WIN32
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-/* MEMORYSTATUSEX is missing from older windows headers, so define
- a local replacement. */
-typedef struct
-{
- DWORD dwLength;
- DWORD dwMemoryLoad;
- DWORDLONG ullTotalPhys;
- DWORDLONG ullAvailPhys;
- DWORDLONG ullTotalPageFile;
- DWORDLONG ullAvailPageFile;
- DWORDLONG ullTotalVirtual;
- DWORDLONG ullAvailVirtual;
- DWORDLONG ullAvailExtendedVirtual;
-} lMEMORYSTATUSEX;
-typedef WINBOOL (WINAPI *PFN_MS_EX) (lMEMORYSTATUSEX*);
-#endif
-
-#include "libiberty.h"
-
-/* Return the total amount of physical memory. */
-double
-physmem_total (void)
-{
-#if defined _SC_PHYS_PAGES && defined _SC_PAGESIZE
- { /* This works on linux-gnu, solaris2 and cygwin. */
- double pages = sysconf (_SC_PHYS_PAGES);
- double pagesize = sysconf (_SC_PAGESIZE);
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
-#endif
-
-#if HAVE_PSTAT_GETSTATIC
- { /* This works on hpux11. */
- struct pst_static pss;
- if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0))
- {
- double pages = pss.physical_memory;
- double pagesize = pss.page_size;
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
- }
-#endif
-
-#if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE
- { /* This works on irix6. */
- struct rminfo realmem;
- if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0)
- {
- double pagesize = sysconf (_SC_PAGESIZE);
- double pages = realmem.physmem;
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
- }
-#endif
-
-#if HAVE_GETSYSINFO && defined GSI_PHYSMEM
- { /* This works on Tru64 UNIX V4/5. */
- int physmem;
-
- if (getsysinfo (GSI_PHYSMEM, (caddr_t) &physmem, sizeof (physmem),
- NULL, NULL, NULL) == 1)
- {
- double kbytes = physmem;
-
- if (0 <= kbytes)
- return kbytes * 1024.0;
- }
- }
-#endif
-
-#if HAVE_SYSCTL && defined HW_PHYSMEM
- { /* This works on *bsd and darwin. */
- unsigned int physmem;
- size_t len = sizeof physmem;
- static int mib[2] = { CTL_HW, HW_PHYSMEM };
-
- if (sysctl (mib, ARRAY_SIZE (mib), &physmem, &len, NULL, 0) == 0
- && len == sizeof (physmem))
- return (double) physmem;
- }
-#endif
-
-#if HAVE__SYSTEM_CONFIGURATION
- /* This works on AIX 4.3.3+. */
- return _system_configuration.physmem;
-#endif
-
-#if defined _WIN32
- { /* this works on windows */
- PFN_MS_EX pfnex;
- HMODULE h = GetModuleHandle ("kernel32.dll");
-
- if (!h)
- return 0.0;
-
- /* Use GlobalMemoryStatusEx if available. */
- if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx")))
- {
- lMEMORYSTATUSEX lms_ex;
- lms_ex.dwLength = sizeof lms_ex;
- if (!pfnex (&lms_ex))
- return 0.0;
- return (double) lms_ex.ullTotalPhys;
- }
-
- /* Fall back to GlobalMemoryStatus which is always available.
- but returns wrong results for physical memory > 4GB. */
- else
- {
- MEMORYSTATUS ms;
- GlobalMemoryStatus (&ms);
- return (double) ms.dwTotalPhys;
- }
- }
-#endif
-
- /* Return 0 if we can't determine the value. */
- return 0;
-}
-
-/* Return the amount of physical memory available. */
-double
-physmem_available (void)
-{
-#if defined _SC_AVPHYS_PAGES && defined _SC_PAGESIZE
- { /* This works on linux-gnu, solaris2 and cygwin. */
- double pages = sysconf (_SC_AVPHYS_PAGES);
- double pagesize = sysconf (_SC_PAGESIZE);
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
-#endif
-
-#if HAVE_PSTAT_GETSTATIC && HAVE_PSTAT_GETDYNAMIC
- { /* This works on hpux11. */
- struct pst_static pss;
- struct pst_dynamic psd;
- if (0 <= pstat_getstatic (&pss, sizeof pss, 1, 0)
- && 0 <= pstat_getdynamic (&psd, sizeof psd, 1, 0))
- {
- double pages = psd.psd_free;
- double pagesize = pss.page_size;
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
- }
-#endif
-
-#if HAVE_SYSMP && defined MP_SAGET && defined MPSA_RMINFO && defined _SC_PAGESIZE
- { /* This works on irix6. */
- struct rminfo realmem;
- if (sysmp (MP_SAGET, MPSA_RMINFO, &realmem, sizeof realmem) == 0)
- {
- double pagesize = sysconf (_SC_PAGESIZE);
- double pages = realmem.availrmem;
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
- }
-#endif
-
-#if HAVE_TABLE && defined TBL_VMSTATS
- { /* This works on Tru64 UNIX V4/5. */
- struct tbl_vmstats vmstats;
-
- if (table (TBL_VMSTATS, 0, &vmstats, 1, sizeof (vmstats)) == 1)
- {
- double pages = vmstats.free_count;
- double pagesize = vmstats.pagesize;
-
- if (0 <= pages && 0 <= pagesize)
- return pages * pagesize;
- }
- }
-#endif
-
-#if HAVE_SYSCTL && defined HW_USERMEM
- { /* This works on *bsd and darwin. */
- unsigned int usermem;
- size_t len = sizeof usermem;
- static int mib[2] = { CTL_HW, HW_USERMEM };
-
- if (sysctl (mib, ARRAY_SIZE (mib), &usermem, &len, NULL, 0) == 0
- && len == sizeof (usermem))
- return (double) usermem;
- }
-#endif
-
-#if defined _WIN32
- { /* this works on windows */
- PFN_MS_EX pfnex;
- HMODULE h = GetModuleHandle ("kernel32.dll");
-
- if (!h)
- return 0.0;
-
- /* Use GlobalMemoryStatusEx if available. */
- if ((pfnex = (PFN_MS_EX) GetProcAddress (h, "GlobalMemoryStatusEx")))
- {
- lMEMORYSTATUSEX lms_ex;
- lms_ex.dwLength = sizeof lms_ex;
- if (!pfnex (&lms_ex))
- return 0.0;
- return (double) lms_ex.ullAvailPhys;
- }
-
- /* Fall back to GlobalMemoryStatus which is always available.
- but returns wrong results for physical memory > 4GB */
- else
- {
- MEMORYSTATUS ms;
- GlobalMemoryStatus (&ms);
- return (double) ms.dwAvailPhys;
- }
- }
-#endif
-
- /* Guess 25% of physical memory. */
- return physmem_total () / 4;
-}
-
-
-#if DEBUG
-
-# include <stdio.h>
-# include <stdlib.h>
-
-int
-main (void)
-{
- printf ("%12.f %12.f\n", physmem_total (), physmem_available ());
- exit (0);
-}
-
-#endif /* DEBUG */
-
-/*
-Local Variables:
-compile-command: "gcc -DDEBUG -DHAVE_CONFIG_H -I.. -g -O -Wall -W physmem.c"
-End:
-*/
diff --git a/gcc-4.7/libiberty/putenv.c b/gcc-4.7/libiberty/putenv.c
deleted file mode 100644
index 248f50e92..000000000
--- a/gcc-4.7/libiberty/putenv.c
+++ /dev/null
@@ -1,84 +0,0 @@
-/* Copyright (C) 1991, 1994, 1995, 1996, 2002 Free Software Foundation, Inc.
- This file based on putenv.c in the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Supplemental int putenv (const char *@var{string})
-
-Uses @code{setenv} or @code{unsetenv} to put @var{string} into
-the environment or remove it. If @var{string} is of the form
-@samp{name=value} the string is added; if no @samp{=} is present the
-name is unset/removed.
-
-@end deftypefn
-
-*/
-
-#if defined (_AIX) && !defined (__GNUC__)
- #pragma alloca
-#endif
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include "ansidecl.h"
-
-#define putenv libiberty_putenv
-
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#if HAVE_STRING_H
-# include <string.h>
-#endif
-
-#ifdef HAVE_ALLOCA_H
-# include <alloca.h>
-#else
-# ifndef alloca
-# ifdef __GNUC__
-# define alloca __builtin_alloca
-# else
-extern char *alloca ();
-# endif /* __GNUC__ */
-# endif /* alloca */
-#endif /* HAVE_ALLOCA_H */
-
-#undef putenv
-
-/* Below this point, it's verbatim code from the glibc-2.0 implementation */
-
-
-/* Put STRING, which is of the form "NAME=VALUE", in the environment. */
-int
-putenv (const char *string)
-{
- const char *const name_end = strchr (string, '=');
-
- if (name_end)
- {
- char *name = (char *) alloca (name_end - string + 1);
- memcpy (name, string, name_end - string);
- name[name_end - string] = '\0';
- return setenv (name, name_end + 1, 1);
- }
-
- unsetenv (string);
- return 0;
-}
diff --git a/gcc-4.7/libiberty/random.c b/gcc-4.7/libiberty/random.c
deleted file mode 100644
index b1d3c6c6a..000000000
--- a/gcc-4.7/libiberty/random.c
+++ /dev/null
@@ -1,404 +0,0 @@
-/*
- * Copyright (c) 1983 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. [rescinded 22 July 1999]
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
- * This is derived from the Berkeley source:
- * @(#)random.c 5.5 (Berkeley) 7/6/88
- * It was reworked for the GNU C Library by Roland McGrath.
- */
-
-/*
-
-@deftypefn Supplement {long int} random (void)
-@deftypefnx Supplement void srandom (unsigned int @var{seed})
-@deftypefnx Supplement void* initstate (unsigned int @var{seed}, @
- void *@var{arg_state}, unsigned long @var{n})
-@deftypefnx Supplement void* setstate (void *@var{arg_state})
-
-Random number functions. @code{random} returns a random number in the
-range 0 to @code{LONG_MAX}. @code{srandom} initializes the random
-number generator to some starting point determined by @var{seed}
-(else, the values returned by @code{random} are always the same for each
-run of the program). @code{initstate} and @code{setstate} allow fine-grained
-control over the state of the random number generator.
-
-@end deftypefn
-
-*/
-
-#include <errno.h>
-
-#if 0
-
-#include <ansidecl.h>
-#include <limits.h>
-#include <stddef.h>
-#include <stdlib.h>
-
-#else
-
-#define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF for 32-bits */
-#define LONG_MAX ((long)(ULONG_MAX >> 1)) /* 0x7FFFFFFF for 32-bits*/
-
-#ifdef __STDC__
-# define PTR void *
-# ifndef NULL
-# define NULL (void *) 0
-# endif
-#else
-# define PTR char *
-# ifndef NULL
-# define NULL (void *) 0
-# endif
-#endif
-
-#endif
-
-long int random (void);
-
-/* An improved random number generation package. In addition to the standard
- rand()/srand() like interface, this package also has a special state info
- interface. The initstate() routine is called with a seed, an array of
- bytes, and a count of how many bytes are being passed in; this array is
- then initialized to contain information for random number generation with
- that much state information. Good sizes for the amount of state
- information are 32, 64, 128, and 256 bytes. The state can be switched by
- calling the setstate() function with the same array as was initiallized
- with initstate(). By default, the package runs with 128 bytes of state
- information and generates far better random numbers than a linear
- congruential generator. If the amount of state information is less than
- 32 bytes, a simple linear congruential R.N.G. is used. Internally, the
- state information is treated as an array of longs; the zeroeth element of
- the array is the type of R.N.G. being used (small integer); the remainder
- of the array is the state information for the R.N.G. Thus, 32 bytes of
- state information will give 7 longs worth of state information, which will
- allow a degree seven polynomial. (Note: The zeroeth word of state
- information also has some other information stored in it; see setstate
- for details). The random number generation technique is a linear feedback
- shift register approach, employing trinomials (since there are fewer terms
- to sum up that way). In this approach, the least significant bit of all
- the numbers in the state table will act as a linear feedback shift register,
- and will have period 2^deg - 1 (where deg is the degree of the polynomial
- being used, assuming that the polynomial is irreducible and primitive).
- The higher order bits will have longer periods, since their values are
- also influenced by pseudo-random carries out of the lower bits. The
- total period of the generator is approximately deg*(2**deg - 1); thus
- doubling the amount of state information has a vast influence on the
- period of the generator. Note: The deg*(2**deg - 1) is an approximation
- only good for large deg, when the period of the shift register is the
- dominant factor. With deg equal to seven, the period is actually much
- longer than the 7*(2**7 - 1) predicted by this formula. */
-
-
-
-/* For each of the currently supported random number generators, we have a
- break value on the amount of state information (you need at least thi
- bytes of state info to support this random number generator), a degree for
- the polynomial (actually a trinomial) that the R.N.G. is based on, and
- separation between the two lower order coefficients of the trinomial. */
-
-/* Linear congruential. */
-#define TYPE_0 0
-#define BREAK_0 8
-#define DEG_0 0
-#define SEP_0 0
-
-/* x**7 + x**3 + 1. */
-#define TYPE_1 1
-#define BREAK_1 32
-#define DEG_1 7
-#define SEP_1 3
-
-/* x**15 + x + 1. */
-#define TYPE_2 2
-#define BREAK_2 64
-#define DEG_2 15
-#define SEP_2 1
-
-/* x**31 + x**3 + 1. */
-#define TYPE_3 3
-#define BREAK_3 128
-#define DEG_3 31
-#define SEP_3 3
-
-/* x**63 + x + 1. */
-#define TYPE_4 4
-#define BREAK_4 256
-#define DEG_4 63
-#define SEP_4 1
-
-
-/* Array versions of the above information to make code run faster.
- Relies on fact that TYPE_i == i. */
-
-#define MAX_TYPES 5 /* Max number of types above. */
-
-static int degrees[MAX_TYPES] = { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 };
-static int seps[MAX_TYPES] = { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 };
-
-
-
-/* Initially, everything is set up as if from:
- initstate(1, randtbl, 128);
- Note that this initialization takes advantage of the fact that srandom
- advances the front and rear pointers 10*rand_deg times, and hence the
- rear pointer which starts at 0 will also end up at zero; thus the zeroeth
- element of the state information, which contains info about the current
- position of the rear pointer is just
- (MAX_TYPES * (rptr - state)) + TYPE_3 == TYPE_3. */
-
-static long int randtbl[DEG_3 + 1] =
- { TYPE_3,
- 0x9a319039, 0x32d9c024, 0x9b663182, 0x5da1f342,
- 0xde3b81e0, 0xdf0a6fb5, 0xf103bc02, 0x48f340fb,
- 0x7449e56b, 0xbeb1dbb0, 0xab5c5918, 0x946554fd,
- 0x8c2e680f, 0xeb3d799f, 0xb11ee0b7, 0x2d436b86,
- 0xda672e2a, 0x1588ca88, 0xe369735d, 0x904f35f7,
- 0xd7158fd6, 0x6fa6f051, 0x616e6b96, 0xac94efdc,
- 0x36413f93, 0xc622c298, 0xf5a42ab8, 0x8a88d77b,
- 0xf5ad9d0e, 0x8999220b, 0x27fb47b9
- };
-
-/* FPTR and RPTR are two pointers into the state info, a front and a rear
- pointer. These two pointers are always rand_sep places aparts, as they
- cycle through the state information. (Yes, this does mean we could get
- away with just one pointer, but the code for random is more efficient
- this way). The pointers are left positioned as they would be from the call:
- initstate(1, randtbl, 128);
- (The position of the rear pointer, rptr, is really 0 (as explained above
- in the initialization of randtbl) because the state table pointer is set
- to point to randtbl[1] (as explained below).) */
-
-static long int *fptr = &randtbl[SEP_3 + 1];
-static long int *rptr = &randtbl[1];
-
-
-
-/* The following things are the pointer to the state information table,
- the type of the current generator, the degree of the current polynomial
- being used, and the separation between the two pointers.
- Note that for efficiency of random, we remember the first location of
- the state information, not the zeroeth. Hence it is valid to access
- state[-1], which is used to store the type of the R.N.G.
- Also, we remember the last location, since this is more efficient than
- indexing every time to find the address of the last element to see if
- the front and rear pointers have wrapped. */
-
-static long int *state = &randtbl[1];
-
-static int rand_type = TYPE_3;
-static int rand_deg = DEG_3;
-static int rand_sep = SEP_3;
-
-static long int *end_ptr = &randtbl[sizeof(randtbl) / sizeof(randtbl[0])];
-
-/* Initialize the random number generator based on the given seed. If the
- type is the trivial no-state-information type, just remember the seed.
- Otherwise, initializes state[] based on the given "seed" via a linear
- congruential generator. Then, the pointers are set to known locations
- that are exactly rand_sep places apart. Lastly, it cycles the state
- information a given number of times to get rid of any initial dependencies
- introduced by the L.C.R.N.G. Note that the initialization of randtbl[]
- for default usage relies on values produced by this routine. */
-void
-srandom (unsigned int x)
-{
- state[0] = x;
- if (rand_type != TYPE_0)
- {
- register long int i;
- for (i = 1; i < rand_deg; ++i)
- state[i] = (1103515145 * state[i - 1]) + 12345;
- fptr = &state[rand_sep];
- rptr = &state[0];
- for (i = 0; i < 10 * rand_deg; ++i)
- random();
- }
-}
-
-/* Initialize the state information in the given array of N bytes for
- future random number generation. Based on the number of bytes we
- are given, and the break values for the different R.N.G.'s, we choose
- the best (largest) one we can and set things up for it. srandom is
- then called to initialize the state information. Note that on return
- from srandom, we set state[-1] to be the type multiplexed with the current
- value of the rear pointer; this is so successive calls to initstate won't
- lose this information and will be able to restart with setstate.
- Note: The first thing we do is save the current state, if any, just like
- setstate so that it doesn't matter when initstate is called.
- Returns a pointer to the old state. */
-PTR
-initstate (unsigned int seed, PTR arg_state, unsigned long n)
-{
- PTR ostate = (PTR) &state[-1];
-
- if (rand_type == TYPE_0)
- state[-1] = rand_type;
- else
- state[-1] = (MAX_TYPES * (rptr - state)) + rand_type;
- if (n < BREAK_1)
- {
- if (n < BREAK_0)
- {
- errno = EINVAL;
- return NULL;
- }
- rand_type = TYPE_0;
- rand_deg = DEG_0;
- rand_sep = SEP_0;
- }
- else if (n < BREAK_2)
- {
- rand_type = TYPE_1;
- rand_deg = DEG_1;
- rand_sep = SEP_1;
- }
- else if (n < BREAK_3)
- {
- rand_type = TYPE_2;
- rand_deg = DEG_2;
- rand_sep = SEP_2;
- }
- else if (n < BREAK_4)
- {
- rand_type = TYPE_3;
- rand_deg = DEG_3;
- rand_sep = SEP_3;
- }
- else
- {
- rand_type = TYPE_4;
- rand_deg = DEG_4;
- rand_sep = SEP_4;
- }
-
- state = &((long int *) arg_state)[1]; /* First location. */
- /* Must set END_PTR before srandom. */
- end_ptr = &state[rand_deg];
- srandom(seed);
- if (rand_type == TYPE_0)
- state[-1] = rand_type;
- else
- state[-1] = (MAX_TYPES * (rptr - state)) + rand_type;
-
- return ostate;
-}
-
-/* Restore the state from the given state array.
- Note: It is important that we also remember the locations of the pointers
- in the current state information, and restore the locations of the pointers
- from the old state information. This is done by multiplexing the pointer
- location into the zeroeth word of the state information. Note that due
- to the order in which things are done, it is OK to call setstate with the
- same state as the current state
- Returns a pointer to the old state information. */
-
-PTR
-setstate (PTR arg_state)
-{
- register long int *new_state = (long int *) arg_state;
- register int type = new_state[0] % MAX_TYPES;
- register int rear = new_state[0] / MAX_TYPES;
- PTR ostate = (PTR) &state[-1];
-
- if (rand_type == TYPE_0)
- state[-1] = rand_type;
- else
- state[-1] = (MAX_TYPES * (rptr - state)) + rand_type;
-
- switch (type)
- {
- case TYPE_0:
- case TYPE_1:
- case TYPE_2:
- case TYPE_3:
- case TYPE_4:
- rand_type = type;
- rand_deg = degrees[type];
- rand_sep = seps[type];
- break;
- default:
- /* State info munged. */
- errno = EINVAL;
- return NULL;
- }
-
- state = &new_state[1];
- if (rand_type != TYPE_0)
- {
- rptr = &state[rear];
- fptr = &state[(rear + rand_sep) % rand_deg];
- }
- /* Set end_ptr too. */
- end_ptr = &state[rand_deg];
-
- return ostate;
-}
-
-/* If we are using the trivial TYPE_0 R.N.G., just do the old linear
- congruential bit. Otherwise, we do our fancy trinomial stuff, which is the
- same in all ther other cases due to all the global variables that have been
- set up. The basic operation is to add the number at the rear pointer into
- the one at the front pointer. Then both pointers are advanced to the next
- location cyclically in the table. The value returned is the sum generated,
- reduced to 31 bits by throwing away the "least random" low bit.
- Note: The code takes advantage of the fact that both the front and
- rear pointers can't wrap on the same call by not testing the rear
- pointer if the front one has wrapped. Returns a 31-bit random number. */
-
-long int
-random (void)
-{
- if (rand_type == TYPE_0)
- {
- state[0] = ((state[0] * 1103515245) + 12345) & LONG_MAX;
- return state[0];
- }
- else
- {
- long int i;
- *fptr += *rptr;
- /* Chucking least random bit. */
- i = (*fptr >> 1) & LONG_MAX;
- ++fptr;
- if (fptr >= end_ptr)
- {
- fptr = state;
- ++rptr;
- }
- else
- {
- ++rptr;
- if (rptr >= end_ptr)
- rptr = state;
- }
- return i;
- }
-}
diff --git a/gcc-4.7/libiberty/regex.c b/gcc-4.7/libiberty/regex.c
deleted file mode 100644
index d65eedb16..000000000
--- a/gcc-4.7/libiberty/regex.c
+++ /dev/null
@@ -1,8202 +0,0 @@
-/* Extended regular expression matching and search library,
- version 0.12.
- (Implements POSIX draft P1003.2/D11.2, except for some of the
- internationalization features.)
-
- Copyright (C) 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
- 2002, 2005, 2010 Free Software Foundation, Inc.
- This file is part of the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301 USA. */
-
-/* This file has been modified for usage in libiberty. It includes "xregex.h"
- instead of <regex.h>. The "xregex.h" header file renames all external
- routines with an "x" prefix so they do not collide with the native regex
- routines or with other components regex routines. */
-/* AIX requires this to be the first thing in the file. */
-#if defined _AIX && !defined __GNUC__ && !defined REGEX_MALLOC
- #pragma alloca
-#endif
-
-#undef _GNU_SOURCE
-#define _GNU_SOURCE
-
-#ifndef INSIDE_RECURSION
-# ifdef HAVE_CONFIG_H
-# include <config.h>
-# endif
-#endif
-
-#include <ansidecl.h>
-
-#ifndef INSIDE_RECURSION
-
-# if defined STDC_HEADERS && !defined emacs
-# include <stddef.h>
-# else
-/* We need this for `regex.h', and perhaps for the Emacs include files. */
-# include <sys/types.h>
-# endif
-
-# define WIDE_CHAR_SUPPORT (HAVE_WCTYPE_H && HAVE_WCHAR_H && HAVE_BTOWC)
-
-/* For platform which support the ISO C amendement 1 functionality we
- support user defined character classes. */
-# if defined _LIBC || WIDE_CHAR_SUPPORT
-/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */
-# include <wchar.h>
-# include <wctype.h>
-# endif
-
-# ifdef _LIBC
-/* We have to keep the namespace clean. */
-# define regfree(preg) __regfree (preg)
-# define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef)
-# define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags)
-# define regerror(errcode, preg, errbuf, errbuf_size) \
- __regerror(errcode, preg, errbuf, errbuf_size)
-# define re_set_registers(bu, re, nu, st, en) \
- __re_set_registers (bu, re, nu, st, en)
-# define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \
- __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop)
-# define re_match(bufp, string, size, pos, regs) \
- __re_match (bufp, string, size, pos, regs)
-# define re_search(bufp, string, size, startpos, range, regs) \
- __re_search (bufp, string, size, startpos, range, regs)
-# define re_compile_pattern(pattern, length, bufp) \
- __re_compile_pattern (pattern, length, bufp)
-# define re_set_syntax(syntax) __re_set_syntax (syntax)
-# define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \
- __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop)
-# define re_compile_fastmap(bufp) __re_compile_fastmap (bufp)
-
-# define btowc __btowc
-
-/* We are also using some library internals. */
-# include <locale/localeinfo.h>
-# include <locale/elem-hash.h>
-# include <langinfo.h>
-# include <locale/coll-lookup.h>
-# endif
-
-/* This is for other GNU distributions with internationalized messages. */
-# if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC
-# include <libintl.h>
-# ifdef _LIBC
-# undef gettext
-# define gettext(msgid) __dcgettext ("libc", msgid, LC_MESSAGES)
-# endif
-# else
-# define gettext(msgid) (msgid)
-# endif
-
-# ifndef gettext_noop
-/* This define is so xgettext can find the internationalizable
- strings. */
-# define gettext_noop(String) String
-# endif
-
-/* The `emacs' switch turns on certain matching commands
- that make sense only in Emacs. */
-# ifdef emacs
-
-# include "lisp.h"
-# include "buffer.h"
-# include "syntax.h"
-
-# else /* not emacs */
-
-/* If we are not linking with Emacs proper,
- we can't use the relocating allocator
- even if config.h says that we can. */
-# undef REL_ALLOC
-
-# if defined STDC_HEADERS || defined _LIBC
-# include <stdlib.h>
-# else
-char *malloc ();
-char *realloc ();
-# endif
-
-/* When used in Emacs's lib-src, we need to get bzero and bcopy somehow.
- If nothing else has been done, use the method below. */
-# ifdef INHIBIT_STRING_HEADER
-# if !(defined HAVE_BZERO && defined HAVE_BCOPY)
-# if !defined bzero && !defined bcopy
-# undef INHIBIT_STRING_HEADER
-# endif
-# endif
-# endif
-
-/* This is the normal way of making sure we have a bcopy and a bzero.
- This is used in most programs--a few other programs avoid this
- by defining INHIBIT_STRING_HEADER. */
-# ifndef INHIBIT_STRING_HEADER
-# if defined HAVE_STRING_H || defined STDC_HEADERS || defined _LIBC
-# include <string.h>
-# ifndef bzero
-# ifndef _LIBC
-# define bzero(s, n) (memset (s, '\0', n), (s))
-# else
-# define bzero(s, n) __bzero (s, n)
-# endif
-# endif
-# else
-# include <strings.h>
-# ifndef memcmp
-# define memcmp(s1, s2, n) bcmp (s1, s2, n)
-# endif
-# ifndef memcpy
-# define memcpy(d, s, n) (bcopy (s, d, n), (d))
-# endif
-# endif
-# endif
-
-/* Define the syntax stuff for \<, \>, etc. */
-
-/* This must be nonzero for the wordchar and notwordchar pattern
- commands in re_match_2. */
-# ifndef Sword
-# define Sword 1
-# endif
-
-# ifdef SWITCH_ENUM_BUG
-# define SWITCH_ENUM_CAST(x) ((int)(x))
-# else
-# define SWITCH_ENUM_CAST(x) (x)
-# endif
-
-# endif /* not emacs */
-
-# if defined _LIBC || HAVE_LIMITS_H
-# include <limits.h>
-# endif
-
-# ifndef MB_LEN_MAX
-# define MB_LEN_MAX 1
-# endif
-
-/* Get the interface, including the syntax bits. */
-# include "xregex.h" /* change for libiberty */
-
-/* isalpha etc. are used for the character classes. */
-# include <ctype.h>
-
-/* Jim Meyering writes:
-
- "... Some ctype macros are valid only for character codes that
- isascii says are ASCII (SGI's IRIX-4.0.5 is one such system --when
- using /bin/cc or gcc but without giving an ansi option). So, all
- ctype uses should be through macros like ISPRINT... If
- STDC_HEADERS is defined, then autoconf has verified that the ctype
- macros don't need to be guarded with references to isascii. ...
- Defining isascii to 1 should let any compiler worth its salt
- eliminate the && through constant folding."
- Solaris defines some of these symbols so we must undefine them first. */
-
-# undef ISASCII
-# if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
-# define ISASCII(c) 1
-# else
-# define ISASCII(c) isascii(c)
-# endif
-
-# ifdef isblank
-# define ISBLANK(c) (ISASCII (c) && isblank (c))
-# else
-# define ISBLANK(c) ((c) == ' ' || (c) == '\t')
-# endif
-# ifdef isgraph
-# define ISGRAPH(c) (ISASCII (c) && isgraph (c))
-# else
-# define ISGRAPH(c) (ISASCII (c) && isprint (c) && !isspace (c))
-# endif
-
-# undef ISPRINT
-# define ISPRINT(c) (ISASCII (c) && isprint (c))
-# define ISDIGIT(c) (ISASCII (c) && isdigit (c))
-# define ISALNUM(c) (ISASCII (c) && isalnum (c))
-# define ISALPHA(c) (ISASCII (c) && isalpha (c))
-# define ISCNTRL(c) (ISASCII (c) && iscntrl (c))
-# define ISLOWER(c) (ISASCII (c) && islower (c))
-# define ISPUNCT(c) (ISASCII (c) && ispunct (c))
-# define ISSPACE(c) (ISASCII (c) && isspace (c))
-# define ISUPPER(c) (ISASCII (c) && isupper (c))
-# define ISXDIGIT(c) (ISASCII (c) && isxdigit (c))
-
-# ifdef _tolower
-# define TOLOWER(c) _tolower(c)
-# else
-# define TOLOWER(c) tolower(c)
-# endif
-
-# ifndef NULL
-# define NULL (void *)0
-# endif
-
-/* We remove any previous definition of `SIGN_EXTEND_CHAR',
- since ours (we hope) works properly with all combinations of
- machines, compilers, `char' and `unsigned char' argument types.
- (Per Bothner suggested the basic approach.) */
-# undef SIGN_EXTEND_CHAR
-# if __STDC__
-# define SIGN_EXTEND_CHAR(c) ((signed char) (c))
-# else /* not __STDC__ */
-/* As in Harbison and Steele. */
-# define SIGN_EXTEND_CHAR(c) ((((unsigned char) (c)) ^ 128) - 128)
-# endif
-
-# ifndef emacs
-/* How many characters in the character set. */
-# define CHAR_SET_SIZE 256
-
-# ifdef SYNTAX_TABLE
-
-extern char *re_syntax_table;
-
-# else /* not SYNTAX_TABLE */
-
-static char re_syntax_table[CHAR_SET_SIZE];
-
-static void init_syntax_once (void);
-
-static void
-init_syntax_once (void)
-{
- register int c;
- static int done = 0;
-
- if (done)
- return;
- bzero (re_syntax_table, sizeof re_syntax_table);
-
- for (c = 0; c < CHAR_SET_SIZE; ++c)
- if (ISALNUM (c))
- re_syntax_table[c] = Sword;
-
- re_syntax_table['_'] = Sword;
-
- done = 1;
-}
-
-# endif /* not SYNTAX_TABLE */
-
-# define SYNTAX(c) re_syntax_table[(unsigned char) (c)]
-
-# endif /* emacs */
-
-/* Integer type for pointers. */
-# if !defined _LIBC && !defined HAVE_UINTPTR_T
-typedef unsigned long int uintptr_t;
-# endif
-
-/* Should we use malloc or alloca? If REGEX_MALLOC is not defined, we
- use `alloca' instead of `malloc'. This is because using malloc in
- re_search* or re_match* could cause memory leaks when C-g is used in
- Emacs; also, malloc is slower and causes storage fragmentation. On
- the other hand, malloc is more portable, and easier to debug.
-
- Because we sometimes use alloca, some routines have to be macros,
- not functions -- `alloca'-allocated space disappears at the end of the
- function it is called in. */
-
-# ifdef REGEX_MALLOC
-
-# define REGEX_ALLOCATE malloc
-# define REGEX_REALLOCATE(source, osize, nsize) realloc (source, nsize)
-# define REGEX_FREE free
-
-# else /* not REGEX_MALLOC */
-
-/* Emacs already defines alloca, sometimes. */
-# ifndef alloca
-
-/* Make alloca work the best possible way. */
-# ifdef __GNUC__
-# define alloca __builtin_alloca
-# else /* not __GNUC__ */
-# if HAVE_ALLOCA_H
-# include <alloca.h>
-# endif /* HAVE_ALLOCA_H */
-# endif /* not __GNUC__ */
-
-# endif /* not alloca */
-
-# define REGEX_ALLOCATE alloca
-
-/* Assumes a `char *destination' variable. */
-# define REGEX_REALLOCATE(source, osize, nsize) \
- (destination = (char *) alloca (nsize), \
- memcpy (destination, source, osize))
-
-/* No need to do anything to free, after alloca. */
-# define REGEX_FREE(arg) ((void)0) /* Do nothing! But inhibit gcc warning. */
-
-# endif /* not REGEX_MALLOC */
-
-/* Define how to allocate the failure stack. */
-
-# if defined REL_ALLOC && defined REGEX_MALLOC
-
-# define REGEX_ALLOCATE_STACK(size) \
- r_alloc (&failure_stack_ptr, (size))
-# define REGEX_REALLOCATE_STACK(source, osize, nsize) \
- r_re_alloc (&failure_stack_ptr, (nsize))
-# define REGEX_FREE_STACK(ptr) \
- r_alloc_free (&failure_stack_ptr)
-
-# else /* not using relocating allocator */
-
-# ifdef REGEX_MALLOC
-
-# define REGEX_ALLOCATE_STACK malloc
-# define REGEX_REALLOCATE_STACK(source, osize, nsize) realloc (source, nsize)
-# define REGEX_FREE_STACK free
-
-# else /* not REGEX_MALLOC */
-
-# define REGEX_ALLOCATE_STACK alloca
-
-# define REGEX_REALLOCATE_STACK(source, osize, nsize) \
- REGEX_REALLOCATE (source, osize, nsize)
-/* No need to explicitly free anything. */
-# define REGEX_FREE_STACK(arg)
-
-# endif /* not REGEX_MALLOC */
-# endif /* not using relocating allocator */
-
-
-/* True if `size1' is non-NULL and PTR is pointing anywhere inside
- `string1' or just past its end. This works if PTR is NULL, which is
- a good thing. */
-# define FIRST_STRING_P(ptr) \
- (size1 && string1 <= (ptr) && (ptr) <= string1 + size1)
-
-/* (Re)Allocate N items of type T using malloc, or fail. */
-# define TALLOC(n, t) ((t *) malloc ((n) * sizeof (t)))
-# define RETALLOC(addr, n, t) ((addr) = (t *) realloc (addr, (n) * sizeof (t)))
-# define RETALLOC_IF(addr, n, t) \
- if (addr) RETALLOC((addr), (n), t); else (addr) = TALLOC ((n), t)
-# define REGEX_TALLOC(n, t) ((t *) REGEX_ALLOCATE ((n) * sizeof (t)))
-
-# define BYTEWIDTH 8 /* In bits. */
-
-# define STREQ(s1, s2) ((strcmp (s1, s2) == 0))
-
-# undef MAX
-# undef MIN
-# define MAX(a, b) ((a) > (b) ? (a) : (b))
-# define MIN(a, b) ((a) < (b) ? (a) : (b))
-
-typedef char boolean;
-# define false 0
-# define true 1
-
-static reg_errcode_t byte_regex_compile (const char *pattern, size_t size,
- reg_syntax_t syntax,
- struct re_pattern_buffer *bufp);
-
-static int byte_re_match_2_internal (struct re_pattern_buffer *bufp,
- const char *string1, int size1,
- const char *string2, int size2,
- int pos,
- struct re_registers *regs,
- int stop);
-static int byte_re_search_2 (struct re_pattern_buffer *bufp,
- const char *string1, int size1,
- const char *string2, int size2,
- int startpos, int range,
- struct re_registers *regs, int stop);
-static int byte_re_compile_fastmap (struct re_pattern_buffer *bufp);
-
-#ifdef MBS_SUPPORT
-static reg_errcode_t wcs_regex_compile (const char *pattern, size_t size,
- reg_syntax_t syntax,
- struct re_pattern_buffer *bufp);
-
-
-static int wcs_re_match_2_internal (struct re_pattern_buffer *bufp,
- const char *cstring1, int csize1,
- const char *cstring2, int csize2,
- int pos,
- struct re_registers *regs,
- int stop,
- wchar_t *string1, int size1,
- wchar_t *string2, int size2,
- int *mbs_offset1, int *mbs_offset2);
-static int wcs_re_search_2 (struct re_pattern_buffer *bufp,
- const char *string1, int size1,
- const char *string2, int size2,
- int startpos, int range,
- struct re_registers *regs, int stop);
-static int wcs_re_compile_fastmap (struct re_pattern_buffer *bufp);
-#endif
-
-/* These are the command codes that appear in compiled regular
- expressions. Some opcodes are followed by argument bytes. A
- command code can specify any interpretation whatsoever for its
- arguments. Zero bytes may appear in the compiled regular expression. */
-
-typedef enum
-{
- no_op = 0,
-
- /* Succeed right away--no more backtracking. */
- succeed,
-
- /* Followed by one byte giving n, then by n literal bytes. */
- exactn,
-
-# ifdef MBS_SUPPORT
- /* Same as exactn, but contains binary data. */
- exactn_bin,
-# endif
-
- /* Matches any (more or less) character. */
- anychar,
-
- /* Matches any one char belonging to specified set. First
- following byte is number of bitmap bytes. Then come bytes
- for a bitmap saying which chars are in. Bits in each byte
- are ordered low-bit-first. A character is in the set if its
- bit is 1. A character too large to have a bit in the map is
- automatically not in the set. */
- /* ifdef MBS_SUPPORT, following element is length of character
- classes, length of collating symbols, length of equivalence
- classes, length of character ranges, and length of characters.
- Next, character class element, collating symbols elements,
- equivalence class elements, range elements, and character
- elements follow.
- See regex_compile function. */
- charset,
-
- /* Same parameters as charset, but match any character that is
- not one of those specified. */
- charset_not,
-
- /* Start remembering the text that is matched, for storing in a
- register. Followed by one byte with the register number, in
- the range 0 to one less than the pattern buffer's re_nsub
- field. Then followed by one byte with the number of groups
- inner to this one. (This last has to be part of the
- start_memory only because we need it in the on_failure_jump
- of re_match_2.) */
- start_memory,
-
- /* Stop remembering the text that is matched and store it in a
- memory register. Followed by one byte with the register
- number, in the range 0 to one less than `re_nsub' in the
- pattern buffer, and one byte with the number of inner groups,
- just like `start_memory'. (We need the number of inner
- groups here because we don't have any easy way of finding the
- corresponding start_memory when we're at a stop_memory.) */
- stop_memory,
-
- /* Match a duplicate of something remembered. Followed by one
- byte containing the register number. */
- duplicate,
-
- /* Fail unless at beginning of line. */
- begline,
-
- /* Fail unless at end of line. */
- endline,
-
- /* Succeeds if at beginning of buffer (if emacs) or at beginning
- of string to be matched (if not). */
- begbuf,
-
- /* Analogously, for end of buffer/string. */
- endbuf,
-
- /* Followed by two byte relative address to which to jump. */
- jump,
-
- /* Same as jump, but marks the end of an alternative. */
- jump_past_alt,
-
- /* Followed by two-byte relative address of place to resume at
- in case of failure. */
- /* ifdef MBS_SUPPORT, the size of address is 1. */
- on_failure_jump,
-
- /* Like on_failure_jump, but pushes a placeholder instead of the
- current string position when executed. */
- on_failure_keep_string_jump,
-
- /* Throw away latest failure point and then jump to following
- two-byte relative address. */
- /* ifdef MBS_SUPPORT, the size of address is 1. */
- pop_failure_jump,
-
- /* Change to pop_failure_jump if know won't have to backtrack to
- match; otherwise change to jump. This is used to jump
- back to the beginning of a repeat. If what follows this jump
- clearly won't match what the repeat does, such that we can be
- sure that there is no use backtracking out of repetitions
- already matched, then we change it to a pop_failure_jump.
- Followed by two-byte address. */
- /* ifdef MBS_SUPPORT, the size of address is 1. */
- maybe_pop_jump,
-
- /* Jump to following two-byte address, and push a dummy failure
- point. This failure point will be thrown away if an attempt
- is made to use it for a failure. A `+' construct makes this
- before the first repeat. Also used as an intermediary kind
- of jump when compiling an alternative. */
- /* ifdef MBS_SUPPORT, the size of address is 1. */
- dummy_failure_jump,
-
- /* Push a dummy failure point and continue. Used at the end of
- alternatives. */
- push_dummy_failure,
-
- /* Followed by two-byte relative address and two-byte number n.
- After matching N times, jump to the address upon failure. */
- /* ifdef MBS_SUPPORT, the size of address is 1. */
- succeed_n,
-
- /* Followed by two-byte relative address, and two-byte number n.
- Jump to the address N times, then fail. */
- /* ifdef MBS_SUPPORT, the size of address is 1. */
- jump_n,
-
- /* Set the following two-byte relative address to the
- subsequent two-byte number. The address *includes* the two
- bytes of number. */
- /* ifdef MBS_SUPPORT, the size of address is 1. */
- set_number_at,
-
- wordchar, /* Matches any word-constituent character. */
- notwordchar, /* Matches any char that is not a word-constituent. */
-
- wordbeg, /* Succeeds if at word beginning. */
- wordend, /* Succeeds if at word end. */
-
- wordbound, /* Succeeds if at a word boundary. */
- notwordbound /* Succeeds if not at a word boundary. */
-
-# ifdef emacs
- ,before_dot, /* Succeeds if before point. */
- at_dot, /* Succeeds if at point. */
- after_dot, /* Succeeds if after point. */
-
- /* Matches any character whose syntax is specified. Followed by
- a byte which contains a syntax code, e.g., Sword. */
- syntaxspec,
-
- /* Matches any character whose syntax is not that specified. */
- notsyntaxspec
-# endif /* emacs */
-} re_opcode_t;
-#endif /* not INSIDE_RECURSION */
-
-
-#ifdef BYTE
-# define CHAR_T char
-# define UCHAR_T unsigned char
-# define COMPILED_BUFFER_VAR bufp->buffer
-# define OFFSET_ADDRESS_SIZE 2
-# define PREFIX(name) byte_##name
-# define ARG_PREFIX(name) name
-# define PUT_CHAR(c) putchar (c)
-#else
-# ifdef WCHAR
-# define CHAR_T wchar_t
-# define UCHAR_T wchar_t
-# define COMPILED_BUFFER_VAR wc_buffer
-# define OFFSET_ADDRESS_SIZE 1 /* the size which STORE_NUMBER macro use */
-# define CHAR_CLASS_SIZE ((__alignof__(wctype_t)+sizeof(wctype_t))/sizeof(CHAR_T)+1)
-# define PREFIX(name) wcs_##name
-# define ARG_PREFIX(name) c##name
-/* Should we use wide stream?? */
-# define PUT_CHAR(c) printf ("%C", c);
-# define TRUE 1
-# define FALSE 0
-# else
-# ifdef MBS_SUPPORT
-# define WCHAR
-# define INSIDE_RECURSION
-# include "regex.c"
-# undef INSIDE_RECURSION
-# endif
-# define BYTE
-# define INSIDE_RECURSION
-# include "regex.c"
-# undef INSIDE_RECURSION
-# endif
-#endif
-
-#ifdef INSIDE_RECURSION
-/* Common operations on the compiled pattern. */
-
-/* Store NUMBER in two contiguous bytes starting at DESTINATION. */
-/* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */
-
-# ifdef WCHAR
-# define STORE_NUMBER(destination, number) \
- do { \
- *(destination) = (UCHAR_T)(number); \
- } while (0)
-# else /* BYTE */
-# define STORE_NUMBER(destination, number) \
- do { \
- (destination)[0] = (number) & 0377; \
- (destination)[1] = (number) >> 8; \
- } while (0)
-# endif /* WCHAR */
-
-/* Same as STORE_NUMBER, except increment DESTINATION to
- the byte after where the number is stored. Therefore, DESTINATION
- must be an lvalue. */
-/* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */
-
-# define STORE_NUMBER_AND_INCR(destination, number) \
- do { \
- STORE_NUMBER (destination, number); \
- (destination) += OFFSET_ADDRESS_SIZE; \
- } while (0)
-
-/* Put into DESTINATION a number stored in two contiguous bytes starting
- at SOURCE. */
-/* ifdef MBS_SUPPORT, we store NUMBER in 1 element. */
-
-# ifdef WCHAR
-# define EXTRACT_NUMBER(destination, source) \
- do { \
- (destination) = *(source); \
- } while (0)
-# else /* BYTE */
-# define EXTRACT_NUMBER(destination, source) \
- do { \
- (destination) = *(source) & 0377; \
- (destination) += SIGN_EXTEND_CHAR (*((source) + 1)) << 8; \
- } while (0)
-# endif
-
-# ifdef DEBUG
-static void PREFIX(extract_number) (int *dest, UCHAR_T *source);
-static void
-PREFIX(extract_number) (int *dest, UCHAR_T *source)
-{
-# ifdef WCHAR
- *dest = *source;
-# else /* BYTE */
- int temp = SIGN_EXTEND_CHAR (*(source + 1));
- *dest = *source & 0377;
- *dest += temp << 8;
-# endif
-}
-
-# ifndef EXTRACT_MACROS /* To debug the macros. */
-# undef EXTRACT_NUMBER
-# define EXTRACT_NUMBER(dest, src) PREFIX(extract_number) (&dest, src)
-# endif /* not EXTRACT_MACROS */
-
-# endif /* DEBUG */
-
-/* Same as EXTRACT_NUMBER, except increment SOURCE to after the number.
- SOURCE must be an lvalue. */
-
-# define EXTRACT_NUMBER_AND_INCR(destination, source) \
- do { \
- EXTRACT_NUMBER (destination, source); \
- (source) += OFFSET_ADDRESS_SIZE; \
- } while (0)
-
-# ifdef DEBUG
-static void PREFIX(extract_number_and_incr) (int *destination,
- UCHAR_T **source);
-static void
-PREFIX(extract_number_and_incr) (int *destination, UCHAR_T **source)
-{
- PREFIX(extract_number) (destination, *source);
- *source += OFFSET_ADDRESS_SIZE;
-}
-
-# ifndef EXTRACT_MACROS
-# undef EXTRACT_NUMBER_AND_INCR
-# define EXTRACT_NUMBER_AND_INCR(dest, src) \
- PREFIX(extract_number_and_incr) (&dest, &src)
-# endif /* not EXTRACT_MACROS */
-
-# endif /* DEBUG */
-
-
-
-/* If DEBUG is defined, Regex prints many voluminous messages about what
- it is doing (if the variable `debug' is nonzero). If linked with the
- main program in `iregex.c', you can enter patterns and strings
- interactively. And if linked with the main program in `main.c' and
- the other test files, you can run the already-written tests. */
-
-# ifdef DEBUG
-
-# ifndef DEFINED_ONCE
-
-/* We use standard I/O for debugging. */
-# include <stdio.h>
-
-/* It is useful to test things that ``must'' be true when debugging. */
-# include <assert.h>
-
-static int debug;
-
-# define DEBUG_STATEMENT(e) e
-# define DEBUG_PRINT1(x) if (debug) printf (x)
-# define DEBUG_PRINT2(x1, x2) if (debug) printf (x1, x2)
-# define DEBUG_PRINT3(x1, x2, x3) if (debug) printf (x1, x2, x3)
-# define DEBUG_PRINT4(x1, x2, x3, x4) if (debug) printf (x1, x2, x3, x4)
-# endif /* not DEFINED_ONCE */
-
-# define DEBUG_PRINT_COMPILED_PATTERN(p, s, e) \
- if (debug) PREFIX(print_partial_compiled_pattern) (s, e)
-# define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2) \
- if (debug) PREFIX(print_double_string) (w, s1, sz1, s2, sz2)
-
-
-/* Print the fastmap in human-readable form. */
-
-# ifndef DEFINED_ONCE
-void
-print_fastmap (char *fastmap)
-{
- unsigned was_a_range = 0;
- unsigned i = 0;
-
- while (i < (1 << BYTEWIDTH))
- {
- if (fastmap[i++])
- {
- was_a_range = 0;
- putchar (i - 1);
- while (i < (1 << BYTEWIDTH) && fastmap[i])
- {
- was_a_range = 1;
- i++;
- }
- if (was_a_range)
- {
- printf ("-");
- putchar (i - 1);
- }
- }
- }
- putchar ('\n');
-}
-# endif /* not DEFINED_ONCE */
-
-
-/* Print a compiled pattern string in human-readable form, starting at
- the START pointer into it and ending just before the pointer END. */
-
-void
-PREFIX(print_partial_compiled_pattern) (UCHAR_T *start, UCHAR_T *end)
-{
- int mcnt, mcnt2;
- UCHAR_T *p1;
- UCHAR_T *p = start;
- UCHAR_T *pend = end;
-
- if (start == NULL)
- {
- printf ("(null)\n");
- return;
- }
-
- /* Loop over pattern commands. */
- while (p < pend)
- {
-# ifdef _LIBC
- printf ("%td:\t", p - start);
-# else
- printf ("%ld:\t", (long int) (p - start));
-# endif
-
- switch ((re_opcode_t) *p++)
- {
- case no_op:
- printf ("/no_op");
- break;
-
- case exactn:
- mcnt = *p++;
- printf ("/exactn/%d", mcnt);
- do
- {
- putchar ('/');
- PUT_CHAR (*p++);
- }
- while (--mcnt);
- break;
-
-# ifdef MBS_SUPPORT
- case exactn_bin:
- mcnt = *p++;
- printf ("/exactn_bin/%d", mcnt);
- do
- {
- printf("/%lx", (long int) *p++);
- }
- while (--mcnt);
- break;
-# endif /* MBS_SUPPORT */
-
- case start_memory:
- mcnt = *p++;
- printf ("/start_memory/%d/%ld", mcnt, (long int) *p++);
- break;
-
- case stop_memory:
- mcnt = *p++;
- printf ("/stop_memory/%d/%ld", mcnt, (long int) *p++);
- break;
-
- case duplicate:
- printf ("/duplicate/%ld", (long int) *p++);
- break;
-
- case anychar:
- printf ("/anychar");
- break;
-
- case charset:
- case charset_not:
- {
-# ifdef WCHAR
- int i, length;
- wchar_t *workp = p;
- printf ("/charset [%s",
- (re_opcode_t) *(workp - 1) == charset_not ? "^" : "");
- p += 5;
- length = *workp++; /* the length of char_classes */
- for (i=0 ; i<length ; i++)
- printf("[:%lx:]", (long int) *p++);
- length = *workp++; /* the length of collating_symbol */
- for (i=0 ; i<length ;)
- {
- printf("[.");
- while(*p != 0)
- PUT_CHAR((i++,*p++));
- i++,p++;
- printf(".]");
- }
- length = *workp++; /* the length of equivalence_class */
- for (i=0 ; i<length ;)
- {
- printf("[=");
- while(*p != 0)
- PUT_CHAR((i++,*p++));
- i++,p++;
- printf("=]");
- }
- length = *workp++; /* the length of char_range */
- for (i=0 ; i<length ; i++)
- {
- wchar_t range_start = *p++;
- wchar_t range_end = *p++;
- printf("%C-%C", range_start, range_end);
- }
- length = *workp++; /* the length of char */
- for (i=0 ; i<length ; i++)
- printf("%C", *p++);
- putchar (']');
-# else
- register int c, last = -100;
- register int in_range = 0;
-
- printf ("/charset [%s",
- (re_opcode_t) *(p - 1) == charset_not ? "^" : "");
-
- assert (p + *p < pend);
-
- for (c = 0; c < 256; c++)
- if (c / 8 < *p
- && (p[1 + (c/8)] & (1 << (c % 8))))
- {
- /* Are we starting a range? */
- if (last + 1 == c && ! in_range)
- {
- putchar ('-');
- in_range = 1;
- }
- /* Have we broken a range? */
- else if (last + 1 != c && in_range)
- {
- putchar (last);
- in_range = 0;
- }
-
- if (! in_range)
- putchar (c);
-
- last = c;
- }
-
- if (in_range)
- putchar (last);
-
- putchar (']');
-
- p += 1 + *p;
-# endif /* WCHAR */
- }
- break;
-
- case begline:
- printf ("/begline");
- break;
-
- case endline:
- printf ("/endline");
- break;
-
- case on_failure_jump:
- PREFIX(extract_number_and_incr) (&mcnt, &p);
-# ifdef _LIBC
- printf ("/on_failure_jump to %td", p + mcnt - start);
-# else
- printf ("/on_failure_jump to %ld", (long int) (p + mcnt - start));
-# endif
- break;
-
- case on_failure_keep_string_jump:
- PREFIX(extract_number_and_incr) (&mcnt, &p);
-# ifdef _LIBC
- printf ("/on_failure_keep_string_jump to %td", p + mcnt - start);
-# else
- printf ("/on_failure_keep_string_jump to %ld",
- (long int) (p + mcnt - start));
-# endif
- break;
-
- case dummy_failure_jump:
- PREFIX(extract_number_and_incr) (&mcnt, &p);
-# ifdef _LIBC
- printf ("/dummy_failure_jump to %td", p + mcnt - start);
-# else
- printf ("/dummy_failure_jump to %ld", (long int) (p + mcnt - start));
-# endif
- break;
-
- case push_dummy_failure:
- printf ("/push_dummy_failure");
- break;
-
- case maybe_pop_jump:
- PREFIX(extract_number_and_incr) (&mcnt, &p);
-# ifdef _LIBC
- printf ("/maybe_pop_jump to %td", p + mcnt - start);
-# else
- printf ("/maybe_pop_jump to %ld", (long int) (p + mcnt - start));
-# endif
- break;
-
- case pop_failure_jump:
- PREFIX(extract_number_and_incr) (&mcnt, &p);
-# ifdef _LIBC
- printf ("/pop_failure_jump to %td", p + mcnt - start);
-# else
- printf ("/pop_failure_jump to %ld", (long int) (p + mcnt - start));
-# endif
- break;
-
- case jump_past_alt:
- PREFIX(extract_number_and_incr) (&mcnt, &p);
-# ifdef _LIBC
- printf ("/jump_past_alt to %td", p + mcnt - start);
-# else
- printf ("/jump_past_alt to %ld", (long int) (p + mcnt - start));
-# endif
- break;
-
- case jump:
- PREFIX(extract_number_and_incr) (&mcnt, &p);
-# ifdef _LIBC
- printf ("/jump to %td", p + mcnt - start);
-# else
- printf ("/jump to %ld", (long int) (p + mcnt - start));
-# endif
- break;
-
- case succeed_n:
- PREFIX(extract_number_and_incr) (&mcnt, &p);
- p1 = p + mcnt;
- PREFIX(extract_number_and_incr) (&mcnt2, &p);
-# ifdef _LIBC
- printf ("/succeed_n to %td, %d times", p1 - start, mcnt2);
-# else
- printf ("/succeed_n to %ld, %d times",
- (long int) (p1 - start), mcnt2);
-# endif
- break;
-
- case jump_n:
- PREFIX(extract_number_and_incr) (&mcnt, &p);
- p1 = p + mcnt;
- PREFIX(extract_number_and_incr) (&mcnt2, &p);
- printf ("/jump_n to %d, %d times", p1 - start, mcnt2);
- break;
-
- case set_number_at:
- PREFIX(extract_number_and_incr) (&mcnt, &p);
- p1 = p + mcnt;
- PREFIX(extract_number_and_incr) (&mcnt2, &p);
-# ifdef _LIBC
- printf ("/set_number_at location %td to %d", p1 - start, mcnt2);
-# else
- printf ("/set_number_at location %ld to %d",
- (long int) (p1 - start), mcnt2);
-# endif
- break;
-
- case wordbound:
- printf ("/wordbound");
- break;
-
- case notwordbound:
- printf ("/notwordbound");
- break;
-
- case wordbeg:
- printf ("/wordbeg");
- break;
-
- case wordend:
- printf ("/wordend");
- break;
-
-# ifdef emacs
- case before_dot:
- printf ("/before_dot");
- break;
-
- case at_dot:
- printf ("/at_dot");
- break;
-
- case after_dot:
- printf ("/after_dot");
- break;
-
- case syntaxspec:
- printf ("/syntaxspec");
- mcnt = *p++;
- printf ("/%d", mcnt);
- break;
-
- case notsyntaxspec:
- printf ("/notsyntaxspec");
- mcnt = *p++;
- printf ("/%d", mcnt);
- break;
-# endif /* emacs */
-
- case wordchar:
- printf ("/wordchar");
- break;
-
- case notwordchar:
- printf ("/notwordchar");
- break;
-
- case begbuf:
- printf ("/begbuf");
- break;
-
- case endbuf:
- printf ("/endbuf");
- break;
-
- default:
- printf ("?%ld", (long int) *(p-1));
- }
-
- putchar ('\n');
- }
-
-# ifdef _LIBC
- printf ("%td:\tend of pattern.\n", p - start);
-# else
- printf ("%ld:\tend of pattern.\n", (long int) (p - start));
-# endif
-}
-
-
-void
-PREFIX(print_compiled_pattern) (struct re_pattern_buffer *bufp)
-{
- UCHAR_T *buffer = (UCHAR_T*) bufp->buffer;
-
- PREFIX(print_partial_compiled_pattern) (buffer, buffer
- + bufp->used / sizeof(UCHAR_T));
- printf ("%ld bytes used/%ld bytes allocated.\n",
- bufp->used, bufp->allocated);
-
- if (bufp->fastmap_accurate && bufp->fastmap)
- {
- printf ("fastmap: ");
- print_fastmap (bufp->fastmap);
- }
-
-# ifdef _LIBC
- printf ("re_nsub: %Zd\t", bufp->re_nsub);
-# else
- printf ("re_nsub: %ld\t", (long int) bufp->re_nsub);
-# endif
- printf ("regs_alloc: %d\t", bufp->regs_allocated);
- printf ("can_be_null: %d\t", bufp->can_be_null);
- printf ("newline_anchor: %d\n", bufp->newline_anchor);
- printf ("no_sub: %d\t", bufp->no_sub);
- printf ("not_bol: %d\t", bufp->not_bol);
- printf ("not_eol: %d\t", bufp->not_eol);
- printf ("syntax: %lx\n", bufp->syntax);
- /* Perhaps we should print the translate table? */
-}
-
-
-void
-PREFIX(print_double_string) (const CHAR_T *where, const CHAR_T *string1,
- int size1, const CHAR_T *string2, int size2)
-{
- int this_char;
-
- if (where == NULL)
- printf ("(null)");
- else
- {
- int cnt;
-
- if (FIRST_STRING_P (where))
- {
- for (this_char = where - string1; this_char < size1; this_char++)
- PUT_CHAR (string1[this_char]);
-
- where = string2;
- }
-
- cnt = 0;
- for (this_char = where - string2; this_char < size2; this_char++)
- {
- PUT_CHAR (string2[this_char]);
- if (++cnt > 100)
- {
- fputs ("...", stdout);
- break;
- }
- }
- }
-}
-
-# ifndef DEFINED_ONCE
-void
-printchar (int c)
-{
- putc (c, stderr);
-}
-# endif
-
-# else /* not DEBUG */
-
-# ifndef DEFINED_ONCE
-# undef assert
-# define assert(e)
-
-# define DEBUG_STATEMENT(e)
-# define DEBUG_PRINT1(x)
-# define DEBUG_PRINT2(x1, x2)
-# define DEBUG_PRINT3(x1, x2, x3)
-# define DEBUG_PRINT4(x1, x2, x3, x4)
-# endif /* not DEFINED_ONCE */
-# define DEBUG_PRINT_COMPILED_PATTERN(p, s, e)
-# define DEBUG_PRINT_DOUBLE_STRING(w, s1, sz1, s2, sz2)
-
-# endif /* not DEBUG */
-
-
-
-# ifdef WCHAR
-/* This convert a multibyte string to a wide character string.
- And write their correspondances to offset_buffer(see below)
- and write whether each wchar_t is binary data to is_binary.
- This assume invalid multibyte sequences as binary data.
- We assume offset_buffer and is_binary is already allocated
- enough space. */
-
-static size_t convert_mbs_to_wcs (CHAR_T *dest, const unsigned char* src,
- size_t len, int *offset_buffer,
- char *is_binary);
-static size_t
-convert_mbs_to_wcs (CHAR_T *dest, const unsigned char*src, size_t len,
- int *offset_buffer, char *is_binary)
- /* It hold correspondances between src(char string) and
- dest(wchar_t string) for optimization.
- e.g. src = "xxxyzz"
- dest = {'X', 'Y', 'Z'}
- (each "xxx", "y" and "zz" represent one multibyte character
- corresponding to 'X', 'Y' and 'Z'.)
- offset_buffer = {0, 0+3("xxx"), 0+3+1("y"), 0+3+1+2("zz")}
- = {0, 3, 4, 6}
- */
-{
- wchar_t *pdest = dest;
- const unsigned char *psrc = src;
- size_t wc_count = 0;
-
- mbstate_t mbs;
- int i, consumed;
- size_t mb_remain = len;
- size_t mb_count = 0;
-
- /* Initialize the conversion state. */
- memset (&mbs, 0, sizeof (mbstate_t));
-
- offset_buffer[0] = 0;
- for( ; mb_remain > 0 ; ++wc_count, ++pdest, mb_remain -= consumed,
- psrc += consumed)
- {
-#ifdef _LIBC
- consumed = __mbrtowc (pdest, psrc, mb_remain, &mbs);
-#else
- consumed = mbrtowc (pdest, psrc, mb_remain, &mbs);
-#endif
-
- if (consumed <= 0)
- /* failed to convert. maybe src contains binary data.
- So we consume 1 byte manualy. */
- {
- *pdest = *psrc;
- consumed = 1;
- is_binary[wc_count] = TRUE;
- }
- else
- is_binary[wc_count] = FALSE;
- /* In sjis encoding, we use yen sign as escape character in
- place of reverse solidus. So we convert 0x5c(yen sign in
- sjis) to not 0xa5(yen sign in UCS2) but 0x5c(reverse
- solidus in UCS2). */
- if (consumed == 1 && (int) *psrc == 0x5c && (int) *pdest == 0xa5)
- *pdest = (wchar_t) *psrc;
-
- offset_buffer[wc_count + 1] = mb_count += consumed;
- }
-
- /* Fill remain of the buffer with sentinel. */
- for (i = wc_count + 1 ; i <= len ; i++)
- offset_buffer[i] = mb_count + 1;
-
- return wc_count;
-}
-
-# endif /* WCHAR */
-
-#else /* not INSIDE_RECURSION */
-
-/* Set by `re_set_syntax' to the current regexp syntax to recognize. Can
- also be assigned to arbitrarily: each pattern buffer stores its own
- syntax, so it can be changed between regex compilations. */
-/* This has no initializer because initialized variables in Emacs
- become read-only after dumping. */
-reg_syntax_t re_syntax_options;
-
-
-/* Specify the precise syntax of regexps for compilation. This provides
- for compatibility for various utilities which historically have
- different, incompatible syntaxes.
-
- The argument SYNTAX is a bit mask comprised of the various bits
- defined in regex.h. We return the old syntax. */
-
-reg_syntax_t
-re_set_syntax (reg_syntax_t syntax)
-{
- reg_syntax_t ret = re_syntax_options;
-
- re_syntax_options = syntax;
-# ifdef DEBUG
- if (syntax & RE_DEBUG)
- debug = 1;
- else if (debug) /* was on but now is not */
- debug = 0;
-# endif /* DEBUG */
- return ret;
-}
-# ifdef _LIBC
-weak_alias (__re_set_syntax, re_set_syntax)
-# endif
-
-/* This table gives an error message for each of the error codes listed
- in regex.h. Obviously the order here has to be same as there.
- POSIX doesn't require that we do anything for REG_NOERROR,
- but why not be nice? */
-
-static const char *re_error_msgid[] =
- {
- gettext_noop ("Success"), /* REG_NOERROR */
- gettext_noop ("No match"), /* REG_NOMATCH */
- gettext_noop ("Invalid regular expression"), /* REG_BADPAT */
- gettext_noop ("Invalid collation character"), /* REG_ECOLLATE */
- gettext_noop ("Invalid character class name"), /* REG_ECTYPE */
- gettext_noop ("Trailing backslash"), /* REG_EESCAPE */
- gettext_noop ("Invalid back reference"), /* REG_ESUBREG */
- gettext_noop ("Unmatched [ or [^"), /* REG_EBRACK */
- gettext_noop ("Unmatched ( or \\("), /* REG_EPAREN */
- gettext_noop ("Unmatched \\{"), /* REG_EBRACE */
- gettext_noop ("Invalid content of \\{\\}"), /* REG_BADBR */
- gettext_noop ("Invalid range end"), /* REG_ERANGE */
- gettext_noop ("Memory exhausted"), /* REG_ESPACE */
- gettext_noop ("Invalid preceding regular expression"), /* REG_BADRPT */
- gettext_noop ("Premature end of regular expression"), /* REG_EEND */
- gettext_noop ("Regular expression too big"), /* REG_ESIZE */
- gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */
- };
-
-#endif /* INSIDE_RECURSION */
-
-#ifndef DEFINED_ONCE
-/* Avoiding alloca during matching, to placate r_alloc. */
-
-/* Define MATCH_MAY_ALLOCATE unless we need to make sure that the
- searching and matching functions should not call alloca. On some
- systems, alloca is implemented in terms of malloc, and if we're
- using the relocating allocator routines, then malloc could cause a
- relocation, which might (if the strings being searched are in the
- ralloc heap) shift the data out from underneath the regexp
- routines.
-
- Here's another reason to avoid allocation: Emacs
- processes input from X in a signal handler; processing X input may
- call malloc; if input arrives while a matching routine is calling
- malloc, then we're scrod. But Emacs can't just block input while
- calling matching routines; then we don't notice interrupts when
- they come in. So, Emacs blocks input around all regexp calls
- except the matching calls, which it leaves unprotected, in the
- faith that they will not malloc. */
-
-/* Normally, this is fine. */
-# define MATCH_MAY_ALLOCATE
-
-/* When using GNU C, we are not REALLY using the C alloca, no matter
- what config.h may say. So don't take precautions for it. */
-# ifdef __GNUC__
-# undef C_ALLOCA
-# endif
-
-/* The match routines may not allocate if (1) they would do it with malloc
- and (2) it's not safe for them to use malloc.
- Note that if REL_ALLOC is defined, matching would not use malloc for the
- failure stack, but we would still use it for the register vectors;
- so REL_ALLOC should not affect this. */
-# if (defined C_ALLOCA || defined REGEX_MALLOC) && defined emacs
-# undef MATCH_MAY_ALLOCATE
-# endif
-#endif /* not DEFINED_ONCE */
-
-#ifdef INSIDE_RECURSION
-/* Failure stack declarations and macros; both re_compile_fastmap and
- re_match_2 use a failure stack. These have to be macros because of
- REGEX_ALLOCATE_STACK. */
-
-
-/* Number of failure points for which to initially allocate space
- when matching. If this number is exceeded, we allocate more
- space, so it is not a hard limit. */
-# ifndef INIT_FAILURE_ALLOC
-# define INIT_FAILURE_ALLOC 5
-# endif
-
-/* Roughly the maximum number of failure points on the stack. Would be
- exactly that if always used MAX_FAILURE_ITEMS items each time we failed.
- This is a variable only so users of regex can assign to it; we never
- change it ourselves. */
-
-# ifdef INT_IS_16BIT
-
-# ifndef DEFINED_ONCE
-# if defined MATCH_MAY_ALLOCATE
-/* 4400 was enough to cause a crash on Alpha OSF/1,
- whose default stack limit is 2mb. */
-long int re_max_failures = 4000;
-# else
-long int re_max_failures = 2000;
-# endif
-# endif
-
-union PREFIX(fail_stack_elt)
-{
- UCHAR_T *pointer;
- long int integer;
-};
-
-typedef union PREFIX(fail_stack_elt) PREFIX(fail_stack_elt_t);
-
-typedef struct
-{
- PREFIX(fail_stack_elt_t) *stack;
- unsigned long int size;
- unsigned long int avail; /* Offset of next open position. */
-} PREFIX(fail_stack_type);
-
-# else /* not INT_IS_16BIT */
-
-# ifndef DEFINED_ONCE
-# if defined MATCH_MAY_ALLOCATE
-/* 4400 was enough to cause a crash on Alpha OSF/1,
- whose default stack limit is 2mb. */
-int re_max_failures = 4000;
-# else
-int re_max_failures = 2000;
-# endif
-# endif
-
-union PREFIX(fail_stack_elt)
-{
- UCHAR_T *pointer;
- int integer;
-};
-
-typedef union PREFIX(fail_stack_elt) PREFIX(fail_stack_elt_t);
-
-typedef struct
-{
- PREFIX(fail_stack_elt_t) *stack;
- unsigned size;
- unsigned avail; /* Offset of next open position. */
-} PREFIX(fail_stack_type);
-
-# endif /* INT_IS_16BIT */
-
-# ifndef DEFINED_ONCE
-# define FAIL_STACK_EMPTY() (fail_stack.avail == 0)
-# define FAIL_STACK_PTR_EMPTY() (fail_stack_ptr->avail == 0)
-# define FAIL_STACK_FULL() (fail_stack.avail == fail_stack.size)
-# endif
-
-
-/* Define macros to initialize and free the failure stack.
- Do `return -2' if the alloc fails. */
-
-# ifdef MATCH_MAY_ALLOCATE
-# define INIT_FAIL_STACK() \
- do { \
- fail_stack.stack = (PREFIX(fail_stack_elt_t) *) \
- REGEX_ALLOCATE_STACK (INIT_FAILURE_ALLOC * sizeof (PREFIX(fail_stack_elt_t))); \
- \
- if (fail_stack.stack == NULL) \
- return -2; \
- \
- fail_stack.size = INIT_FAILURE_ALLOC; \
- fail_stack.avail = 0; \
- } while (0)
-
-# define RESET_FAIL_STACK() REGEX_FREE_STACK (fail_stack.stack)
-# else
-# define INIT_FAIL_STACK() \
- do { \
- fail_stack.avail = 0; \
- } while (0)
-
-# define RESET_FAIL_STACK()
-# endif
-
-
-/* Double the size of FAIL_STACK, up to approximately `re_max_failures' items.
-
- Return 1 if succeeds, and 0 if either ran out of memory
- allocating space for it or it was already too large.
-
- REGEX_REALLOCATE_STACK requires `destination' be declared. */
-
-# define DOUBLE_FAIL_STACK(fail_stack) \
- ((fail_stack).size > (unsigned) (re_max_failures * MAX_FAILURE_ITEMS) \
- ? 0 \
- : ((fail_stack).stack = (PREFIX(fail_stack_elt_t) *) \
- REGEX_REALLOCATE_STACK ((fail_stack).stack, \
- (fail_stack).size * sizeof (PREFIX(fail_stack_elt_t)), \
- ((fail_stack).size << 1) * sizeof (PREFIX(fail_stack_elt_t))),\
- \
- (fail_stack).stack == NULL \
- ? 0 \
- : ((fail_stack).size <<= 1, \
- 1)))
-
-
-/* Push pointer POINTER on FAIL_STACK.
- Return 1 if was able to do so and 0 if ran out of memory allocating
- space to do so. */
-# define PUSH_PATTERN_OP(POINTER, FAIL_STACK) \
- ((FAIL_STACK_FULL () \
- && !DOUBLE_FAIL_STACK (FAIL_STACK)) \
- ? 0 \
- : ((FAIL_STACK).stack[(FAIL_STACK).avail++].pointer = POINTER, \
- 1))
-
-/* Push a pointer value onto the failure stack.
- Assumes the variable `fail_stack'. Probably should only
- be called from within `PUSH_FAILURE_POINT'. */
-# define PUSH_FAILURE_POINTER(item) \
- fail_stack.stack[fail_stack.avail++].pointer = (UCHAR_T *) (item)
-
-/* This pushes an integer-valued item onto the failure stack.
- Assumes the variable `fail_stack'. Probably should only
- be called from within `PUSH_FAILURE_POINT'. */
-# define PUSH_FAILURE_INT(item) \
- fail_stack.stack[fail_stack.avail++].integer = (item)
-
-/* Push a fail_stack_elt_t value onto the failure stack.
- Assumes the variable `fail_stack'. Probably should only
- be called from within `PUSH_FAILURE_POINT'. */
-# define PUSH_FAILURE_ELT(item) \
- fail_stack.stack[fail_stack.avail++] = (item)
-
-/* These three POP... operations complement the three PUSH... operations.
- All assume that `fail_stack' is nonempty. */
-# define POP_FAILURE_POINTER() fail_stack.stack[--fail_stack.avail].pointer
-# define POP_FAILURE_INT() fail_stack.stack[--fail_stack.avail].integer
-# define POP_FAILURE_ELT() fail_stack.stack[--fail_stack.avail]
-
-/* Used to omit pushing failure point id's when we're not debugging. */
-# ifdef DEBUG
-# define DEBUG_PUSH PUSH_FAILURE_INT
-# define DEBUG_POP(item_addr) *(item_addr) = POP_FAILURE_INT ()
-# else
-# define DEBUG_PUSH(item)
-# define DEBUG_POP(item_addr)
-# endif
-
-
-/* Push the information about the state we will need
- if we ever fail back to it.
-
- Requires variables fail_stack, regstart, regend, reg_info, and
- num_regs_pushed be declared. DOUBLE_FAIL_STACK requires `destination'
- be declared.
-
- Does `return FAILURE_CODE' if runs out of memory. */
-
-# define PUSH_FAILURE_POINT(pattern_place, string_place, failure_code) \
- do { \
- char *destination; \
- /* Must be int, so when we don't save any registers, the arithmetic \
- of 0 + -1 isn't done as unsigned. */ \
- /* Can't be int, since there is not a shred of a guarantee that int \
- is wide enough to hold a value of something to which pointer can \
- be assigned */ \
- active_reg_t this_reg; \
- \
- DEBUG_STATEMENT (failure_id++); \
- DEBUG_STATEMENT (nfailure_points_pushed++); \
- DEBUG_PRINT2 ("\nPUSH_FAILURE_POINT #%u:\n", failure_id); \
- DEBUG_PRINT2 (" Before push, next avail: %d\n", (fail_stack).avail);\
- DEBUG_PRINT2 (" size: %d\n", (fail_stack).size);\
- \
- DEBUG_PRINT2 (" slots needed: %ld\n", NUM_FAILURE_ITEMS); \
- DEBUG_PRINT2 (" available: %d\n", REMAINING_AVAIL_SLOTS); \
- \
- /* Ensure we have enough space allocated for what we will push. */ \
- while (REMAINING_AVAIL_SLOTS < NUM_FAILURE_ITEMS) \
- { \
- if (!DOUBLE_FAIL_STACK (fail_stack)) \
- return failure_code; \
- \
- DEBUG_PRINT2 ("\n Doubled stack; size now: %d\n", \
- (fail_stack).size); \
- DEBUG_PRINT2 (" slots available: %d\n", REMAINING_AVAIL_SLOTS);\
- } \
- \
- /* Push the info, starting with the registers. */ \
- DEBUG_PRINT1 ("\n"); \
- \
- if (1) \
- for (this_reg = lowest_active_reg; this_reg <= highest_active_reg; \
- this_reg++) \
- { \
- DEBUG_PRINT2 (" Pushing reg: %lu\n", this_reg); \
- DEBUG_STATEMENT (num_regs_pushed++); \
- \
- DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \
- PUSH_FAILURE_POINTER (regstart[this_reg]); \
- \
- DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \
- PUSH_FAILURE_POINTER (regend[this_reg]); \
- \
- DEBUG_PRINT2 (" info: %p\n ", \
- reg_info[this_reg].word.pointer); \
- DEBUG_PRINT2 (" match_null=%d", \
- REG_MATCH_NULL_STRING_P (reg_info[this_reg])); \
- DEBUG_PRINT2 (" active=%d", IS_ACTIVE (reg_info[this_reg])); \
- DEBUG_PRINT2 (" matched_something=%d", \
- MATCHED_SOMETHING (reg_info[this_reg])); \
- DEBUG_PRINT2 (" ever_matched=%d", \
- EVER_MATCHED_SOMETHING (reg_info[this_reg])); \
- DEBUG_PRINT1 ("\n"); \
- PUSH_FAILURE_ELT (reg_info[this_reg].word); \
- } \
- \
- DEBUG_PRINT2 (" Pushing low active reg: %ld\n", lowest_active_reg);\
- PUSH_FAILURE_INT (lowest_active_reg); \
- \
- DEBUG_PRINT2 (" Pushing high active reg: %ld\n", highest_active_reg);\
- PUSH_FAILURE_INT (highest_active_reg); \
- \
- DEBUG_PRINT2 (" Pushing pattern %p:\n", pattern_place); \
- DEBUG_PRINT_COMPILED_PATTERN (bufp, pattern_place, pend); \
- PUSH_FAILURE_POINTER (pattern_place); \
- \
- DEBUG_PRINT2 (" Pushing string %p: `", string_place); \
- DEBUG_PRINT_DOUBLE_STRING (string_place, string1, size1, string2, \
- size2); \
- DEBUG_PRINT1 ("'\n"); \
- PUSH_FAILURE_POINTER (string_place); \
- \
- DEBUG_PRINT2 (" Pushing failure id: %u\n", failure_id); \
- DEBUG_PUSH (failure_id); \
- } while (0)
-
-# ifndef DEFINED_ONCE
-/* This is the number of items that are pushed and popped on the stack
- for each register. */
-# define NUM_REG_ITEMS 3
-
-/* Individual items aside from the registers. */
-# ifdef DEBUG
-# define NUM_NONREG_ITEMS 5 /* Includes failure point id. */
-# else
-# define NUM_NONREG_ITEMS 4
-# endif
-
-/* We push at most this many items on the stack. */
-/* We used to use (num_regs - 1), which is the number of registers
- this regexp will save; but that was changed to 5
- to avoid stack overflow for a regexp with lots of parens. */
-# define MAX_FAILURE_ITEMS (5 * NUM_REG_ITEMS + NUM_NONREG_ITEMS)
-
-/* We actually push this many items. */
-# define NUM_FAILURE_ITEMS \
- (((0 \
- ? 0 : highest_active_reg - lowest_active_reg + 1) \
- * NUM_REG_ITEMS) \
- + NUM_NONREG_ITEMS)
-
-/* How many items can still be added to the stack without overflowing it. */
-# define REMAINING_AVAIL_SLOTS ((fail_stack).size - (fail_stack).avail)
-# endif /* not DEFINED_ONCE */
-
-
-/* Pops what PUSH_FAIL_STACK pushes.
-
- We restore into the parameters, all of which should be lvalues:
- STR -- the saved data position.
- PAT -- the saved pattern position.
- LOW_REG, HIGH_REG -- the highest and lowest active registers.
- REGSTART, REGEND -- arrays of string positions.
- REG_INFO -- array of information about each subexpression.
-
- Also assumes the variables `fail_stack' and (if debugging), `bufp',
- `pend', `string1', `size1', `string2', and `size2'. */
-# define POP_FAILURE_POINT(str, pat, low_reg, high_reg, regstart, regend, reg_info)\
-{ \
- DEBUG_STATEMENT (unsigned failure_id;) \
- active_reg_t this_reg; \
- const UCHAR_T *string_temp; \
- \
- assert (!FAIL_STACK_EMPTY ()); \
- \
- /* Remove failure points and point to how many regs pushed. */ \
- DEBUG_PRINT1 ("POP_FAILURE_POINT:\n"); \
- DEBUG_PRINT2 (" Before pop, next avail: %d\n", fail_stack.avail); \
- DEBUG_PRINT2 (" size: %d\n", fail_stack.size); \
- \
- assert (fail_stack.avail >= NUM_NONREG_ITEMS); \
- \
- DEBUG_POP (&failure_id); \
- DEBUG_PRINT2 (" Popping failure id: %u\n", failure_id); \
- \
- /* If the saved string location is NULL, it came from an \
- on_failure_keep_string_jump opcode, and we want to throw away the \
- saved NULL, thus retaining our current position in the string. */ \
- string_temp = POP_FAILURE_POINTER (); \
- if (string_temp != NULL) \
- str = (const CHAR_T *) string_temp; \
- \
- DEBUG_PRINT2 (" Popping string %p: `", str); \
- DEBUG_PRINT_DOUBLE_STRING (str, string1, size1, string2, size2); \
- DEBUG_PRINT1 ("'\n"); \
- \
- pat = (UCHAR_T *) POP_FAILURE_POINTER (); \
- DEBUG_PRINT2 (" Popping pattern %p:\n", pat); \
- DEBUG_PRINT_COMPILED_PATTERN (bufp, pat, pend); \
- \
- /* Restore register info. */ \
- high_reg = (active_reg_t) POP_FAILURE_INT (); \
- DEBUG_PRINT2 (" Popping high active reg: %ld\n", high_reg); \
- \
- low_reg = (active_reg_t) POP_FAILURE_INT (); \
- DEBUG_PRINT2 (" Popping low active reg: %ld\n", low_reg); \
- \
- if (1) \
- for (this_reg = high_reg; this_reg >= low_reg; this_reg--) \
- { \
- DEBUG_PRINT2 (" Popping reg: %ld\n", this_reg); \
- \
- reg_info[this_reg].word = POP_FAILURE_ELT (); \
- DEBUG_PRINT2 (" info: %p\n", \
- reg_info[this_reg].word.pointer); \
- \
- regend[this_reg] = (const CHAR_T *) POP_FAILURE_POINTER (); \
- DEBUG_PRINT2 (" end: %p\n", regend[this_reg]); \
- \
- regstart[this_reg] = (const CHAR_T *) POP_FAILURE_POINTER (); \
- DEBUG_PRINT2 (" start: %p\n", regstart[this_reg]); \
- } \
- else \
- { \
- for (this_reg = highest_active_reg; this_reg > high_reg; this_reg--) \
- { \
- reg_info[this_reg].word.integer = 0; \
- regend[this_reg] = 0; \
- regstart[this_reg] = 0; \
- } \
- highest_active_reg = high_reg; \
- } \
- \
- set_regs_matched_done = 0; \
- DEBUG_STATEMENT (nfailure_points_popped++); \
-} /* POP_FAILURE_POINT */
-
-/* Structure for per-register (a.k.a. per-group) information.
- Other register information, such as the
- starting and ending positions (which are addresses), and the list of
- inner groups (which is a bits list) are maintained in separate
- variables.
-
- We are making a (strictly speaking) nonportable assumption here: that
- the compiler will pack our bit fields into something that fits into
- the type of `word', i.e., is something that fits into one item on the
- failure stack. */
-
-
-/* Declarations and macros for re_match_2. */
-
-typedef union
-{
- PREFIX(fail_stack_elt_t) word;
- struct
- {
- /* This field is one if this group can match the empty string,
- zero if not. If not yet determined, `MATCH_NULL_UNSET_VALUE'. */
-# define MATCH_NULL_UNSET_VALUE 3
- unsigned match_null_string_p : 2;
- unsigned is_active : 1;
- unsigned matched_something : 1;
- unsigned ever_matched_something : 1;
- } bits;
-} PREFIX(register_info_type);
-
-# ifndef DEFINED_ONCE
-# define REG_MATCH_NULL_STRING_P(R) ((R).bits.match_null_string_p)
-# define IS_ACTIVE(R) ((R).bits.is_active)
-# define MATCHED_SOMETHING(R) ((R).bits.matched_something)
-# define EVER_MATCHED_SOMETHING(R) ((R).bits.ever_matched_something)
-
-
-/* Call this when have matched a real character; it sets `matched' flags
- for the subexpressions which we are currently inside. Also records
- that those subexprs have matched. */
-# define SET_REGS_MATCHED() \
- do \
- { \
- if (!set_regs_matched_done) \
- { \
- active_reg_t r; \
- set_regs_matched_done = 1; \
- for (r = lowest_active_reg; r <= highest_active_reg; r++) \
- { \
- MATCHED_SOMETHING (reg_info[r]) \
- = EVER_MATCHED_SOMETHING (reg_info[r]) \
- = 1; \
- } \
- } \
- } \
- while (0)
-# endif /* not DEFINED_ONCE */
-
-/* Registers are set to a sentinel when they haven't yet matched. */
-static CHAR_T PREFIX(reg_unset_dummy);
-# define REG_UNSET_VALUE (&PREFIX(reg_unset_dummy))
-# define REG_UNSET(e) ((e) == REG_UNSET_VALUE)
-
-/* Subroutine declarations and macros for regex_compile. */
-static void PREFIX(store_op1) (re_opcode_t op, UCHAR_T *loc, int arg);
-static void PREFIX(store_op2) (re_opcode_t op, UCHAR_T *loc,
- int arg1, int arg2);
-static void PREFIX(insert_op1) (re_opcode_t op, UCHAR_T *loc,
- int arg, UCHAR_T *end);
-static void PREFIX(insert_op2) (re_opcode_t op, UCHAR_T *loc,
- int arg1, int arg2, UCHAR_T *end);
-static boolean PREFIX(at_begline_loc_p) (const CHAR_T *pattern,
- const CHAR_T *p,
- reg_syntax_t syntax);
-static boolean PREFIX(at_endline_loc_p) (const CHAR_T *p,
- const CHAR_T *pend,
- reg_syntax_t syntax);
-# ifdef WCHAR
-static reg_errcode_t wcs_compile_range (CHAR_T range_start,
- const CHAR_T **p_ptr,
- const CHAR_T *pend,
- char *translate,
- reg_syntax_t syntax,
- UCHAR_T *b,
- CHAR_T *char_set);
-static void insert_space (int num, CHAR_T *loc, CHAR_T *end);
-# else /* BYTE */
-static reg_errcode_t byte_compile_range (unsigned int range_start,
- const char **p_ptr,
- const char *pend,
- char *translate,
- reg_syntax_t syntax,
- unsigned char *b);
-# endif /* WCHAR */
-
-/* Fetch the next character in the uncompiled pattern---translating it
- if necessary. Also cast from a signed character in the constant
- string passed to us by the user to an unsigned char that we can use
- as an array index (in, e.g., `translate'). */
-/* ifdef MBS_SUPPORT, we translate only if character <= 0xff,
- because it is impossible to allocate 4GB array for some encodings
- which have 4 byte character_set like UCS4. */
-# ifndef PATFETCH
-# ifdef WCHAR
-# define PATFETCH(c) \
- do {if (p == pend) return REG_EEND; \
- c = (UCHAR_T) *p++; \
- if (translate && (c <= 0xff)) c = (UCHAR_T) translate[c]; \
- } while (0)
-# else /* BYTE */
-# define PATFETCH(c) \
- do {if (p == pend) return REG_EEND; \
- c = (unsigned char) *p++; \
- if (translate) c = (unsigned char) translate[c]; \
- } while (0)
-# endif /* WCHAR */
-# endif
-
-/* Fetch the next character in the uncompiled pattern, with no
- translation. */
-# define PATFETCH_RAW(c) \
- do {if (p == pend) return REG_EEND; \
- c = (UCHAR_T) *p++; \
- } while (0)
-
-/* Go backwards one character in the pattern. */
-# define PATUNFETCH p--
-
-
-/* If `translate' is non-null, return translate[D], else just D. We
- cast the subscript to translate because some data is declared as
- `char *', to avoid warnings when a string constant is passed. But
- when we use a character as a subscript we must make it unsigned. */
-/* ifdef MBS_SUPPORT, we translate only if character <= 0xff,
- because it is impossible to allocate 4GB array for some encodings
- which have 4 byte character_set like UCS4. */
-
-# ifndef TRANSLATE
-# ifdef WCHAR
-# define TRANSLATE(d) \
- ((translate && ((UCHAR_T) (d)) <= 0xff) \
- ? (char) translate[(unsigned char) (d)] : (d))
-# else /* BYTE */
-# define TRANSLATE(d) \
- (translate ? (char) translate[(unsigned char) (d)] : (char) (d))
-# endif /* WCHAR */
-# endif
-
-
-/* Macros for outputting the compiled pattern into `buffer'. */
-
-/* If the buffer isn't allocated when it comes in, use this. */
-# define INIT_BUF_SIZE (32 * sizeof(UCHAR_T))
-
-/* Make sure we have at least N more bytes of space in buffer. */
-# ifdef WCHAR
-# define GET_BUFFER_SPACE(n) \
- while (((unsigned long)b - (unsigned long)COMPILED_BUFFER_VAR \
- + (n)*sizeof(CHAR_T)) > bufp->allocated) \
- EXTEND_BUFFER ()
-# else /* BYTE */
-# define GET_BUFFER_SPACE(n) \
- while ((unsigned long) (b - bufp->buffer + (n)) > bufp->allocated) \
- EXTEND_BUFFER ()
-# endif /* WCHAR */
-
-/* Make sure we have one more byte of buffer space and then add C to it. */
-# define BUF_PUSH(c) \
- do { \
- GET_BUFFER_SPACE (1); \
- *b++ = (UCHAR_T) (c); \
- } while (0)
-
-
-/* Ensure we have two more bytes of buffer space and then append C1 and C2. */
-# define BUF_PUSH_2(c1, c2) \
- do { \
- GET_BUFFER_SPACE (2); \
- *b++ = (UCHAR_T) (c1); \
- *b++ = (UCHAR_T) (c2); \
- } while (0)
-
-
-/* As with BUF_PUSH_2, except for three bytes. */
-# define BUF_PUSH_3(c1, c2, c3) \
- do { \
- GET_BUFFER_SPACE (3); \
- *b++ = (UCHAR_T) (c1); \
- *b++ = (UCHAR_T) (c2); \
- *b++ = (UCHAR_T) (c3); \
- } while (0)
-
-/* Store a jump with opcode OP at LOC to location TO. We store a
- relative address offset by the three bytes the jump itself occupies. */
-# define STORE_JUMP(op, loc, to) \
- PREFIX(store_op1) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)))
-
-/* Likewise, for a two-argument jump. */
-# define STORE_JUMP2(op, loc, to, arg) \
- PREFIX(store_op2) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)), arg)
-
-/* Like `STORE_JUMP', but for inserting. Assume `b' is the buffer end. */
-# define INSERT_JUMP(op, loc, to) \
- PREFIX(insert_op1) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)), b)
-
-/* Like `STORE_JUMP2', but for inserting. Assume `b' is the buffer end. */
-# define INSERT_JUMP2(op, loc, to, arg) \
- PREFIX(insert_op2) (op, loc, (int) ((to) - (loc) - (1 + OFFSET_ADDRESS_SIZE)),\
- arg, b)
-
-/* This is not an arbitrary limit: the arguments which represent offsets
- into the pattern are two bytes long. So if 2^16 bytes turns out to
- be too small, many things would have to change. */
-/* Any other compiler which, like MSC, has allocation limit below 2^16
- bytes will have to use approach similar to what was done below for
- MSC and drop MAX_BUF_SIZE a bit. Otherwise you may end up
- reallocating to 0 bytes. Such thing is not going to work too well.
- You have been warned!! */
-# ifndef DEFINED_ONCE
-# if defined _MSC_VER && !defined WIN32
-/* Microsoft C 16-bit versions limit malloc to approx 65512 bytes.
- The REALLOC define eliminates a flurry of conversion warnings,
- but is not required. */
-# define MAX_BUF_SIZE 65500L
-# define REALLOC(p,s) realloc ((p), (size_t) (s))
-# else
-# define MAX_BUF_SIZE (1L << 16)
-# define REALLOC(p,s) realloc ((p), (s))
-# endif
-
-/* Extend the buffer by twice its current size via realloc and
- reset the pointers that pointed into the old block to point to the
- correct places in the new one. If extending the buffer results in it
- being larger than MAX_BUF_SIZE, then flag memory exhausted. */
-# if __BOUNDED_POINTERS__
-# define SET_HIGH_BOUND(P) (__ptrhigh (P) = __ptrlow (P) + bufp->allocated)
-# define MOVE_BUFFER_POINTER(P) \
- (__ptrlow (P) += incr, SET_HIGH_BOUND (P), __ptrvalue (P) += incr)
-# define ELSE_EXTEND_BUFFER_HIGH_BOUND \
- else \
- { \
- SET_HIGH_BOUND (b); \
- SET_HIGH_BOUND (begalt); \
- if (fixup_alt_jump) \
- SET_HIGH_BOUND (fixup_alt_jump); \
- if (laststart) \
- SET_HIGH_BOUND (laststart); \
- if (pending_exact) \
- SET_HIGH_BOUND (pending_exact); \
- }
-# else
-# define MOVE_BUFFER_POINTER(P) (P) += incr
-# define ELSE_EXTEND_BUFFER_HIGH_BOUND
-# endif
-# endif /* not DEFINED_ONCE */
-
-# ifdef WCHAR
-# define EXTEND_BUFFER() \
- do { \
- UCHAR_T *old_buffer = COMPILED_BUFFER_VAR; \
- int wchar_count; \
- if (bufp->allocated + sizeof(UCHAR_T) > MAX_BUF_SIZE) \
- return REG_ESIZE; \
- bufp->allocated <<= 1; \
- if (bufp->allocated > MAX_BUF_SIZE) \
- bufp->allocated = MAX_BUF_SIZE; \
- /* How many characters the new buffer can have? */ \
- wchar_count = bufp->allocated / sizeof(UCHAR_T); \
- if (wchar_count == 0) wchar_count = 1; \
- /* Truncate the buffer to CHAR_T align. */ \
- bufp->allocated = wchar_count * sizeof(UCHAR_T); \
- RETALLOC (COMPILED_BUFFER_VAR, wchar_count, UCHAR_T); \
- bufp->buffer = (char*)COMPILED_BUFFER_VAR; \
- if (COMPILED_BUFFER_VAR == NULL) \
- return REG_ESPACE; \
- /* If the buffer moved, move all the pointers into it. */ \
- if (old_buffer != COMPILED_BUFFER_VAR) \
- { \
- int incr = COMPILED_BUFFER_VAR - old_buffer; \
- MOVE_BUFFER_POINTER (b); \
- MOVE_BUFFER_POINTER (begalt); \
- if (fixup_alt_jump) \
- MOVE_BUFFER_POINTER (fixup_alt_jump); \
- if (laststart) \
- MOVE_BUFFER_POINTER (laststart); \
- if (pending_exact) \
- MOVE_BUFFER_POINTER (pending_exact); \
- } \
- ELSE_EXTEND_BUFFER_HIGH_BOUND \
- } while (0)
-# else /* BYTE */
-# define EXTEND_BUFFER() \
- do { \
- UCHAR_T *old_buffer = COMPILED_BUFFER_VAR; \
- if (bufp->allocated == MAX_BUF_SIZE) \
- return REG_ESIZE; \
- bufp->allocated <<= 1; \
- if (bufp->allocated > MAX_BUF_SIZE) \
- bufp->allocated = MAX_BUF_SIZE; \
- bufp->buffer = (UCHAR_T *) REALLOC (COMPILED_BUFFER_VAR, \
- bufp->allocated); \
- if (COMPILED_BUFFER_VAR == NULL) \
- return REG_ESPACE; \
- /* If the buffer moved, move all the pointers into it. */ \
- if (old_buffer != COMPILED_BUFFER_VAR) \
- { \
- int incr = COMPILED_BUFFER_VAR - old_buffer; \
- MOVE_BUFFER_POINTER (b); \
- MOVE_BUFFER_POINTER (begalt); \
- if (fixup_alt_jump) \
- MOVE_BUFFER_POINTER (fixup_alt_jump); \
- if (laststart) \
- MOVE_BUFFER_POINTER (laststart); \
- if (pending_exact) \
- MOVE_BUFFER_POINTER (pending_exact); \
- } \
- ELSE_EXTEND_BUFFER_HIGH_BOUND \
- } while (0)
-# endif /* WCHAR */
-
-# ifndef DEFINED_ONCE
-/* Since we have one byte reserved for the register number argument to
- {start,stop}_memory, the maximum number of groups we can report
- things about is what fits in that byte. */
-# define MAX_REGNUM 255
-
-/* But patterns can have more than `MAX_REGNUM' registers. We just
- ignore the excess. */
-typedef unsigned regnum_t;
-
-
-/* Macros for the compile stack. */
-
-/* Since offsets can go either forwards or backwards, this type needs to
- be able to hold values from -(MAX_BUF_SIZE - 1) to MAX_BUF_SIZE - 1. */
-/* int may be not enough when sizeof(int) == 2. */
-typedef long pattern_offset_t;
-
-typedef struct
-{
- pattern_offset_t begalt_offset;
- pattern_offset_t fixup_alt_jump;
- pattern_offset_t inner_group_offset;
- pattern_offset_t laststart_offset;
- regnum_t regnum;
-} compile_stack_elt_t;
-
-
-typedef struct
-{
- compile_stack_elt_t *stack;
- unsigned size;
- unsigned avail; /* Offset of next open position. */
-} compile_stack_type;
-
-
-# define INIT_COMPILE_STACK_SIZE 32
-
-# define COMPILE_STACK_EMPTY (compile_stack.avail == 0)
-# define COMPILE_STACK_FULL (compile_stack.avail == compile_stack.size)
-
-/* The next available element. */
-# define COMPILE_STACK_TOP (compile_stack.stack[compile_stack.avail])
-
-# endif /* not DEFINED_ONCE */
-
-/* Set the bit for character C in a list. */
-# ifndef DEFINED_ONCE
-# define SET_LIST_BIT(c) \
- (b[((unsigned char) (c)) / BYTEWIDTH] \
- |= 1 << (((unsigned char) c) % BYTEWIDTH))
-# endif /* DEFINED_ONCE */
-
-/* Get the next unsigned number in the uncompiled pattern. */
-# define GET_UNSIGNED_NUMBER(num) \
- { \
- while (p != pend) \
- { \
- PATFETCH (c); \
- if (c < '0' || c > '9') \
- break; \
- if (num <= RE_DUP_MAX) \
- { \
- if (num < 0) \
- num = 0; \
- num = num * 10 + c - '0'; \
- } \
- } \
- }
-
-# ifndef DEFINED_ONCE
-# if defined _LIBC || WIDE_CHAR_SUPPORT
-/* The GNU C library provides support for user-defined character classes
- and the functions from ISO C amendement 1. */
-# ifdef CHARCLASS_NAME_MAX
-# define CHAR_CLASS_MAX_LENGTH CHARCLASS_NAME_MAX
-# else
-/* This shouldn't happen but some implementation might still have this
- problem. Use a reasonable default value. */
-# define CHAR_CLASS_MAX_LENGTH 256
-# endif
-
-# ifdef _LIBC
-# define IS_CHAR_CLASS(string) __wctype (string)
-# else
-# define IS_CHAR_CLASS(string) wctype (string)
-# endif
-# else
-# define CHAR_CLASS_MAX_LENGTH 6 /* Namely, `xdigit'. */
-
-# define IS_CHAR_CLASS(string) \
- (STREQ (string, "alpha") || STREQ (string, "upper") \
- || STREQ (string, "lower") || STREQ (string, "digit") \
- || STREQ (string, "alnum") || STREQ (string, "xdigit") \
- || STREQ (string, "space") || STREQ (string, "print") \
- || STREQ (string, "punct") || STREQ (string, "graph") \
- || STREQ (string, "cntrl") || STREQ (string, "blank"))
-# endif
-# endif /* DEFINED_ONCE */
-
-# ifndef MATCH_MAY_ALLOCATE
-
-/* If we cannot allocate large objects within re_match_2_internal,
- we make the fail stack and register vectors global.
- The fail stack, we grow to the maximum size when a regexp
- is compiled.
- The register vectors, we adjust in size each time we
- compile a regexp, according to the number of registers it needs. */
-
-static PREFIX(fail_stack_type) fail_stack;
-
-/* Size with which the following vectors are currently allocated.
- That is so we can make them bigger as needed,
- but never make them smaller. */
-# ifdef DEFINED_ONCE
-static int regs_allocated_size;
-
-static const char ** regstart, ** regend;
-static const char ** old_regstart, ** old_regend;
-static const char **best_regstart, **best_regend;
-static const char **reg_dummy;
-# endif /* DEFINED_ONCE */
-
-static PREFIX(register_info_type) *PREFIX(reg_info);
-static PREFIX(register_info_type) *PREFIX(reg_info_dummy);
-
-/* Make the register vectors big enough for NUM_REGS registers,
- but don't make them smaller. */
-
-static void
-PREFIX(regex_grow_registers) (int num_regs)
-{
- if (num_regs > regs_allocated_size)
- {
- RETALLOC_IF (regstart, num_regs, const char *);
- RETALLOC_IF (regend, num_regs, const char *);
- RETALLOC_IF (old_regstart, num_regs, const char *);
- RETALLOC_IF (old_regend, num_regs, const char *);
- RETALLOC_IF (best_regstart, num_regs, const char *);
- RETALLOC_IF (best_regend, num_regs, const char *);
- RETALLOC_IF (PREFIX(reg_info), num_regs, PREFIX(register_info_type));
- RETALLOC_IF (reg_dummy, num_regs, const char *);
- RETALLOC_IF (PREFIX(reg_info_dummy), num_regs, PREFIX(register_info_type));
-
- regs_allocated_size = num_regs;
- }
-}
-
-# endif /* not MATCH_MAY_ALLOCATE */
-
-# ifndef DEFINED_ONCE
-static boolean group_in_compile_stack (compile_stack_type compile_stack,
- regnum_t regnum);
-# endif /* not DEFINED_ONCE */
-
-/* `regex_compile' compiles PATTERN (of length SIZE) according to SYNTAX.
- Returns one of error codes defined in `regex.h', or zero for success.
-
- Assumes the `allocated' (and perhaps `buffer') and `translate'
- fields are set in BUFP on entry.
-
- If it succeeds, results are put in BUFP (if it returns an error, the
- contents of BUFP are undefined):
- `buffer' is the compiled pattern;
- `syntax' is set to SYNTAX;
- `used' is set to the length of the compiled pattern;
- `fastmap_accurate' is zero;
- `re_nsub' is the number of subexpressions in PATTERN;
- `not_bol' and `not_eol' are zero;
-
- The `fastmap' and `newline_anchor' fields are neither
- examined nor set. */
-
-/* Return, freeing storage we allocated. */
-# ifdef WCHAR
-# define FREE_STACK_RETURN(value) \
- return (free(pattern), free(mbs_offset), free(is_binary), free (compile_stack.stack), value)
-# else
-# define FREE_STACK_RETURN(value) \
- return (free (compile_stack.stack), value)
-# endif /* WCHAR */
-
-static reg_errcode_t
-PREFIX(regex_compile) (const char *ARG_PREFIX(pattern),
- size_t ARG_PREFIX(size), reg_syntax_t syntax,
- struct re_pattern_buffer *bufp)
-{
- /* We fetch characters from PATTERN here. Even though PATTERN is
- `char *' (i.e., signed), we declare these variables as unsigned, so
- they can be reliably used as array indices. */
- register UCHAR_T c, c1;
-
-#ifdef WCHAR
- /* A temporary space to keep wchar_t pattern and compiled pattern. */
- CHAR_T *pattern, *COMPILED_BUFFER_VAR;
- size_t size;
- /* offset buffer for optimization. See convert_mbs_to_wc. */
- int *mbs_offset = NULL;
- /* It hold whether each wchar_t is binary data or not. */
- char *is_binary = NULL;
- /* A flag whether exactn is handling binary data or not. */
- char is_exactn_bin = FALSE;
-#endif /* WCHAR */
-
- /* A random temporary spot in PATTERN. */
- const CHAR_T *p1;
-
- /* Points to the end of the buffer, where we should append. */
- register UCHAR_T *b;
-
- /* Keeps track of unclosed groups. */
- compile_stack_type compile_stack;
-
- /* Points to the current (ending) position in the pattern. */
-#ifdef WCHAR
- const CHAR_T *p;
- const CHAR_T *pend;
-#else /* BYTE */
- const CHAR_T *p = pattern;
- const CHAR_T *pend = pattern + size;
-#endif /* WCHAR */
-
- /* How to translate the characters in the pattern. */
- RE_TRANSLATE_TYPE translate = bufp->translate;
-
- /* Address of the count-byte of the most recently inserted `exactn'
- command. This makes it possible to tell if a new exact-match
- character can be added to that command or if the character requires
- a new `exactn' command. */
- UCHAR_T *pending_exact = 0;
-
- /* Address of start of the most recently finished expression.
- This tells, e.g., postfix * where to find the start of its
- operand. Reset at the beginning of groups and alternatives. */
- UCHAR_T *laststart = 0;
-
- /* Address of beginning of regexp, or inside of last group. */
- UCHAR_T *begalt;
-
- /* Address of the place where a forward jump should go to the end of
- the containing expression. Each alternative of an `or' -- except the
- last -- ends with a forward jump of this sort. */
- UCHAR_T *fixup_alt_jump = 0;
-
- /* Counts open-groups as they are encountered. Remembered for the
- matching close-group on the compile stack, so the same register
- number is put in the stop_memory as the start_memory. */
- regnum_t regnum = 0;
-
-#ifdef WCHAR
- /* Initialize the wchar_t PATTERN and offset_buffer. */
- p = pend = pattern = TALLOC(csize + 1, CHAR_T);
- mbs_offset = TALLOC(csize + 1, int);
- is_binary = TALLOC(csize + 1, char);
- if (pattern == NULL || mbs_offset == NULL || is_binary == NULL)
- {
- free(pattern);
- free(mbs_offset);
- free(is_binary);
- return REG_ESPACE;
- }
- pattern[csize] = L'\0'; /* sentinel */
- size = convert_mbs_to_wcs(pattern, cpattern, csize, mbs_offset, is_binary);
- pend = p + size;
- if (size < 0)
- {
- free(pattern);
- free(mbs_offset);
- free(is_binary);
- return REG_BADPAT;
- }
-#endif
-
-#ifdef DEBUG
- DEBUG_PRINT1 ("\nCompiling pattern: ");
- if (debug)
- {
- unsigned debug_count;
-
- for (debug_count = 0; debug_count < size; debug_count++)
- PUT_CHAR (pattern[debug_count]);
- putchar ('\n');
- }
-#endif /* DEBUG */
-
- /* Initialize the compile stack. */
- compile_stack.stack = TALLOC (INIT_COMPILE_STACK_SIZE, compile_stack_elt_t);
- if (compile_stack.stack == NULL)
- {
-#ifdef WCHAR
- free(pattern);
- free(mbs_offset);
- free(is_binary);
-#endif
- return REG_ESPACE;
- }
-
- compile_stack.size = INIT_COMPILE_STACK_SIZE;
- compile_stack.avail = 0;
-
- /* Initialize the pattern buffer. */
- bufp->syntax = syntax;
- bufp->fastmap_accurate = 0;
- bufp->not_bol = bufp->not_eol = 0;
-
- /* Set `used' to zero, so that if we return an error, the pattern
- printer (for debugging) will think there's no pattern. We reset it
- at the end. */
- bufp->used = 0;
-
- /* Always count groups, whether or not bufp->no_sub is set. */
- bufp->re_nsub = 0;
-
-#if !defined emacs && !defined SYNTAX_TABLE
- /* Initialize the syntax table. */
- init_syntax_once ();
-#endif
-
- if (bufp->allocated == 0)
- {
- if (bufp->buffer)
- { /* If zero allocated, but buffer is non-null, try to realloc
- enough space. This loses if buffer's address is bogus, but
- that is the user's responsibility. */
-#ifdef WCHAR
- /* Free bufp->buffer and allocate an array for wchar_t pattern
- buffer. */
- free(bufp->buffer);
- COMPILED_BUFFER_VAR = TALLOC (INIT_BUF_SIZE/sizeof(UCHAR_T),
- UCHAR_T);
-#else
- RETALLOC (COMPILED_BUFFER_VAR, INIT_BUF_SIZE, UCHAR_T);
-#endif /* WCHAR */
- }
- else
- { /* Caller did not allocate a buffer. Do it for them. */
- COMPILED_BUFFER_VAR = TALLOC (INIT_BUF_SIZE / sizeof(UCHAR_T),
- UCHAR_T);
- }
-
- if (!COMPILED_BUFFER_VAR) FREE_STACK_RETURN (REG_ESPACE);
-#ifdef WCHAR
- bufp->buffer = (char*)COMPILED_BUFFER_VAR;
-#endif /* WCHAR */
- bufp->allocated = INIT_BUF_SIZE;
- }
-#ifdef WCHAR
- else
- COMPILED_BUFFER_VAR = (UCHAR_T*) bufp->buffer;
-#endif
-
- begalt = b = COMPILED_BUFFER_VAR;
-
- /* Loop through the uncompiled pattern until we're at the end. */
- while (p != pend)
- {
- PATFETCH (c);
-
- switch (c)
- {
- case '^':
- {
- if ( /* If at start of pattern, it's an operator. */
- p == pattern + 1
- /* If context independent, it's an operator. */
- || syntax & RE_CONTEXT_INDEP_ANCHORS
- /* Otherwise, depends on what's come before. */
- || PREFIX(at_begline_loc_p) (pattern, p, syntax))
- BUF_PUSH (begline);
- else
- goto normal_char;
- }
- break;
-
-
- case '$':
- {
- if ( /* If at end of pattern, it's an operator. */
- p == pend
- /* If context independent, it's an operator. */
- || syntax & RE_CONTEXT_INDEP_ANCHORS
- /* Otherwise, depends on what's next. */
- || PREFIX(at_endline_loc_p) (p, pend, syntax))
- BUF_PUSH (endline);
- else
- goto normal_char;
- }
- break;
-
-
- case '+':
- case '?':
- if ((syntax & RE_BK_PLUS_QM)
- || (syntax & RE_LIMITED_OPS))
- goto normal_char;
- handle_plus:
- case '*':
- /* If there is no previous pattern... */
- if (!laststart)
- {
- if (syntax & RE_CONTEXT_INVALID_OPS)
- FREE_STACK_RETURN (REG_BADRPT);
- else if (!(syntax & RE_CONTEXT_INDEP_OPS))
- goto normal_char;
- }
-
- {
- /* Are we optimizing this jump? */
- boolean keep_string_p = false;
-
- /* 1 means zero (many) matches is allowed. */
- char zero_times_ok = 0, many_times_ok = 0;
-
- /* If there is a sequence of repetition chars, collapse it
- down to just one (the right one). We can't combine
- interval operators with these because of, e.g., `a{2}*',
- which should only match an even number of `a's. */
-
- for (;;)
- {
- zero_times_ok |= c != '+';
- many_times_ok |= c != '?';
-
- if (p == pend)
- break;
-
- PATFETCH (c);
-
- if (c == '*'
- || (!(syntax & RE_BK_PLUS_QM) && (c == '+' || c == '?')))
- ;
-
- else if (syntax & RE_BK_PLUS_QM && c == '\\')
- {
- if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
-
- PATFETCH (c1);
- if (!(c1 == '+' || c1 == '?'))
- {
- PATUNFETCH;
- PATUNFETCH;
- break;
- }
-
- c = c1;
- }
- else
- {
- PATUNFETCH;
- break;
- }
-
- /* If we get here, we found another repeat character. */
- }
-
- /* Star, etc. applied to an empty pattern is equivalent
- to an empty pattern. */
- if (!laststart)
- break;
-
- /* Now we know whether or not zero matches is allowed
- and also whether or not two or more matches is allowed. */
- if (many_times_ok)
- { /* More than one repetition is allowed, so put in at the
- end a backward relative jump from `b' to before the next
- jump we're going to put in below (which jumps from
- laststart to after this jump).
-
- But if we are at the `*' in the exact sequence `.*\n',
- insert an unconditional jump backwards to the .,
- instead of the beginning of the loop. This way we only
- push a failure point once, instead of every time
- through the loop. */
- assert (p - 1 > pattern);
-
- /* Allocate the space for the jump. */
- GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
-
- /* We know we are not at the first character of the pattern,
- because laststart was nonzero. And we've already
- incremented `p', by the way, to be the character after
- the `*'. Do we have to do something analogous here
- for null bytes, because of RE_DOT_NOT_NULL? */
- if (TRANSLATE (*(p - 2)) == TRANSLATE ('.')
- && zero_times_ok
- && p < pend && TRANSLATE (*p) == TRANSLATE ('\n')
- && !(syntax & RE_DOT_NEWLINE))
- { /* We have .*\n. */
- STORE_JUMP (jump, b, laststart);
- keep_string_p = true;
- }
- else
- /* Anything else. */
- STORE_JUMP (maybe_pop_jump, b, laststart -
- (1 + OFFSET_ADDRESS_SIZE));
-
- /* We've added more stuff to the buffer. */
- b += 1 + OFFSET_ADDRESS_SIZE;
- }
-
- /* On failure, jump from laststart to b + 3, which will be the
- end of the buffer after this jump is inserted. */
- /* ifdef WCHAR, 'b + 1 + OFFSET_ADDRESS_SIZE' instead of
- 'b + 3'. */
- GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
- INSERT_JUMP (keep_string_p ? on_failure_keep_string_jump
- : on_failure_jump,
- laststart, b + 1 + OFFSET_ADDRESS_SIZE);
- pending_exact = 0;
- b += 1 + OFFSET_ADDRESS_SIZE;
-
- if (!zero_times_ok)
- {
- /* At least one repetition is required, so insert a
- `dummy_failure_jump' before the initial
- `on_failure_jump' instruction of the loop. This
- effects a skip over that instruction the first time
- we hit that loop. */
- GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
- INSERT_JUMP (dummy_failure_jump, laststart, laststart +
- 2 + 2 * OFFSET_ADDRESS_SIZE);
- b += 1 + OFFSET_ADDRESS_SIZE;
- }
- }
- break;
-
-
- case '.':
- laststart = b;
- BUF_PUSH (anychar);
- break;
-
-
- case '[':
- {
- boolean had_char_class = false;
-#ifdef WCHAR
- CHAR_T range_start = 0xffffffff;
-#else
- unsigned int range_start = 0xffffffff;
-#endif
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
-#ifdef WCHAR
- /* We assume a charset(_not) structure as a wchar_t array.
- charset[0] = (re_opcode_t) charset(_not)
- charset[1] = l (= length of char_classes)
- charset[2] = m (= length of collating_symbols)
- charset[3] = n (= length of equivalence_classes)
- charset[4] = o (= length of char_ranges)
- charset[5] = p (= length of chars)
-
- charset[6] = char_class (wctype_t)
- charset[6+CHAR_CLASS_SIZE] = char_class (wctype_t)
- ...
- charset[l+5] = char_class (wctype_t)
-
- charset[l+6] = collating_symbol (wchar_t)
- ...
- charset[l+m+5] = collating_symbol (wchar_t)
- ifdef _LIBC we use the index if
- _NL_COLLATE_SYMB_EXTRAMB instead of
- wchar_t string.
-
- charset[l+m+6] = equivalence_classes (wchar_t)
- ...
- charset[l+m+n+5] = equivalence_classes (wchar_t)
- ifdef _LIBC we use the index in
- _NL_COLLATE_WEIGHT instead of
- wchar_t string.
-
- charset[l+m+n+6] = range_start
- charset[l+m+n+7] = range_end
- ...
- charset[l+m+n+2o+4] = range_start
- charset[l+m+n+2o+5] = range_end
- ifdef _LIBC we use the value looked up
- in _NL_COLLATE_COLLSEQ instead of
- wchar_t character.
-
- charset[l+m+n+2o+6] = char
- ...
- charset[l+m+n+2o+p+5] = char
-
- */
-
- /* We need at least 6 spaces: the opcode, the length of
- char_classes, the length of collating_symbols, the length of
- equivalence_classes, the length of char_ranges, the length of
- chars. */
- GET_BUFFER_SPACE (6);
-
- /* Save b as laststart. And We use laststart as the pointer
- to the first element of the charset here.
- In other words, laststart[i] indicates charset[i]. */
- laststart = b;
-
- /* We test `*p == '^' twice, instead of using an if
- statement, so we only need one BUF_PUSH. */
- BUF_PUSH (*p == '^' ? charset_not : charset);
- if (*p == '^')
- p++;
-
- /* Push the length of char_classes, the length of
- collating_symbols, the length of equivalence_classes, the
- length of char_ranges and the length of chars. */
- BUF_PUSH_3 (0, 0, 0);
- BUF_PUSH_2 (0, 0);
-
- /* Remember the first position in the bracket expression. */
- p1 = p;
-
- /* charset_not matches newline according to a syntax bit. */
- if ((re_opcode_t) b[-6] == charset_not
- && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
- {
- BUF_PUSH('\n');
- laststart[5]++; /* Update the length of characters */
- }
-
- /* Read in characters and ranges, setting map bits. */
- for (;;)
- {
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- PATFETCH (c);
-
- /* \ might escape characters inside [...] and [^...]. */
- if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
- {
- if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
-
- PATFETCH (c1);
- BUF_PUSH(c1);
- laststart[5]++; /* Update the length of chars */
- range_start = c1;
- continue;
- }
-
- /* Could be the end of the bracket expression. If it's
- not (i.e., when the bracket expression is `[]' so
- far), the ']' character bit gets set way below. */
- if (c == ']' && p != p1 + 1)
- break;
-
- /* Look ahead to see if it's a range when the last thing
- was a character class. */
- if (had_char_class && c == '-' && *p != ']')
- FREE_STACK_RETURN (REG_ERANGE);
-
- /* Look ahead to see if it's a range when the last thing
- was a character: if this is a hyphen not at the
- beginning or the end of a list, then it's the range
- operator. */
- if (c == '-'
- && !(p - 2 >= pattern && p[-2] == '[')
- && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
- && *p != ']')
- {
- reg_errcode_t ret;
- /* Allocate the space for range_start and range_end. */
- GET_BUFFER_SPACE (2);
- /* Update the pointer to indicate end of buffer. */
- b += 2;
- ret = wcs_compile_range (range_start, &p, pend, translate,
- syntax, b, laststart);
- if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
- range_start = 0xffffffff;
- }
- else if (p[0] == '-' && p[1] != ']')
- { /* This handles ranges made up of characters only. */
- reg_errcode_t ret;
-
- /* Move past the `-'. */
- PATFETCH (c1);
- /* Allocate the space for range_start and range_end. */
- GET_BUFFER_SPACE (2);
- /* Update the pointer to indicate end of buffer. */
- b += 2;
- ret = wcs_compile_range (c, &p, pend, translate, syntax, b,
- laststart);
- if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
- range_start = 0xffffffff;
- }
-
- /* See if we're at the beginning of a possible character
- class. */
- else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
- { /* Leave room for the null. */
- char str[CHAR_CLASS_MAX_LENGTH + 1];
-
- PATFETCH (c);
- c1 = 0;
-
- /* If pattern is `[[:'. */
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- for (;;)
- {
- PATFETCH (c);
- if ((c == ':' && *p == ']') || p == pend)
- break;
- if (c1 < CHAR_CLASS_MAX_LENGTH)
- str[c1++] = c;
- else
- /* This is in any case an invalid class name. */
- str[0] = '\0';
- }
- str[c1] = '\0';
-
- /* If isn't a word bracketed by `[:' and `:]':
- undo the ending character, the letters, and leave
- the leading `:' and `[' (but store them as character). */
- if (c == ':' && *p == ']')
- {
- wctype_t wt;
- uintptr_t alignedp;
-
- /* Query the character class as wctype_t. */
- wt = IS_CHAR_CLASS (str);
- if (wt == 0)
- FREE_STACK_RETURN (REG_ECTYPE);
-
- /* Throw away the ] at the end of the character
- class. */
- PATFETCH (c);
-
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- /* Allocate the space for character class. */
- GET_BUFFER_SPACE(CHAR_CLASS_SIZE);
- /* Update the pointer to indicate end of buffer. */
- b += CHAR_CLASS_SIZE;
- /* Move data which follow character classes
- not to violate the data. */
- insert_space(CHAR_CLASS_SIZE,
- laststart + 6 + laststart[1],
- b - 1);
- alignedp = ((uintptr_t)(laststart + 6 + laststart[1])
- + __alignof__(wctype_t) - 1)
- & ~(uintptr_t)(__alignof__(wctype_t) - 1);
- /* Store the character class. */
- *((wctype_t*)alignedp) = wt;
- /* Update length of char_classes */
- laststart[1] += CHAR_CLASS_SIZE;
-
- had_char_class = true;
- }
- else
- {
- c1++;
- while (c1--)
- PATUNFETCH;
- BUF_PUSH ('[');
- BUF_PUSH (':');
- laststart[5] += 2; /* Update the length of characters */
- range_start = ':';
- had_char_class = false;
- }
- }
- else if (syntax & RE_CHAR_CLASSES && c == '[' && (*p == '='
- || *p == '.'))
- {
- CHAR_T str[128]; /* Should be large enough. */
- CHAR_T delim = *p; /* '=' or '.' */
-# ifdef _LIBC
- uint32_t nrules =
- _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-# endif
- PATFETCH (c);
- c1 = 0;
-
- /* If pattern is `[[=' or '[[.'. */
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- for (;;)
- {
- PATFETCH (c);
- if ((c == delim && *p == ']') || p == pend)
- break;
- if (c1 < sizeof (str) - 1)
- str[c1++] = c;
- else
- /* This is in any case an invalid class name. */
- str[0] = '\0';
- }
- str[c1] = '\0';
-
- if (c == delim && *p == ']' && str[0] != '\0')
- {
- unsigned int i, offset;
- /* If we have no collation data we use the default
- collation in which each character is in a class
- by itself. It also means that ASCII is the
- character set and therefore we cannot have character
- with more than one byte in the multibyte
- representation. */
-
- /* If not defined _LIBC, we push the name and
- `\0' for the sake of matching performance. */
- int datasize = c1 + 1;
-
-# ifdef _LIBC
- int32_t idx = 0;
- if (nrules == 0)
-# endif
- {
- if (c1 != 1)
- FREE_STACK_RETURN (REG_ECOLLATE);
- }
-# ifdef _LIBC
- else
- {
- const int32_t *table;
- const int32_t *weights;
- const int32_t *extra;
- const int32_t *indirect;
- wint_t *cp;
-
- /* This #include defines a local function! */
-# include <locale/weightwc.h>
-
- if(delim == '=')
- {
- /* We push the index for equivalence class. */
- cp = (wint_t*)str;
-
- table = (const int32_t *)
- _NL_CURRENT (LC_COLLATE,
- _NL_COLLATE_TABLEWC);
- weights = (const int32_t *)
- _NL_CURRENT (LC_COLLATE,
- _NL_COLLATE_WEIGHTWC);
- extra = (const int32_t *)
- _NL_CURRENT (LC_COLLATE,
- _NL_COLLATE_EXTRAWC);
- indirect = (const int32_t *)
- _NL_CURRENT (LC_COLLATE,
- _NL_COLLATE_INDIRECTWC);
-
- idx = findidx ((const wint_t**)&cp);
- if (idx == 0 || cp < (wint_t*) str + c1)
- /* This is no valid character. */
- FREE_STACK_RETURN (REG_ECOLLATE);
-
- str[0] = (wchar_t)idx;
- }
- else /* delim == '.' */
- {
- /* We push collation sequence value
- for collating symbol. */
- int32_t table_size;
- const int32_t *symb_table;
- const unsigned char *extra;
- int32_t idx;
- int32_t elem;
- int32_t second;
- int32_t hash;
- char char_str[c1];
-
- /* We have to convert the name to a single-byte
- string. This is possible since the names
- consist of ASCII characters and the internal
- representation is UCS4. */
- for (i = 0; i < c1; ++i)
- char_str[i] = str[i];
-
- table_size =
- _NL_CURRENT_WORD (LC_COLLATE,
- _NL_COLLATE_SYMB_HASH_SIZEMB);
- symb_table = (const int32_t *)
- _NL_CURRENT (LC_COLLATE,
- _NL_COLLATE_SYMB_TABLEMB);
- extra = (const unsigned char *)
- _NL_CURRENT (LC_COLLATE,
- _NL_COLLATE_SYMB_EXTRAMB);
-
- /* Locate the character in the hashing table. */
- hash = elem_hash (char_str, c1);
-
- idx = 0;
- elem = hash % table_size;
- second = hash % (table_size - 2);
- while (symb_table[2 * elem] != 0)
- {
- /* First compare the hashing value. */
- if (symb_table[2 * elem] == hash
- && c1 == extra[symb_table[2 * elem + 1]]
- && memcmp (char_str,
- &extra[symb_table[2 * elem + 1]
- + 1], c1) == 0)
- {
- /* Yep, this is the entry. */
- idx = symb_table[2 * elem + 1];
- idx += 1 + extra[idx];
- break;
- }
-
- /* Next entry. */
- elem += second;
- }
-
- if (symb_table[2 * elem] != 0)
- {
- /* Compute the index of the byte sequence
- in the table. */
- idx += 1 + extra[idx];
- /* Adjust for the alignment. */
- idx = (idx + 3) & ~3;
-
- str[0] = (wchar_t) idx + 4;
- }
- else if (symb_table[2 * elem] == 0 && c1 == 1)
- {
- /* No valid character. Match it as a
- single byte character. */
- had_char_class = false;
- BUF_PUSH(str[0]);
- /* Update the length of characters */
- laststart[5]++;
- range_start = str[0];
-
- /* Throw away the ] at the end of the
- collating symbol. */
- PATFETCH (c);
- /* exit from the switch block. */
- continue;
- }
- else
- FREE_STACK_RETURN (REG_ECOLLATE);
- }
- datasize = 1;
- }
-# endif
- /* Throw away the ] at the end of the equivalence
- class (or collating symbol). */
- PATFETCH (c);
-
- /* Allocate the space for the equivalence class
- (or collating symbol) (and '\0' if needed). */
- GET_BUFFER_SPACE(datasize);
- /* Update the pointer to indicate end of buffer. */
- b += datasize;
-
- if (delim == '=')
- { /* equivalence class */
- /* Calculate the offset of char_ranges,
- which is next to equivalence_classes. */
- offset = laststart[1] + laststart[2]
- + laststart[3] +6;
- /* Insert space. */
- insert_space(datasize, laststart + offset, b - 1);
-
- /* Write the equivalence_class and \0. */
- for (i = 0 ; i < datasize ; i++)
- laststart[offset + i] = str[i];
-
- /* Update the length of equivalence_classes. */
- laststart[3] += datasize;
- had_char_class = true;
- }
- else /* delim == '.' */
- { /* collating symbol */
- /* Calculate the offset of the equivalence_classes,
- which is next to collating_symbols. */
- offset = laststart[1] + laststart[2] + 6;
- /* Insert space and write the collationg_symbol
- and \0. */
- insert_space(datasize, laststart + offset, b-1);
- for (i = 0 ; i < datasize ; i++)
- laststart[offset + i] = str[i];
-
- /* In re_match_2_internal if range_start < -1, we
- assume -range_start is the offset of the
- collating symbol which is specified as
- the character of the range start. So we assign
- -(laststart[1] + laststart[2] + 6) to
- range_start. */
- range_start = -(laststart[1] + laststart[2] + 6);
- /* Update the length of collating_symbol. */
- laststart[2] += datasize;
- had_char_class = false;
- }
- }
- else
- {
- c1++;
- while (c1--)
- PATUNFETCH;
- BUF_PUSH ('[');
- BUF_PUSH (delim);
- laststart[5] += 2; /* Update the length of characters */
- range_start = delim;
- had_char_class = false;
- }
- }
- else
- {
- had_char_class = false;
- BUF_PUSH(c);
- laststart[5]++; /* Update the length of characters */
- range_start = c;
- }
- }
-
-#else /* BYTE */
- /* Ensure that we have enough space to push a charset: the
- opcode, the length count, and the bitset; 34 bytes in all. */
- GET_BUFFER_SPACE (34);
-
- laststart = b;
-
- /* We test `*p == '^' twice, instead of using an if
- statement, so we only need one BUF_PUSH. */
- BUF_PUSH (*p == '^' ? charset_not : charset);
- if (*p == '^')
- p++;
-
- /* Remember the first position in the bracket expression. */
- p1 = p;
-
- /* Push the number of bytes in the bitmap. */
- BUF_PUSH ((1 << BYTEWIDTH) / BYTEWIDTH);
-
- /* Clear the whole map. */
- bzero (b, (1 << BYTEWIDTH) / BYTEWIDTH);
-
- /* charset_not matches newline according to a syntax bit. */
- if ((re_opcode_t) b[-2] == charset_not
- && (syntax & RE_HAT_LISTS_NOT_NEWLINE))
- SET_LIST_BIT ('\n');
-
- /* Read in characters and ranges, setting map bits. */
- for (;;)
- {
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- PATFETCH (c);
-
- /* \ might escape characters inside [...] and [^...]. */
- if ((syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && c == '\\')
- {
- if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
-
- PATFETCH (c1);
- SET_LIST_BIT (c1);
- range_start = c1;
- continue;
- }
-
- /* Could be the end of the bracket expression. If it's
- not (i.e., when the bracket expression is `[]' so
- far), the ']' character bit gets set way below. */
- if (c == ']' && p != p1 + 1)
- break;
-
- /* Look ahead to see if it's a range when the last thing
- was a character class. */
- if (had_char_class && c == '-' && *p != ']')
- FREE_STACK_RETURN (REG_ERANGE);
-
- /* Look ahead to see if it's a range when the last thing
- was a character: if this is a hyphen not at the
- beginning or the end of a list, then it's the range
- operator. */
- if (c == '-'
- && !(p - 2 >= pattern && p[-2] == '[')
- && !(p - 3 >= pattern && p[-3] == '[' && p[-2] == '^')
- && *p != ']')
- {
- reg_errcode_t ret
- = byte_compile_range (range_start, &p, pend, translate,
- syntax, b);
- if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
- range_start = 0xffffffff;
- }
-
- else if (p[0] == '-' && p[1] != ']')
- { /* This handles ranges made up of characters only. */
- reg_errcode_t ret;
-
- /* Move past the `-'. */
- PATFETCH (c1);
-
- ret = byte_compile_range (c, &p, pend, translate, syntax, b);
- if (ret != REG_NOERROR) FREE_STACK_RETURN (ret);
- range_start = 0xffffffff;
- }
-
- /* See if we're at the beginning of a possible character
- class. */
-
- else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == ':')
- { /* Leave room for the null. */
- char str[CHAR_CLASS_MAX_LENGTH + 1];
-
- PATFETCH (c);
- c1 = 0;
-
- /* If pattern is `[[:'. */
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- for (;;)
- {
- PATFETCH (c);
- if ((c == ':' && *p == ']') || p == pend)
- break;
- if (c1 < CHAR_CLASS_MAX_LENGTH)
- str[c1++] = c;
- else
- /* This is in any case an invalid class name. */
- str[0] = '\0';
- }
- str[c1] = '\0';
-
- /* If isn't a word bracketed by `[:' and `:]':
- undo the ending character, the letters, and leave
- the leading `:' and `[' (but set bits for them). */
- if (c == ':' && *p == ']')
- {
-# if defined _LIBC || WIDE_CHAR_SUPPORT
- boolean is_lower = STREQ (str, "lower");
- boolean is_upper = STREQ (str, "upper");
- wctype_t wt;
- int ch;
-
- wt = IS_CHAR_CLASS (str);
- if (wt == 0)
- FREE_STACK_RETURN (REG_ECTYPE);
-
- /* Throw away the ] at the end of the character
- class. */
- PATFETCH (c);
-
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- for (ch = 0; ch < 1 << BYTEWIDTH; ++ch)
- {
-# ifdef _LIBC
- if (__iswctype (__btowc (ch), wt))
- SET_LIST_BIT (ch);
-# else
- if (iswctype (btowc (ch), wt))
- SET_LIST_BIT (ch);
-# endif
-
- if (translate && (is_upper || is_lower)
- && (ISUPPER (ch) || ISLOWER (ch)))
- SET_LIST_BIT (ch);
- }
-
- had_char_class = true;
-# else
- int ch;
- boolean is_alnum = STREQ (str, "alnum");
- boolean is_alpha = STREQ (str, "alpha");
- boolean is_blank = STREQ (str, "blank");
- boolean is_cntrl = STREQ (str, "cntrl");
- boolean is_digit = STREQ (str, "digit");
- boolean is_graph = STREQ (str, "graph");
- boolean is_lower = STREQ (str, "lower");
- boolean is_print = STREQ (str, "print");
- boolean is_punct = STREQ (str, "punct");
- boolean is_space = STREQ (str, "space");
- boolean is_upper = STREQ (str, "upper");
- boolean is_xdigit = STREQ (str, "xdigit");
-
- if (!IS_CHAR_CLASS (str))
- FREE_STACK_RETURN (REG_ECTYPE);
-
- /* Throw away the ] at the end of the character
- class. */
- PATFETCH (c);
-
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- for (ch = 0; ch < 1 << BYTEWIDTH; ch++)
- {
- /* This was split into 3 if's to
- avoid an arbitrary limit in some compiler. */
- if ( (is_alnum && ISALNUM (ch))
- || (is_alpha && ISALPHA (ch))
- || (is_blank && ISBLANK (ch))
- || (is_cntrl && ISCNTRL (ch)))
- SET_LIST_BIT (ch);
- if ( (is_digit && ISDIGIT (ch))
- || (is_graph && ISGRAPH (ch))
- || (is_lower && ISLOWER (ch))
- || (is_print && ISPRINT (ch)))
- SET_LIST_BIT (ch);
- if ( (is_punct && ISPUNCT (ch))
- || (is_space && ISSPACE (ch))
- || (is_upper && ISUPPER (ch))
- || (is_xdigit && ISXDIGIT (ch)))
- SET_LIST_BIT (ch);
- if ( translate && (is_upper || is_lower)
- && (ISUPPER (ch) || ISLOWER (ch)))
- SET_LIST_BIT (ch);
- }
- had_char_class = true;
-# endif /* libc || wctype.h */
- }
- else
- {
- c1++;
- while (c1--)
- PATUNFETCH;
- SET_LIST_BIT ('[');
- SET_LIST_BIT (':');
- range_start = ':';
- had_char_class = false;
- }
- }
- else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '=')
- {
- unsigned char str[MB_LEN_MAX + 1];
-# ifdef _LIBC
- uint32_t nrules =
- _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-# endif
-
- PATFETCH (c);
- c1 = 0;
-
- /* If pattern is `[[='. */
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- for (;;)
- {
- PATFETCH (c);
- if ((c == '=' && *p == ']') || p == pend)
- break;
- if (c1 < MB_LEN_MAX)
- str[c1++] = c;
- else
- /* This is in any case an invalid class name. */
- str[0] = '\0';
- }
- str[c1] = '\0';
-
- if (c == '=' && *p == ']' && str[0] != '\0')
- {
- /* If we have no collation data we use the default
- collation in which each character is in a class
- by itself. It also means that ASCII is the
- character set and therefore we cannot have character
- with more than one byte in the multibyte
- representation. */
-# ifdef _LIBC
- if (nrules == 0)
-# endif
- {
- if (c1 != 1)
- FREE_STACK_RETURN (REG_ECOLLATE);
-
- /* Throw away the ] at the end of the equivalence
- class. */
- PATFETCH (c);
-
- /* Set the bit for the character. */
- SET_LIST_BIT (str[0]);
- }
-# ifdef _LIBC
- else
- {
- /* Try to match the byte sequence in `str' against
- those known to the collate implementation.
- First find out whether the bytes in `str' are
- actually from exactly one character. */
- const int32_t *table;
- const unsigned char *weights;
- const unsigned char *extra;
- const int32_t *indirect;
- int32_t idx;
- const unsigned char *cp = str;
- int ch;
-
- /* This #include defines a local function! */
-# include <locale/weight.h>
-
- table = (const int32_t *)
- _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB);
- weights = (const unsigned char *)
- _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB);
- extra = (const unsigned char *)
- _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB);
- indirect = (const int32_t *)
- _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB);
-
- idx = findidx (&cp);
- if (idx == 0 || cp < str + c1)
- /* This is no valid character. */
- FREE_STACK_RETURN (REG_ECOLLATE);
-
- /* Throw away the ] at the end of the equivalence
- class. */
- PATFETCH (c);
-
- /* Now we have to go throught the whole table
- and find all characters which have the same
- first level weight.
-
- XXX Note that this is not entirely correct.
- we would have to match multibyte sequences
- but this is not possible with the current
- implementation. */
- for (ch = 1; ch < 256; ++ch)
- /* XXX This test would have to be changed if we
- would allow matching multibyte sequences. */
- if (table[ch] > 0)
- {
- int32_t idx2 = table[ch];
- size_t len = weights[idx2];
-
- /* Test whether the lenghts match. */
- if (weights[idx] == len)
- {
- /* They do. New compare the bytes of
- the weight. */
- size_t cnt = 0;
-
- while (cnt < len
- && (weights[idx + 1 + cnt]
- == weights[idx2 + 1 + cnt]))
- ++cnt;
-
- if (cnt == len)
- /* They match. Mark the character as
- acceptable. */
- SET_LIST_BIT (ch);
- }
- }
- }
-# endif
- had_char_class = true;
- }
- else
- {
- c1++;
- while (c1--)
- PATUNFETCH;
- SET_LIST_BIT ('[');
- SET_LIST_BIT ('=');
- range_start = '=';
- had_char_class = false;
- }
- }
- else if (syntax & RE_CHAR_CLASSES && c == '[' && *p == '.')
- {
- unsigned char str[128]; /* Should be large enough. */
-# ifdef _LIBC
- uint32_t nrules =
- _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-# endif
-
- PATFETCH (c);
- c1 = 0;
-
- /* If pattern is `[[.'. */
- if (p == pend) FREE_STACK_RETURN (REG_EBRACK);
-
- for (;;)
- {
- PATFETCH (c);
- if ((c == '.' && *p == ']') || p == pend)
- break;
- if (c1 < sizeof (str))
- str[c1++] = c;
- else
- /* This is in any case an invalid class name. */
- str[0] = '\0';
- }
- str[c1] = '\0';
-
- if (c == '.' && *p == ']' && str[0] != '\0')
- {
- /* If we have no collation data we use the default
- collation in which each character is the name
- for its own class which contains only the one
- character. It also means that ASCII is the
- character set and therefore we cannot have character
- with more than one byte in the multibyte
- representation. */
-# ifdef _LIBC
- if (nrules == 0)
-# endif
- {
- if (c1 != 1)
- FREE_STACK_RETURN (REG_ECOLLATE);
-
- /* Throw away the ] at the end of the equivalence
- class. */
- PATFETCH (c);
-
- /* Set the bit for the character. */
- SET_LIST_BIT (str[0]);
- range_start = ((const unsigned char *) str)[0];
- }
-# ifdef _LIBC
- else
- {
- /* Try to match the byte sequence in `str' against
- those known to the collate implementation.
- First find out whether the bytes in `str' are
- actually from exactly one character. */
- int32_t table_size;
- const int32_t *symb_table;
- const unsigned char *extra;
- int32_t idx;
- int32_t elem;
- int32_t second;
- int32_t hash;
-
- table_size =
- _NL_CURRENT_WORD (LC_COLLATE,
- _NL_COLLATE_SYMB_HASH_SIZEMB);
- symb_table = (const int32_t *)
- _NL_CURRENT (LC_COLLATE,
- _NL_COLLATE_SYMB_TABLEMB);
- extra = (const unsigned char *)
- _NL_CURRENT (LC_COLLATE,
- _NL_COLLATE_SYMB_EXTRAMB);
-
- /* Locate the character in the hashing table. */
- hash = elem_hash (str, c1);
-
- idx = 0;
- elem = hash % table_size;
- second = hash % (table_size - 2);
- while (symb_table[2 * elem] != 0)
- {
- /* First compare the hashing value. */
- if (symb_table[2 * elem] == hash
- && c1 == extra[symb_table[2 * elem + 1]]
- && memcmp (str,
- &extra[symb_table[2 * elem + 1]
- + 1],
- c1) == 0)
- {
- /* Yep, this is the entry. */
- idx = symb_table[2 * elem + 1];
- idx += 1 + extra[idx];
- break;
- }
-
- /* Next entry. */
- elem += second;
- }
-
- if (symb_table[2 * elem] == 0)
- /* This is no valid character. */
- FREE_STACK_RETURN (REG_ECOLLATE);
-
- /* Throw away the ] at the end of the equivalence
- class. */
- PATFETCH (c);
-
- /* Now add the multibyte character(s) we found
- to the accept list.
-
- XXX Note that this is not entirely correct.
- we would have to match multibyte sequences
- but this is not possible with the current
- implementation. Also, we have to match
- collating symbols, which expand to more than
- one file, as a whole and not allow the
- individual bytes. */
- c1 = extra[idx++];
- if (c1 == 1)
- range_start = extra[idx];
- while (c1-- > 0)
- {
- SET_LIST_BIT (extra[idx]);
- ++idx;
- }
- }
-# endif
- had_char_class = false;
- }
- else
- {
- c1++;
- while (c1--)
- PATUNFETCH;
- SET_LIST_BIT ('[');
- SET_LIST_BIT ('.');
- range_start = '.';
- had_char_class = false;
- }
- }
- else
- {
- had_char_class = false;
- SET_LIST_BIT (c);
- range_start = c;
- }
- }
-
- /* Discard any (non)matching list bytes that are all 0 at the
- end of the map. Decrease the map-length byte too. */
- while ((int) b[-1] > 0 && b[b[-1] - 1] == 0)
- b[-1]--;
- b += b[-1];
-#endif /* WCHAR */
- }
- break;
-
-
- case '(':
- if (syntax & RE_NO_BK_PARENS)
- goto handle_open;
- else
- goto normal_char;
-
-
- case ')':
- if (syntax & RE_NO_BK_PARENS)
- goto handle_close;
- else
- goto normal_char;
-
-
- case '\n':
- if (syntax & RE_NEWLINE_ALT)
- goto handle_alt;
- else
- goto normal_char;
-
-
- case '|':
- if (syntax & RE_NO_BK_VBAR)
- goto handle_alt;
- else
- goto normal_char;
-
-
- case '{':
- if (syntax & RE_INTERVALS && syntax & RE_NO_BK_BRACES)
- goto handle_interval;
- else
- goto normal_char;
-
-
- case '\\':
- if (p == pend) FREE_STACK_RETURN (REG_EESCAPE);
-
- /* Do not translate the character after the \, so that we can
- distinguish, e.g., \B from \b, even if we normally would
- translate, e.g., B to b. */
- PATFETCH_RAW (c);
-
- switch (c)
- {
- case '(':
- if (syntax & RE_NO_BK_PARENS)
- goto normal_backslash;
-
- handle_open:
- bufp->re_nsub++;
- regnum++;
-
- if (COMPILE_STACK_FULL)
- {
- RETALLOC (compile_stack.stack, compile_stack.size << 1,
- compile_stack_elt_t);
- if (compile_stack.stack == NULL) return REG_ESPACE;
-
- compile_stack.size <<= 1;
- }
-
- /* These are the values to restore when we hit end of this
- group. They are all relative offsets, so that if the
- whole pattern moves because of realloc, they will still
- be valid. */
- COMPILE_STACK_TOP.begalt_offset = begalt - COMPILED_BUFFER_VAR;
- COMPILE_STACK_TOP.fixup_alt_jump
- = fixup_alt_jump ? fixup_alt_jump - COMPILED_BUFFER_VAR + 1 : 0;
- COMPILE_STACK_TOP.laststart_offset = b - COMPILED_BUFFER_VAR;
- COMPILE_STACK_TOP.regnum = regnum;
-
- /* We will eventually replace the 0 with the number of
- groups inner to this one. But do not push a
- start_memory for groups beyond the last one we can
- represent in the compiled pattern. */
- if (regnum <= MAX_REGNUM)
- {
- COMPILE_STACK_TOP.inner_group_offset = b
- - COMPILED_BUFFER_VAR + 2;
- BUF_PUSH_3 (start_memory, regnum, 0);
- }
-
- compile_stack.avail++;
-
- fixup_alt_jump = 0;
- laststart = 0;
- begalt = b;
- /* If we've reached MAX_REGNUM groups, then this open
- won't actually generate any code, so we'll have to
- clear pending_exact explicitly. */
- pending_exact = 0;
- break;
-
-
- case ')':
- if (syntax & RE_NO_BK_PARENS) goto normal_backslash;
-
- if (COMPILE_STACK_EMPTY)
- {
- if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
- goto normal_backslash;
- else
- FREE_STACK_RETURN (REG_ERPAREN);
- }
-
- handle_close:
- if (fixup_alt_jump)
- { /* Push a dummy failure point at the end of the
- alternative for a possible future
- `pop_failure_jump' to pop. See comments at
- `push_dummy_failure' in `re_match_2'. */
- BUF_PUSH (push_dummy_failure);
-
- /* We allocated space for this jump when we assigned
- to `fixup_alt_jump', in the `handle_alt' case below. */
- STORE_JUMP (jump_past_alt, fixup_alt_jump, b - 1);
- }
-
- /* See similar code for backslashed left paren above. */
- if (COMPILE_STACK_EMPTY)
- {
- if (syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)
- goto normal_char;
- else
- FREE_STACK_RETURN (REG_ERPAREN);
- }
-
- /* Since we just checked for an empty stack above, this
- ``can't happen''. */
- assert (compile_stack.avail != 0);
- {
- /* We don't just want to restore into `regnum', because
- later groups should continue to be numbered higher,
- as in `(ab)c(de)' -- the second group is #2. */
- regnum_t this_group_regnum;
-
- compile_stack.avail--;
- begalt = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.begalt_offset;
- fixup_alt_jump
- = COMPILE_STACK_TOP.fixup_alt_jump
- ? COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.fixup_alt_jump - 1
- : 0;
- laststart = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.laststart_offset;
- this_group_regnum = COMPILE_STACK_TOP.regnum;
- /* If we've reached MAX_REGNUM groups, then this open
- won't actually generate any code, so we'll have to
- clear pending_exact explicitly. */
- pending_exact = 0;
-
- /* We're at the end of the group, so now we know how many
- groups were inside this one. */
- if (this_group_regnum <= MAX_REGNUM)
- {
- UCHAR_T *inner_group_loc
- = COMPILED_BUFFER_VAR + COMPILE_STACK_TOP.inner_group_offset;
-
- *inner_group_loc = regnum - this_group_regnum;
- BUF_PUSH_3 (stop_memory, this_group_regnum,
- regnum - this_group_regnum);
- }
- }
- break;
-
-
- case '|': /* `\|'. */
- if (syntax & RE_LIMITED_OPS || syntax & RE_NO_BK_VBAR)
- goto normal_backslash;
- handle_alt:
- if (syntax & RE_LIMITED_OPS)
- goto normal_char;
-
- /* Insert before the previous alternative a jump which
- jumps to this alternative if the former fails. */
- GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
- INSERT_JUMP (on_failure_jump, begalt,
- b + 2 + 2 * OFFSET_ADDRESS_SIZE);
- pending_exact = 0;
- b += 1 + OFFSET_ADDRESS_SIZE;
-
- /* The alternative before this one has a jump after it
- which gets executed if it gets matched. Adjust that
- jump so it will jump to this alternative's analogous
- jump (put in below, which in turn will jump to the next
- (if any) alternative's such jump, etc.). The last such
- jump jumps to the correct final destination. A picture:
- _____ _____
- | | | |
- | v | v
- a | b | c
-
- If we are at `b', then fixup_alt_jump right now points to a
- three-byte space after `a'. We'll put in the jump, set
- fixup_alt_jump to right after `b', and leave behind three
- bytes which we'll fill in when we get to after `c'. */
-
- if (fixup_alt_jump)
- STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
-
- /* Mark and leave space for a jump after this alternative,
- to be filled in later either by next alternative or
- when know we're at the end of a series of alternatives. */
- fixup_alt_jump = b;
- GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
- b += 1 + OFFSET_ADDRESS_SIZE;
-
- laststart = 0;
- begalt = b;
- break;
-
-
- case '{':
- /* If \{ is a literal. */
- if (!(syntax & RE_INTERVALS)
- /* If we're at `\{' and it's not the open-interval
- operator. */
- || (syntax & RE_NO_BK_BRACES))
- goto normal_backslash;
-
- handle_interval:
- {
- /* If got here, then the syntax allows intervals. */
-
- /* At least (most) this many matches must be made. */
- int lower_bound = -1, upper_bound = -1;
-
- /* Place in the uncompiled pattern (i.e., just after
- the '{') to go back to if the interval is invalid. */
- const CHAR_T *beg_interval = p;
-
- if (p == pend)
- goto invalid_interval;
-
- GET_UNSIGNED_NUMBER (lower_bound);
-
- if (c == ',')
- {
- GET_UNSIGNED_NUMBER (upper_bound);
- if (upper_bound < 0)
- upper_bound = RE_DUP_MAX;
- }
- else
- /* Interval such as `{1}' => match exactly once. */
- upper_bound = lower_bound;
-
- if (! (0 <= lower_bound && lower_bound <= upper_bound))
- goto invalid_interval;
-
- if (!(syntax & RE_NO_BK_BRACES))
- {
- if (c != '\\' || p == pend)
- goto invalid_interval;
- PATFETCH (c);
- }
-
- if (c != '}')
- goto invalid_interval;
-
- /* If it's invalid to have no preceding re. */
- if (!laststart)
- {
- if (syntax & RE_CONTEXT_INVALID_OPS
- && !(syntax & RE_INVALID_INTERVAL_ORD))
- FREE_STACK_RETURN (REG_BADRPT);
- else if (syntax & RE_CONTEXT_INDEP_OPS)
- laststart = b;
- else
- goto unfetch_interval;
- }
-
- /* We just parsed a valid interval. */
-
- if (RE_DUP_MAX < upper_bound)
- FREE_STACK_RETURN (REG_BADBR);
-
- /* If the upper bound is zero, don't want to succeed at
- all; jump from `laststart' to `b + 3', which will be
- the end of the buffer after we insert the jump. */
- /* ifdef WCHAR, 'b + 1 + OFFSET_ADDRESS_SIZE'
- instead of 'b + 3'. */
- if (upper_bound == 0)
- {
- GET_BUFFER_SPACE (1 + OFFSET_ADDRESS_SIZE);
- INSERT_JUMP (jump, laststart, b + 1
- + OFFSET_ADDRESS_SIZE);
- b += 1 + OFFSET_ADDRESS_SIZE;
- }
-
- /* Otherwise, we have a nontrivial interval. When
- we're all done, the pattern will look like:
- set_number_at <jump count> <upper bound>
- set_number_at <succeed_n count> <lower bound>
- succeed_n <after jump addr> <succeed_n count>
- <body of loop>
- jump_n <succeed_n addr> <jump count>
- (The upper bound and `jump_n' are omitted if
- `upper_bound' is 1, though.) */
- else
- { /* If the upper bound is > 1, we need to insert
- more at the end of the loop. */
- unsigned nbytes = 2 + 4 * OFFSET_ADDRESS_SIZE +
- (upper_bound > 1) * (2 + 4 * OFFSET_ADDRESS_SIZE);
-
- GET_BUFFER_SPACE (nbytes);
-
- /* Initialize lower bound of the `succeed_n', even
- though it will be set during matching by its
- attendant `set_number_at' (inserted next),
- because `re_compile_fastmap' needs to know.
- Jump to the `jump_n' we might insert below. */
- INSERT_JUMP2 (succeed_n, laststart,
- b + 1 + 2 * OFFSET_ADDRESS_SIZE
- + (upper_bound > 1) * (1 + 2 * OFFSET_ADDRESS_SIZE)
- , lower_bound);
- b += 1 + 2 * OFFSET_ADDRESS_SIZE;
-
- /* Code to initialize the lower bound. Insert
- before the `succeed_n'. The `5' is the last two
- bytes of this `set_number_at', plus 3 bytes of
- the following `succeed_n'. */
- /* ifdef WCHAR, The '1+2*OFFSET_ADDRESS_SIZE'
- is the 'set_number_at', plus '1+OFFSET_ADDRESS_SIZE'
- of the following `succeed_n'. */
- PREFIX(insert_op2) (set_number_at, laststart, 1
- + 2 * OFFSET_ADDRESS_SIZE, lower_bound, b);
- b += 1 + 2 * OFFSET_ADDRESS_SIZE;
-
- if (upper_bound > 1)
- { /* More than one repetition is allowed, so
- append a backward jump to the `succeed_n'
- that starts this interval.
-
- When we've reached this during matching,
- we'll have matched the interval once, so
- jump back only `upper_bound - 1' times. */
- STORE_JUMP2 (jump_n, b, laststart
- + 2 * OFFSET_ADDRESS_SIZE + 1,
- upper_bound - 1);
- b += 1 + 2 * OFFSET_ADDRESS_SIZE;
-
- /* The location we want to set is the second
- parameter of the `jump_n'; that is `b-2' as
- an absolute address. `laststart' will be
- the `set_number_at' we're about to insert;
- `laststart+3' the number to set, the source
- for the relative address. But we are
- inserting into the middle of the pattern --
- so everything is getting moved up by 5.
- Conclusion: (b - 2) - (laststart + 3) + 5,
- i.e., b - laststart.
-
- We insert this at the beginning of the loop
- so that if we fail during matching, we'll
- reinitialize the bounds. */
- PREFIX(insert_op2) (set_number_at, laststart,
- b - laststart,
- upper_bound - 1, b);
- b += 1 + 2 * OFFSET_ADDRESS_SIZE;
- }
- }
- pending_exact = 0;
- break;
-
- invalid_interval:
- if (!(syntax & RE_INVALID_INTERVAL_ORD))
- FREE_STACK_RETURN (p == pend ? REG_EBRACE : REG_BADBR);
- unfetch_interval:
- /* Match the characters as literals. */
- p = beg_interval;
- c = '{';
- if (syntax & RE_NO_BK_BRACES)
- goto normal_char;
- else
- goto normal_backslash;
- }
-
-#ifdef emacs
- /* There is no way to specify the before_dot and after_dot
- operators. rms says this is ok. --karl */
- case '=':
- BUF_PUSH (at_dot);
- break;
-
- case 's':
- laststart = b;
- PATFETCH (c);
- BUF_PUSH_2 (syntaxspec, syntax_spec_code[c]);
- break;
-
- case 'S':
- laststart = b;
- PATFETCH (c);
- BUF_PUSH_2 (notsyntaxspec, syntax_spec_code[c]);
- break;
-#endif /* emacs */
-
-
- case 'w':
- if (syntax & RE_NO_GNU_OPS)
- goto normal_char;
- laststart = b;
- BUF_PUSH (wordchar);
- break;
-
-
- case 'W':
- if (syntax & RE_NO_GNU_OPS)
- goto normal_char;
- laststart = b;
- BUF_PUSH (notwordchar);
- break;
-
-
- case '<':
- if (syntax & RE_NO_GNU_OPS)
- goto normal_char;
- BUF_PUSH (wordbeg);
- break;
-
- case '>':
- if (syntax & RE_NO_GNU_OPS)
- goto normal_char;
- BUF_PUSH (wordend);
- break;
-
- case 'b':
- if (syntax & RE_NO_GNU_OPS)
- goto normal_char;
- BUF_PUSH (wordbound);
- break;
-
- case 'B':
- if (syntax & RE_NO_GNU_OPS)
- goto normal_char;
- BUF_PUSH (notwordbound);
- break;
-
- case '`':
- if (syntax & RE_NO_GNU_OPS)
- goto normal_char;
- BUF_PUSH (begbuf);
- break;
-
- case '\'':
- if (syntax & RE_NO_GNU_OPS)
- goto normal_char;
- BUF_PUSH (endbuf);
- break;
-
- case '1': case '2': case '3': case '4': case '5':
- case '6': case '7': case '8': case '9':
- if (syntax & RE_NO_BK_REFS)
- goto normal_char;
-
- c1 = c - '0';
-
- if (c1 > regnum)
- FREE_STACK_RETURN (REG_ESUBREG);
-
- /* Can't back reference to a subexpression if inside of it. */
- if (group_in_compile_stack (compile_stack, (regnum_t) c1))
- goto normal_char;
-
- laststart = b;
- BUF_PUSH_2 (duplicate, c1);
- break;
-
-
- case '+':
- case '?':
- if (syntax & RE_BK_PLUS_QM)
- goto handle_plus;
- else
- goto normal_backslash;
-
- default:
- normal_backslash:
- /* You might think it would be useful for \ to mean
- not to translate; but if we don't translate it
- it will never match anything. */
- c = TRANSLATE (c);
- goto normal_char;
- }
- break;
-
-
- default:
- /* Expects the character in `c'. */
- normal_char:
- /* If no exactn currently being built. */
- if (!pending_exact
-#ifdef WCHAR
- /* If last exactn handle binary(or character) and
- new exactn handle character(or binary). */
- || is_exactn_bin != is_binary[p - 1 - pattern]
-#endif /* WCHAR */
-
- /* If last exactn not at current position. */
- || pending_exact + *pending_exact + 1 != b
-
- /* We have only one byte following the exactn for the count. */
- || *pending_exact == (1 << BYTEWIDTH) - 1
-
- /* If followed by a repetition operator. */
- || *p == '*' || *p == '^'
- || ((syntax & RE_BK_PLUS_QM)
- ? *p == '\\' && (p[1] == '+' || p[1] == '?')
- : (*p == '+' || *p == '?'))
- || ((syntax & RE_INTERVALS)
- && ((syntax & RE_NO_BK_BRACES)
- ? *p == '{'
- : (p[0] == '\\' && p[1] == '{'))))
- {
- /* Start building a new exactn. */
-
- laststart = b;
-
-#ifdef WCHAR
- /* Is this exactn binary data or character? */
- is_exactn_bin = is_binary[p - 1 - pattern];
- if (is_exactn_bin)
- BUF_PUSH_2 (exactn_bin, 0);
- else
- BUF_PUSH_2 (exactn, 0);
-#else
- BUF_PUSH_2 (exactn, 0);
-#endif /* WCHAR */
- pending_exact = b - 1;
- }
-
- BUF_PUSH (c);
- (*pending_exact)++;
- break;
- } /* switch (c) */
- } /* while p != pend */
-
-
- /* Through the pattern now. */
-
- if (fixup_alt_jump)
- STORE_JUMP (jump_past_alt, fixup_alt_jump, b);
-
- if (!COMPILE_STACK_EMPTY)
- FREE_STACK_RETURN (REG_EPAREN);
-
- /* If we don't want backtracking, force success
- the first time we reach the end of the compiled pattern. */
- if (syntax & RE_NO_POSIX_BACKTRACKING)
- BUF_PUSH (succeed);
-
-#ifdef WCHAR
- free (pattern);
- free (mbs_offset);
- free (is_binary);
-#endif
- free (compile_stack.stack);
-
- /* We have succeeded; set the length of the buffer. */
-#ifdef WCHAR
- bufp->used = (uintptr_t) b - (uintptr_t) COMPILED_BUFFER_VAR;
-#else
- bufp->used = b - bufp->buffer;
-#endif
-
-#ifdef DEBUG
- if (debug)
- {
- DEBUG_PRINT1 ("\nCompiled pattern: \n");
- PREFIX(print_compiled_pattern) (bufp);
- }
-#endif /* DEBUG */
-
-#ifndef MATCH_MAY_ALLOCATE
- /* Initialize the failure stack to the largest possible stack. This
- isn't necessary unless we're trying to avoid calling alloca in
- the search and match routines. */
- {
- int num_regs = bufp->re_nsub + 1;
-
- /* Since DOUBLE_FAIL_STACK refuses to double only if the current size
- is strictly greater than re_max_failures, the largest possible stack
- is 2 * re_max_failures failure points. */
- if (fail_stack.size < (2 * re_max_failures * MAX_FAILURE_ITEMS))
- {
- fail_stack.size = (2 * re_max_failures * MAX_FAILURE_ITEMS);
-
-# ifdef emacs
- if (! fail_stack.stack)
- fail_stack.stack
- = (PREFIX(fail_stack_elt_t) *) xmalloc (fail_stack.size
- * sizeof (PREFIX(fail_stack_elt_t)));
- else
- fail_stack.stack
- = (PREFIX(fail_stack_elt_t) *) xrealloc (fail_stack.stack,
- (fail_stack.size
- * sizeof (PREFIX(fail_stack_elt_t))));
-# else /* not emacs */
- if (! fail_stack.stack)
- fail_stack.stack
- = (PREFIX(fail_stack_elt_t) *) malloc (fail_stack.size
- * sizeof (PREFIX(fail_stack_elt_t)));
- else
- fail_stack.stack
- = (PREFIX(fail_stack_elt_t) *) realloc (fail_stack.stack,
- (fail_stack.size
- * sizeof (PREFIX(fail_stack_elt_t))));
-# endif /* not emacs */
- }
-
- PREFIX(regex_grow_registers) (num_regs);
- }
-#endif /* not MATCH_MAY_ALLOCATE */
-
- return REG_NOERROR;
-} /* regex_compile */
-
-/* Subroutines for `regex_compile'. */
-
-/* Store OP at LOC followed by two-byte integer parameter ARG. */
-/* ifdef WCHAR, integer parameter is 1 wchar_t. */
-
-static void
-PREFIX(store_op1) (re_opcode_t op, UCHAR_T *loc, int arg)
-{
- *loc = (UCHAR_T) op;
- STORE_NUMBER (loc + 1, arg);
-}
-
-
-/* Like `store_op1', but for two two-byte parameters ARG1 and ARG2. */
-/* ifdef WCHAR, integer parameter is 1 wchar_t. */
-
-static void
-PREFIX(store_op2) (re_opcode_t op, UCHAR_T *loc, int arg1, int arg2)
-{
- *loc = (UCHAR_T) op;
- STORE_NUMBER (loc + 1, arg1);
- STORE_NUMBER (loc + 1 + OFFSET_ADDRESS_SIZE, arg2);
-}
-
-
-/* Copy the bytes from LOC to END to open up three bytes of space at LOC
- for OP followed by two-byte integer parameter ARG. */
-/* ifdef WCHAR, integer parameter is 1 wchar_t. */
-
-static void
-PREFIX(insert_op1) (re_opcode_t op, UCHAR_T *loc, int arg, UCHAR_T *end)
-{
- register UCHAR_T *pfrom = end;
- register UCHAR_T *pto = end + 1 + OFFSET_ADDRESS_SIZE;
-
- while (pfrom != loc)
- *--pto = *--pfrom;
-
- PREFIX(store_op1) (op, loc, arg);
-}
-
-
-/* Like `insert_op1', but for two two-byte parameters ARG1 and ARG2. */
-/* ifdef WCHAR, integer parameter is 1 wchar_t. */
-
-static void
-PREFIX(insert_op2) (re_opcode_t op, UCHAR_T *loc, int arg1,
- int arg2, UCHAR_T *end)
-{
- register UCHAR_T *pfrom = end;
- register UCHAR_T *pto = end + 1 + 2 * OFFSET_ADDRESS_SIZE;
-
- while (pfrom != loc)
- *--pto = *--pfrom;
-
- PREFIX(store_op2) (op, loc, arg1, arg2);
-}
-
-
-/* P points to just after a ^ in PATTERN. Return true if that ^ comes
- after an alternative or a begin-subexpression. We assume there is at
- least one character before the ^. */
-
-static boolean
-PREFIX(at_begline_loc_p) (const CHAR_T *pattern, const CHAR_T *p,
- reg_syntax_t syntax)
-{
- const CHAR_T *prev = p - 2;
- boolean prev_prev_backslash = prev > pattern && prev[-1] == '\\';
-
- return
- /* After a subexpression? */
- (*prev == '(' && (syntax & RE_NO_BK_PARENS || prev_prev_backslash))
- /* After an alternative? */
- || (*prev == '|' && (syntax & RE_NO_BK_VBAR || prev_prev_backslash));
-}
-
-
-/* The dual of at_begline_loc_p. This one is for $. We assume there is
- at least one character after the $, i.e., `P < PEND'. */
-
-static boolean
-PREFIX(at_endline_loc_p) (const CHAR_T *p, const CHAR_T *pend,
- reg_syntax_t syntax)
-{
- const CHAR_T *next = p;
- boolean next_backslash = *next == '\\';
- const CHAR_T *next_next = p + 1 < pend ? p + 1 : 0;
-
- return
- /* Before a subexpression? */
- (syntax & RE_NO_BK_PARENS ? *next == ')'
- : next_backslash && next_next && *next_next == ')')
- /* Before an alternative? */
- || (syntax & RE_NO_BK_VBAR ? *next == '|'
- : next_backslash && next_next && *next_next == '|');
-}
-
-#else /* not INSIDE_RECURSION */
-
-/* Returns true if REGNUM is in one of COMPILE_STACK's elements and
- false if it's not. */
-
-static boolean
-group_in_compile_stack (compile_stack_type compile_stack, regnum_t regnum)
-{
- int this_element;
-
- for (this_element = compile_stack.avail - 1;
- this_element >= 0;
- this_element--)
- if (compile_stack.stack[this_element].regnum == regnum)
- return true;
-
- return false;
-}
-#endif /* not INSIDE_RECURSION */
-
-#ifdef INSIDE_RECURSION
-
-#ifdef WCHAR
-/* This insert space, which size is "num", into the pattern at "loc".
- "end" must point the end of the allocated buffer. */
-static void
-insert_space (int num, CHAR_T *loc, CHAR_T *end)
-{
- register CHAR_T *pto = end;
- register CHAR_T *pfrom = end - num;
-
- while (pfrom >= loc)
- *pto-- = *pfrom--;
-}
-#endif /* WCHAR */
-
-#ifdef WCHAR
-static reg_errcode_t
-wcs_compile_range (CHAR_T range_start_char, const CHAR_T **p_ptr,
- const CHAR_T *pend, RE_TRANSLATE_TYPE translate,
- reg_syntax_t syntax, CHAR_T *b, CHAR_T *char_set)
-{
- const CHAR_T *p = *p_ptr;
- CHAR_T range_start, range_end;
- reg_errcode_t ret;
-# ifdef _LIBC
- uint32_t nrules;
- uint32_t start_val, end_val;
-# endif
- if (p == pend)
- return REG_ERANGE;
-
-# ifdef _LIBC
- nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
- if (nrules != 0)
- {
- const char *collseq = (const char *) _NL_CURRENT(LC_COLLATE,
- _NL_COLLATE_COLLSEQWC);
- const unsigned char *extra = (const unsigned char *)
- _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
-
- if (range_start_char < -1)
- {
- /* range_start is a collating symbol. */
- int32_t *wextra;
- /* Retreive the index and get collation sequence value. */
- wextra = (int32_t*)(extra + char_set[-range_start_char]);
- start_val = wextra[1 + *wextra];
- }
- else
- start_val = collseq_table_lookup(collseq, TRANSLATE(range_start_char));
-
- end_val = collseq_table_lookup (collseq, TRANSLATE (p[0]));
-
- /* Report an error if the range is empty and the syntax prohibits
- this. */
- ret = ((syntax & RE_NO_EMPTY_RANGES)
- && (start_val > end_val))? REG_ERANGE : REG_NOERROR;
-
- /* Insert space to the end of the char_ranges. */
- insert_space(2, b - char_set[5] - 2, b - 1);
- *(b - char_set[5] - 2) = (wchar_t)start_val;
- *(b - char_set[5] - 1) = (wchar_t)end_val;
- char_set[4]++; /* ranges_index */
- }
- else
-# endif
- {
- range_start = (range_start_char >= 0)? TRANSLATE (range_start_char):
- range_start_char;
- range_end = TRANSLATE (p[0]);
- /* Report an error if the range is empty and the syntax prohibits
- this. */
- ret = ((syntax & RE_NO_EMPTY_RANGES)
- && (range_start > range_end))? REG_ERANGE : REG_NOERROR;
-
- /* Insert space to the end of the char_ranges. */
- insert_space(2, b - char_set[5] - 2, b - 1);
- *(b - char_set[5] - 2) = range_start;
- *(b - char_set[5] - 1) = range_end;
- char_set[4]++; /* ranges_index */
- }
- /* Have to increment the pointer into the pattern string, so the
- caller isn't still at the ending character. */
- (*p_ptr)++;
-
- return ret;
-}
-#else /* BYTE */
-/* Read the ending character of a range (in a bracket expression) from the
- uncompiled pattern *P_PTR (which ends at PEND). We assume the
- starting character is in `P[-2]'. (`P[-1]' is the character `-'.)
- Then we set the translation of all bits between the starting and
- ending characters (inclusive) in the compiled pattern B.
-
- Return an error code.
-
- We use these short variable names so we can use the same macros as
- `regex_compile' itself. */
-
-static reg_errcode_t
-byte_compile_range (unsigned int range_start_char, const char **p_ptr,
- const char *pend, RE_TRANSLATE_TYPE translate,
- reg_syntax_t syntax, unsigned char *b)
-{
- unsigned this_char;
- const char *p = *p_ptr;
- reg_errcode_t ret;
-# if _LIBC
- const unsigned char *collseq;
- unsigned int start_colseq;
- unsigned int end_colseq;
-# else
- unsigned end_char;
-# endif
-
- if (p == pend)
- return REG_ERANGE;
-
- /* Have to increment the pointer into the pattern string, so the
- caller isn't still at the ending character. */
- (*p_ptr)++;
-
- /* Report an error if the range is empty and the syntax prohibits this. */
- ret = syntax & RE_NO_EMPTY_RANGES ? REG_ERANGE : REG_NOERROR;
-
-# if _LIBC
- collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE,
- _NL_COLLATE_COLLSEQMB);
-
- start_colseq = collseq[(unsigned char) TRANSLATE (range_start_char)];
- end_colseq = collseq[(unsigned char) TRANSLATE (p[0])];
- for (this_char = 0; this_char <= (unsigned char) -1; ++this_char)
- {
- unsigned int this_colseq = collseq[(unsigned char) TRANSLATE (this_char)];
-
- if (start_colseq <= this_colseq && this_colseq <= end_colseq)
- {
- SET_LIST_BIT (TRANSLATE (this_char));
- ret = REG_NOERROR;
- }
- }
-# else
- /* Here we see why `this_char' has to be larger than an `unsigned
- char' -- we would otherwise go into an infinite loop, since all
- characters <= 0xff. */
- range_start_char = TRANSLATE (range_start_char);
- /* TRANSLATE(p[0]) is casted to char (not unsigned char) in TRANSLATE,
- and some compilers cast it to int implicitly, so following for_loop
- may fall to (almost) infinite loop.
- e.g. If translate[p[0]] = 0xff, end_char may equals to 0xffffffff.
- To avoid this, we cast p[0] to unsigned int and truncate it. */
- end_char = ((unsigned)TRANSLATE(p[0]) & ((1 << BYTEWIDTH) - 1));
-
- for (this_char = range_start_char; this_char <= end_char; ++this_char)
- {
- SET_LIST_BIT (TRANSLATE (this_char));
- ret = REG_NOERROR;
- }
-# endif
-
- return ret;
-}
-#endif /* WCHAR */
-
-/* re_compile_fastmap computes a ``fastmap'' for the compiled pattern in
- BUFP. A fastmap records which of the (1 << BYTEWIDTH) possible
- characters can start a string that matches the pattern. This fastmap
- is used by re_search to skip quickly over impossible starting points.
-
- The caller must supply the address of a (1 << BYTEWIDTH)-byte data
- area as BUFP->fastmap.
-
- We set the `fastmap', `fastmap_accurate', and `can_be_null' fields in
- the pattern buffer.
-
- Returns 0 if we succeed, -2 if an internal error. */
-
-#ifdef WCHAR
-/* local function for re_compile_fastmap.
- truncate wchar_t character to char. */
-static unsigned char truncate_wchar (CHAR_T c);
-
-static unsigned char
-truncate_wchar (CHAR_T c)
-{
- unsigned char buf[MB_CUR_MAX];
- mbstate_t state;
- int retval;
- memset (&state, '\0', sizeof (state));
-# ifdef _LIBC
- retval = __wcrtomb (buf, c, &state);
-# else
- retval = wcrtomb (buf, c, &state);
-# endif
- return retval > 0 ? buf[0] : (unsigned char) c;
-}
-#endif /* WCHAR */
-
-static int
-PREFIX(re_compile_fastmap) (struct re_pattern_buffer *bufp)
-{
- int j, k;
-#ifdef MATCH_MAY_ALLOCATE
- PREFIX(fail_stack_type) fail_stack;
-#endif
-#ifndef REGEX_MALLOC
- char *destination;
-#endif
-
- register char *fastmap = bufp->fastmap;
-
-#ifdef WCHAR
- /* We need to cast pattern to (wchar_t*), because we casted this compiled
- pattern to (char*) in regex_compile. */
- UCHAR_T *pattern = (UCHAR_T*)bufp->buffer;
- register UCHAR_T *pend = (UCHAR_T*) (bufp->buffer + bufp->used);
-#else /* BYTE */
- UCHAR_T *pattern = bufp->buffer;
- register UCHAR_T *pend = pattern + bufp->used;
-#endif /* WCHAR */
- UCHAR_T *p = pattern;
-
-#ifdef REL_ALLOC
- /* This holds the pointer to the failure stack, when
- it is allocated relocatably. */
- fail_stack_elt_t *failure_stack_ptr;
-#endif
-
- /* Assume that each path through the pattern can be null until
- proven otherwise. We set this false at the bottom of switch
- statement, to which we get only if a particular path doesn't
- match the empty string. */
- boolean path_can_be_null = true;
-
- /* We aren't doing a `succeed_n' to begin with. */
- boolean succeed_n_p = false;
-
- assert (fastmap != NULL && p != NULL);
-
- INIT_FAIL_STACK ();
- bzero (fastmap, 1 << BYTEWIDTH); /* Assume nothing's valid. */
- bufp->fastmap_accurate = 1; /* It will be when we're done. */
- bufp->can_be_null = 0;
-
- while (1)
- {
- if (p == pend || *p == (UCHAR_T) succeed)
- {
- /* We have reached the (effective) end of pattern. */
- if (!FAIL_STACK_EMPTY ())
- {
- bufp->can_be_null |= path_can_be_null;
-
- /* Reset for next path. */
- path_can_be_null = true;
-
- p = fail_stack.stack[--fail_stack.avail].pointer;
-
- continue;
- }
- else
- break;
- }
-
- /* We should never be about to go beyond the end of the pattern. */
- assert (p < pend);
-
- switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
- {
-
- /* I guess the idea here is to simply not bother with a fastmap
- if a backreference is used, since it's too hard to figure out
- the fastmap for the corresponding group. Setting
- `can_be_null' stops `re_search_2' from using the fastmap, so
- that is all we do. */
- case duplicate:
- bufp->can_be_null = 1;
- goto done;
-
-
- /* Following are the cases which match a character. These end
- with `break'. */
-
-#ifdef WCHAR
- case exactn:
- fastmap[truncate_wchar(p[1])] = 1;
- break;
-#else /* BYTE */
- case exactn:
- fastmap[p[1]] = 1;
- break;
-#endif /* WCHAR */
-#ifdef MBS_SUPPORT
- case exactn_bin:
- fastmap[p[1]] = 1;
- break;
-#endif
-
-#ifdef WCHAR
- /* It is hard to distinguish fastmap from (multi byte) characters
- which depends on current locale. */
- case charset:
- case charset_not:
- case wordchar:
- case notwordchar:
- bufp->can_be_null = 1;
- goto done;
-#else /* BYTE */
- case charset:
- for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
- if (p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH)))
- fastmap[j] = 1;
- break;
-
-
- case charset_not:
- /* Chars beyond end of map must be allowed. */
- for (j = *p * BYTEWIDTH; j < (1 << BYTEWIDTH); j++)
- fastmap[j] = 1;
-
- for (j = *p++ * BYTEWIDTH - 1; j >= 0; j--)
- if (!(p[j / BYTEWIDTH] & (1 << (j % BYTEWIDTH))))
- fastmap[j] = 1;
- break;
-
-
- case wordchar:
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) == Sword)
- fastmap[j] = 1;
- break;
-
-
- case notwordchar:
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) != Sword)
- fastmap[j] = 1;
- break;
-#endif /* WCHAR */
-
- case anychar:
- {
- int fastmap_newline = fastmap['\n'];
-
- /* `.' matches anything ... */
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- fastmap[j] = 1;
-
- /* ... except perhaps newline. */
- if (!(bufp->syntax & RE_DOT_NEWLINE))
- fastmap['\n'] = fastmap_newline;
-
- /* Return if we have already set `can_be_null'; if we have,
- then the fastmap is irrelevant. Something's wrong here. */
- else if (bufp->can_be_null)
- goto done;
-
- /* Otherwise, have to check alternative paths. */
- break;
- }
-
-#ifdef emacs
- case syntaxspec:
- k = *p++;
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) == (enum syntaxcode) k)
- fastmap[j] = 1;
- break;
-
-
- case notsyntaxspec:
- k = *p++;
- for (j = 0; j < (1 << BYTEWIDTH); j++)
- if (SYNTAX (j) != (enum syntaxcode) k)
- fastmap[j] = 1;
- break;
-
-
- /* All cases after this match the empty string. These end with
- `continue'. */
-
-
- case before_dot:
- case at_dot:
- case after_dot:
- continue;
-#endif /* emacs */
-
-
- case no_op:
- case begline:
- case endline:
- case begbuf:
- case endbuf:
- case wordbound:
- case notwordbound:
- case wordbeg:
- case wordend:
- case push_dummy_failure:
- continue;
-
-
- case jump_n:
- case pop_failure_jump:
- case maybe_pop_jump:
- case jump:
- case jump_past_alt:
- case dummy_failure_jump:
- EXTRACT_NUMBER_AND_INCR (j, p);
- p += j;
- if (j > 0)
- continue;
-
- /* Jump backward implies we just went through the body of a
- loop and matched nothing. Opcode jumped to should be
- `on_failure_jump' or `succeed_n'. Just treat it like an
- ordinary jump. For a * loop, it has pushed its failure
- point already; if so, discard that as redundant. */
- if ((re_opcode_t) *p != on_failure_jump
- && (re_opcode_t) *p != succeed_n)
- continue;
-
- p++;
- EXTRACT_NUMBER_AND_INCR (j, p);
- p += j;
-
- /* If what's on the stack is where we are now, pop it. */
- if (!FAIL_STACK_EMPTY ()
- && fail_stack.stack[fail_stack.avail - 1].pointer == p)
- fail_stack.avail--;
-
- continue;
-
-
- case on_failure_jump:
- case on_failure_keep_string_jump:
- handle_on_failure_jump:
- EXTRACT_NUMBER_AND_INCR (j, p);
-
- /* For some patterns, e.g., `(a?)?', `p+j' here points to the
- end of the pattern. We don't want to push such a point,
- since when we restore it above, entering the switch will
- increment `p' past the end of the pattern. We don't need
- to push such a point since we obviously won't find any more
- fastmap entries beyond `pend'. Such a pattern can match
- the null string, though. */
- if (p + j < pend)
- {
- if (!PUSH_PATTERN_OP (p + j, fail_stack))
- {
- RESET_FAIL_STACK ();
- return -2;
- }
- }
- else
- bufp->can_be_null = 1;
-
- if (succeed_n_p)
- {
- EXTRACT_NUMBER_AND_INCR (k, p); /* Skip the n. */
- succeed_n_p = false;
- }
-
- continue;
-
-
- case succeed_n:
- /* Get to the number of times to succeed. */
- p += OFFSET_ADDRESS_SIZE;
-
- /* Increment p past the n for when k != 0. */
- EXTRACT_NUMBER_AND_INCR (k, p);
- if (k == 0)
- {
- p -= 2 * OFFSET_ADDRESS_SIZE;
- succeed_n_p = true; /* Spaghetti code alert. */
- goto handle_on_failure_jump;
- }
- continue;
-
-
- case set_number_at:
- p += 2 * OFFSET_ADDRESS_SIZE;
- continue;
-
-
- case start_memory:
- case stop_memory:
- p += 2;
- continue;
-
-
- default:
- abort (); /* We have listed all the cases. */
- } /* switch *p++ */
-
- /* Getting here means we have found the possible starting
- characters for one path of the pattern -- and that the empty
- string does not match. We need not follow this path further.
- Instead, look at the next alternative (remembered on the
- stack), or quit if no more. The test at the top of the loop
- does these things. */
- path_can_be_null = false;
- p = pend;
- } /* while p */
-
- /* Set `can_be_null' for the last path (also the first path, if the
- pattern is empty). */
- bufp->can_be_null |= path_can_be_null;
-
- done:
- RESET_FAIL_STACK ();
- return 0;
-}
-
-#else /* not INSIDE_RECURSION */
-
-int
-re_compile_fastmap (struct re_pattern_buffer *bufp)
-{
-# ifdef MBS_SUPPORT
- if (MB_CUR_MAX != 1)
- return wcs_re_compile_fastmap(bufp);
- else
-# endif
- return byte_re_compile_fastmap(bufp);
-} /* re_compile_fastmap */
-#ifdef _LIBC
-weak_alias (__re_compile_fastmap, re_compile_fastmap)
-#endif
-
-
-/* Set REGS to hold NUM_REGS registers, storing them in STARTS and
- ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use
- this memory for recording register information. STARTS and ENDS
- must be allocated using the malloc library routine, and must each
- be at least NUM_REGS * sizeof (regoff_t) bytes long.
-
- If NUM_REGS == 0, then subsequent matches should allocate their own
- register data.
-
- Unless this function is called, the first search or match using
- PATTERN_BUFFER will allocate its own register data, without
- freeing the old data. */
-
-void
-re_set_registers (struct re_pattern_buffer *bufp,
- struct re_registers *regs, unsigned num_regs,
- regoff_t *starts, regoff_t *ends)
-{
- if (num_regs)
- {
- bufp->regs_allocated = REGS_REALLOCATE;
- regs->num_regs = num_regs;
- regs->start = starts;
- regs->end = ends;
- }
- else
- {
- bufp->regs_allocated = REGS_UNALLOCATED;
- regs->num_regs = 0;
- regs->start = regs->end = (regoff_t *) 0;
- }
-}
-#ifdef _LIBC
-weak_alias (__re_set_registers, re_set_registers)
-#endif
-
-/* Searching routines. */
-
-/* Like re_search_2, below, but only one string is specified, and
- doesn't let you say where to stop matching. */
-
-int
-re_search (struct re_pattern_buffer *bufp, const char *string, int size,
- int startpos, int range, struct re_registers *regs)
-{
- return re_search_2 (bufp, NULL, 0, string, size, startpos, range,
- regs, size);
-}
-#ifdef _LIBC
-weak_alias (__re_search, re_search)
-#endif
-
-
-/* Using the compiled pattern in BUFP->buffer, first tries to match the
- virtual concatenation of STRING1 and STRING2, starting first at index
- STARTPOS, then at STARTPOS + 1, and so on.
-
- STRING1 and STRING2 have length SIZE1 and SIZE2, respectively.
-
- RANGE is how far to scan while trying to match. RANGE = 0 means try
- only at STARTPOS; in general, the last start tried is STARTPOS +
- RANGE.
-
- In REGS, return the indices of the virtual concatenation of STRING1
- and STRING2 that matched the entire BUFP->buffer and its contained
- subexpressions.
-
- Do not consider matching one past the index STOP in the virtual
- concatenation of STRING1 and STRING2.
-
- We return either the position in the strings at which the match was
- found, -1 if no match, or -2 if error (such as failure
- stack overflow). */
-
-int
-re_search_2 (struct re_pattern_buffer *bufp, const char *string1, int size1,
- const char *string2, int size2, int startpos, int range,
- struct re_registers *regs, int stop)
-{
-# ifdef MBS_SUPPORT
- if (MB_CUR_MAX != 1)
- return wcs_re_search_2 (bufp, string1, size1, string2, size2, startpos,
- range, regs, stop);
- else
-# endif
- return byte_re_search_2 (bufp, string1, size1, string2, size2, startpos,
- range, regs, stop);
-} /* re_search_2 */
-#ifdef _LIBC
-weak_alias (__re_search_2, re_search_2)
-#endif
-
-#endif /* not INSIDE_RECURSION */
-
-#ifdef INSIDE_RECURSION
-
-#ifdef MATCH_MAY_ALLOCATE
-# define FREE_VAR(var) if (var) REGEX_FREE (var); var = NULL
-#else
-# define FREE_VAR(var) free (var); var = NULL
-#endif
-
-#ifdef WCHAR
-# define MAX_ALLOCA_SIZE 2000
-
-# define FREE_WCS_BUFFERS() \
- do { \
- if (size1 > MAX_ALLOCA_SIZE) \
- { \
- free (wcs_string1); \
- free (mbs_offset1); \
- } \
- else \
- { \
- FREE_VAR (wcs_string1); \
- FREE_VAR (mbs_offset1); \
- } \
- if (size2 > MAX_ALLOCA_SIZE) \
- { \
- free (wcs_string2); \
- free (mbs_offset2); \
- } \
- else \
- { \
- FREE_VAR (wcs_string2); \
- FREE_VAR (mbs_offset2); \
- } \
- } while (0)
-
-#endif
-
-
-static int
-PREFIX(re_search_2) (struct re_pattern_buffer *bufp, const char *string1,
- int size1, const char *string2, int size2,
- int startpos, int range,
- struct re_registers *regs, int stop)
-{
- int val;
- register char *fastmap = bufp->fastmap;
- register RE_TRANSLATE_TYPE translate = bufp->translate;
- int total_size = size1 + size2;
- int endpos = startpos + range;
-#ifdef WCHAR
- /* We need wchar_t* buffers correspond to cstring1, cstring2. */
- wchar_t *wcs_string1 = NULL, *wcs_string2 = NULL;
- /* We need the size of wchar_t buffers correspond to csize1, csize2. */
- int wcs_size1 = 0, wcs_size2 = 0;
- /* offset buffer for optimizatoin. See convert_mbs_to_wc. */
- int *mbs_offset1 = NULL, *mbs_offset2 = NULL;
- /* They hold whether each wchar_t is binary data or not. */
- char *is_binary = NULL;
-#endif /* WCHAR */
-
- /* Check for out-of-range STARTPOS. */
- if (startpos < 0 || startpos > total_size)
- return -1;
-
- /* Fix up RANGE if it might eventually take us outside
- the virtual concatenation of STRING1 and STRING2.
- Make sure we won't move STARTPOS below 0 or above TOTAL_SIZE. */
- if (endpos < 0)
- range = 0 - startpos;
- else if (endpos > total_size)
- range = total_size - startpos;
-
- /* If the search isn't to be a backwards one, don't waste time in a
- search for a pattern that must be anchored. */
- if (bufp->used > 0 && range > 0
- && ((re_opcode_t) bufp->buffer[0] == begbuf
- /* `begline' is like `begbuf' if it cannot match at newlines. */
- || ((re_opcode_t) bufp->buffer[0] == begline
- && !bufp->newline_anchor)))
- {
- if (startpos > 0)
- return -1;
- else
- range = 1;
- }
-
-#ifdef emacs
- /* In a forward search for something that starts with \=.
- don't keep searching past point. */
- if (bufp->used > 0 && (re_opcode_t) bufp->buffer[0] == at_dot && range > 0)
- {
- range = PT - startpos;
- if (range <= 0)
- return -1;
- }
-#endif /* emacs */
-
- /* Update the fastmap now if not correct already. */
- if (fastmap && !bufp->fastmap_accurate)
- if (re_compile_fastmap (bufp) == -2)
- return -2;
-
-#ifdef WCHAR
- /* Allocate wchar_t array for wcs_string1 and wcs_string2 and
- fill them with converted string. */
- if (size1 != 0)
- {
- if (size1 > MAX_ALLOCA_SIZE)
- {
- wcs_string1 = TALLOC (size1 + 1, CHAR_T);
- mbs_offset1 = TALLOC (size1 + 1, int);
- is_binary = TALLOC (size1 + 1, char);
- }
- else
- {
- wcs_string1 = REGEX_TALLOC (size1 + 1, CHAR_T);
- mbs_offset1 = REGEX_TALLOC (size1 + 1, int);
- is_binary = REGEX_TALLOC (size1 + 1, char);
- }
- if (!wcs_string1 || !mbs_offset1 || !is_binary)
- {
- if (size1 > MAX_ALLOCA_SIZE)
- {
- free (wcs_string1);
- free (mbs_offset1);
- free (is_binary);
- }
- else
- {
- FREE_VAR (wcs_string1);
- FREE_VAR (mbs_offset1);
- FREE_VAR (is_binary);
- }
- return -2;
- }
- wcs_size1 = convert_mbs_to_wcs(wcs_string1, string1, size1,
- mbs_offset1, is_binary);
- wcs_string1[wcs_size1] = L'\0'; /* for a sentinel */
- if (size1 > MAX_ALLOCA_SIZE)
- free (is_binary);
- else
- FREE_VAR (is_binary);
- }
- if (size2 != 0)
- {
- if (size2 > MAX_ALLOCA_SIZE)
- {
- wcs_string2 = TALLOC (size2 + 1, CHAR_T);
- mbs_offset2 = TALLOC (size2 + 1, int);
- is_binary = TALLOC (size2 + 1, char);
- }
- else
- {
- wcs_string2 = REGEX_TALLOC (size2 + 1, CHAR_T);
- mbs_offset2 = REGEX_TALLOC (size2 + 1, int);
- is_binary = REGEX_TALLOC (size2 + 1, char);
- }
- if (!wcs_string2 || !mbs_offset2 || !is_binary)
- {
- FREE_WCS_BUFFERS ();
- if (size2 > MAX_ALLOCA_SIZE)
- free (is_binary);
- else
- FREE_VAR (is_binary);
- return -2;
- }
- wcs_size2 = convert_mbs_to_wcs(wcs_string2, string2, size2,
- mbs_offset2, is_binary);
- wcs_string2[wcs_size2] = L'\0'; /* for a sentinel */
- if (size2 > MAX_ALLOCA_SIZE)
- free (is_binary);
- else
- FREE_VAR (is_binary);
- }
-#endif /* WCHAR */
-
-
- /* Loop through the string, looking for a place to start matching. */
- for (;;)
- {
- /* If a fastmap is supplied, skip quickly over characters that
- cannot be the start of a match. If the pattern can match the
- null string, however, we don't need to skip characters; we want
- the first null string. */
- if (fastmap && startpos < total_size && !bufp->can_be_null)
- {
- if (range > 0) /* Searching forwards. */
- {
- register const char *d;
- register int lim = 0;
- int irange = range;
-
- if (startpos < size1 && startpos + range >= size1)
- lim = range - (size1 - startpos);
-
- d = (startpos >= size1 ? string2 - size1 : string1) + startpos;
-
- /* Written out as an if-else to avoid testing `translate'
- inside the loop. */
- if (translate)
- while (range > lim
- && !fastmap[(unsigned char)
- translate[(unsigned char) *d++]])
- range--;
- else
- while (range > lim && !fastmap[(unsigned char) *d++])
- range--;
-
- startpos += irange - range;
- }
- else /* Searching backwards. */
- {
- register CHAR_T c = (size1 == 0 || startpos >= size1
- ? string2[startpos - size1]
- : string1[startpos]);
-
- if (!fastmap[(unsigned char) TRANSLATE (c)])
- goto advance;
- }
- }
-
- /* If can't match the null string, and that's all we have left, fail. */
- if (range >= 0 && startpos == total_size && fastmap
- && !bufp->can_be_null)
- {
-#ifdef WCHAR
- FREE_WCS_BUFFERS ();
-#endif
- return -1;
- }
-
-#ifdef WCHAR
- val = wcs_re_match_2_internal (bufp, string1, size1, string2,
- size2, startpos, regs, stop,
- wcs_string1, wcs_size1,
- wcs_string2, wcs_size2,
- mbs_offset1, mbs_offset2);
-#else /* BYTE */
- val = byte_re_match_2_internal (bufp, string1, size1, string2,
- size2, startpos, regs, stop);
-#endif /* BYTE */
-
-#ifndef REGEX_MALLOC
-# ifdef C_ALLOCA
- alloca (0);
-# endif
-#endif
-
- if (val >= 0)
- {
-#ifdef WCHAR
- FREE_WCS_BUFFERS ();
-#endif
- return startpos;
- }
-
- if (val == -2)
- {
-#ifdef WCHAR
- FREE_WCS_BUFFERS ();
-#endif
- return -2;
- }
-
- advance:
- if (!range)
- break;
- else if (range > 0)
- {
- range--;
- startpos++;
- }
- else
- {
- range++;
- startpos--;
- }
- }
-#ifdef WCHAR
- FREE_WCS_BUFFERS ();
-#endif
- return -1;
-}
-
-#ifdef WCHAR
-/* This converts PTR, a pointer into one of the search wchar_t strings
- `string1' and `string2' into an multibyte string offset from the
- beginning of that string. We use mbs_offset to optimize.
- See convert_mbs_to_wcs. */
-# define POINTER_TO_OFFSET(ptr) \
- (FIRST_STRING_P (ptr) \
- ? ((regoff_t)(mbs_offset1 != NULL? mbs_offset1[(ptr)-string1] : 0)) \
- : ((regoff_t)((mbs_offset2 != NULL? mbs_offset2[(ptr)-string2] : 0) \
- + csize1)))
-#else /* BYTE */
-/* This converts PTR, a pointer into one of the search strings `string1'
- and `string2' into an offset from the beginning of that string. */
-# define POINTER_TO_OFFSET(ptr) \
- (FIRST_STRING_P (ptr) \
- ? ((regoff_t) ((ptr) - string1)) \
- : ((regoff_t) ((ptr) - string2 + size1)))
-#endif /* WCHAR */
-
-/* Macros for dealing with the split strings in re_match_2. */
-
-#define MATCHING_IN_FIRST_STRING (dend == end_match_1)
-
-/* Call before fetching a character with *d. This switches over to
- string2 if necessary. */
-#define PREFETCH() \
- while (d == dend) \
- { \
- /* End of string2 => fail. */ \
- if (dend == end_match_2) \
- goto fail; \
- /* End of string1 => advance to string2. */ \
- d = string2; \
- dend = end_match_2; \
- }
-
-/* Test if at very beginning or at very end of the virtual concatenation
- of `string1' and `string2'. If only one string, it's `string2'. */
-#define AT_STRINGS_BEG(d) ((d) == (size1 ? string1 : string2) || !size2)
-#define AT_STRINGS_END(d) ((d) == end2)
-
-
-/* Test if D points to a character which is word-constituent. We have
- two special cases to check for: if past the end of string1, look at
- the first character in string2; and if before the beginning of
- string2, look at the last character in string1. */
-#ifdef WCHAR
-/* Use internationalized API instead of SYNTAX. */
-# define WORDCHAR_P(d) \
- (iswalnum ((wint_t)((d) == end1 ? *string2 \
- : (d) == string2 - 1 ? *(end1 - 1) : *(d))) != 0 \
- || ((d) == end1 ? *string2 \
- : (d) == string2 - 1 ? *(end1 - 1) : *(d)) == L'_')
-#else /* BYTE */
-# define WORDCHAR_P(d) \
- (SYNTAX ((d) == end1 ? *string2 \
- : (d) == string2 - 1 ? *(end1 - 1) : *(d)) \
- == Sword)
-#endif /* WCHAR */
-
-/* Disabled due to a compiler bug -- see comment at case wordbound */
-#if 0
-/* Test if the character before D and the one at D differ with respect
- to being word-constituent. */
-#define AT_WORD_BOUNDARY(d) \
- (AT_STRINGS_BEG (d) || AT_STRINGS_END (d) \
- || WORDCHAR_P (d - 1) != WORDCHAR_P (d))
-#endif
-
-/* Free everything we malloc. */
-#ifdef MATCH_MAY_ALLOCATE
-# ifdef WCHAR
-# define FREE_VARIABLES() \
- do { \
- REGEX_FREE_STACK (fail_stack.stack); \
- FREE_VAR (regstart); \
- FREE_VAR (regend); \
- FREE_VAR (old_regstart); \
- FREE_VAR (old_regend); \
- FREE_VAR (best_regstart); \
- FREE_VAR (best_regend); \
- FREE_VAR (reg_info); \
- FREE_VAR (reg_dummy); \
- FREE_VAR (reg_info_dummy); \
- if (!cant_free_wcs_buf) \
- { \
- FREE_VAR (string1); \
- FREE_VAR (string2); \
- FREE_VAR (mbs_offset1); \
- FREE_VAR (mbs_offset2); \
- } \
- } while (0)
-# else /* BYTE */
-# define FREE_VARIABLES() \
- do { \
- REGEX_FREE_STACK (fail_stack.stack); \
- FREE_VAR (regstart); \
- FREE_VAR (regend); \
- FREE_VAR (old_regstart); \
- FREE_VAR (old_regend); \
- FREE_VAR (best_regstart); \
- FREE_VAR (best_regend); \
- FREE_VAR (reg_info); \
- FREE_VAR (reg_dummy); \
- FREE_VAR (reg_info_dummy); \
- } while (0)
-# endif /* WCHAR */
-#else
-# ifdef WCHAR
-# define FREE_VARIABLES() \
- do { \
- if (!cant_free_wcs_buf) \
- { \
- FREE_VAR (string1); \
- FREE_VAR (string2); \
- FREE_VAR (mbs_offset1); \
- FREE_VAR (mbs_offset2); \
- } \
- } while (0)
-# else /* BYTE */
-# define FREE_VARIABLES() ((void)0) /* Do nothing! But inhibit gcc warning. */
-# endif /* WCHAR */
-#endif /* not MATCH_MAY_ALLOCATE */
-
-/* These values must meet several constraints. They must not be valid
- register values; since we have a limit of 255 registers (because
- we use only one byte in the pattern for the register number), we can
- use numbers larger than 255. They must differ by 1, because of
- NUM_FAILURE_ITEMS above. And the value for the lowest register must
- be larger than the value for the highest register, so we do not try
- to actually save any registers when none are active. */
-#define NO_HIGHEST_ACTIVE_REG (1 << BYTEWIDTH)
-#define NO_LOWEST_ACTIVE_REG (NO_HIGHEST_ACTIVE_REG + 1)
-
-#else /* not INSIDE_RECURSION */
-/* Matching routines. */
-
-#ifndef emacs /* Emacs never uses this. */
-/* re_match is like re_match_2 except it takes only a single string. */
-
-int
-re_match (struct re_pattern_buffer *bufp, const char *string,
- int size, int pos, struct re_registers *regs)
-{
- int result;
-# ifdef MBS_SUPPORT
- if (MB_CUR_MAX != 1)
- result = wcs_re_match_2_internal (bufp, NULL, 0, string, size,
- pos, regs, size,
- NULL, 0, NULL, 0, NULL, NULL);
- else
-# endif
- result = byte_re_match_2_internal (bufp, NULL, 0, string, size,
- pos, regs, size);
-# ifndef REGEX_MALLOC
-# ifdef C_ALLOCA
- alloca (0);
-# endif
-# endif
- return result;
-}
-# ifdef _LIBC
-weak_alias (__re_match, re_match)
-# endif
-#endif /* not emacs */
-
-#endif /* not INSIDE_RECURSION */
-
-#ifdef INSIDE_RECURSION
-static boolean PREFIX(group_match_null_string_p) (UCHAR_T **p,
- UCHAR_T *end,
- PREFIX(register_info_type) *reg_info);
-static boolean PREFIX(alt_match_null_string_p) (UCHAR_T *p,
- UCHAR_T *end,
- PREFIX(register_info_type) *reg_info);
-static boolean PREFIX(common_op_match_null_string_p) (UCHAR_T **p,
- UCHAR_T *end,
- PREFIX(register_info_type) *reg_info);
-static int PREFIX(bcmp_translate) (const CHAR_T *s1, const CHAR_T *s2,
- int len, char *translate);
-#else /* not INSIDE_RECURSION */
-
-/* re_match_2 matches the compiled pattern in BUFP against the
- the (virtual) concatenation of STRING1 and STRING2 (of length SIZE1
- and SIZE2, respectively). We start matching at POS, and stop
- matching at STOP.
-
- If REGS is non-null and the `no_sub' field of BUFP is nonzero, we
- store offsets for the substring each group matched in REGS. See the
- documentation for exactly how many groups we fill.
-
- We return -1 if no match, -2 if an internal error (such as the
- failure stack overflowing). Otherwise, we return the length of the
- matched substring. */
-
-int
-re_match_2 (struct re_pattern_buffer *bufp, const char *string1, int size1,
- const char *string2, int size2, int pos,
- struct re_registers *regs, int stop)
-{
- int result;
-# ifdef MBS_SUPPORT
- if (MB_CUR_MAX != 1)
- result = wcs_re_match_2_internal (bufp, string1, size1, string2, size2,
- pos, regs, stop,
- NULL, 0, NULL, 0, NULL, NULL);
- else
-# endif
- result = byte_re_match_2_internal (bufp, string1, size1, string2, size2,
- pos, regs, stop);
-
-#ifndef REGEX_MALLOC
-# ifdef C_ALLOCA
- alloca (0);
-# endif
-#endif
- return result;
-}
-#ifdef _LIBC
-weak_alias (__re_match_2, re_match_2)
-#endif
-
-#endif /* not INSIDE_RECURSION */
-
-#ifdef INSIDE_RECURSION
-
-#ifdef WCHAR
-static int count_mbs_length (int *, int);
-
-/* This check the substring (from 0, to length) of the multibyte string,
- to which offset_buffer correspond. And count how many wchar_t_characters
- the substring occupy. We use offset_buffer to optimization.
- See convert_mbs_to_wcs. */
-
-static int
-count_mbs_length(int *offset_buffer, int length)
-{
- int upper, lower;
-
- /* Check whether the size is valid. */
- if (length < 0)
- return -1;
-
- if (offset_buffer == NULL)
- return 0;
-
- /* If there are no multibyte character, offset_buffer[i] == i.
- Optmize for this case. */
- if (offset_buffer[length] == length)
- return length;
-
- /* Set up upper with length. (because for all i, offset_buffer[i] >= i) */
- upper = length;
- lower = 0;
-
- while (true)
- {
- int middle = (lower + upper) / 2;
- if (middle == lower || middle == upper)
- break;
- if (offset_buffer[middle] > length)
- upper = middle;
- else if (offset_buffer[middle] < length)
- lower = middle;
- else
- return middle;
- }
-
- return -1;
-}
-#endif /* WCHAR */
-
-/* This is a separate function so that we can force an alloca cleanup
- afterwards. */
-#ifdef WCHAR
-static int
-wcs_re_match_2_internal (struct re_pattern_buffer *bufp,
- const char *cstring1, int csize1,
- const char *cstring2, int csize2,
- int pos,
- struct re_registers *regs,
- int stop,
- /* string1 == string2 == NULL means string1/2, size1/2 and
- mbs_offset1/2 need seting up in this function. */
- /* We need wchar_t* buffers correspond to cstring1, cstring2. */
- wchar_t *string1, int size1,
- wchar_t *string2, int size2,
- /* offset buffer for optimizatoin. See convert_mbs_to_wc. */
- int *mbs_offset1, int *mbs_offset2)
-#else /* BYTE */
-static int
-byte_re_match_2_internal (struct re_pattern_buffer *bufp,
- const char *string1, int size1,
- const char *string2, int size2,
- int pos,
- struct re_registers *regs, int stop)
-#endif /* BYTE */
-{
- /* General temporaries. */
- int mcnt;
- UCHAR_T *p1;
-#ifdef WCHAR
- /* They hold whether each wchar_t is binary data or not. */
- char *is_binary = NULL;
- /* If true, we can't free string1/2, mbs_offset1/2. */
- int cant_free_wcs_buf = 1;
-#endif /* WCHAR */
-
- /* Just past the end of the corresponding string. */
- const CHAR_T *end1, *end2;
-
- /* Pointers into string1 and string2, just past the last characters in
- each to consider matching. */
- const CHAR_T *end_match_1, *end_match_2;
-
- /* Where we are in the data, and the end of the current string. */
- const CHAR_T *d, *dend;
-
- /* Where we are in the pattern, and the end of the pattern. */
-#ifdef WCHAR
- UCHAR_T *pattern, *p;
- register UCHAR_T *pend;
-#else /* BYTE */
- UCHAR_T *p = bufp->buffer;
- register UCHAR_T *pend = p + bufp->used;
-#endif /* WCHAR */
-
- /* Mark the opcode just after a start_memory, so we can test for an
- empty subpattern when we get to the stop_memory. */
- UCHAR_T *just_past_start_mem = 0;
-
- /* We use this to map every character in the string. */
- RE_TRANSLATE_TYPE translate = bufp->translate;
-
- /* Failure point stack. Each place that can handle a failure further
- down the line pushes a failure point on this stack. It consists of
- restart, regend, and reg_info for all registers corresponding to
- the subexpressions we're currently inside, plus the number of such
- registers, and, finally, two char *'s. The first char * is where
- to resume scanning the pattern; the second one is where to resume
- scanning the strings. If the latter is zero, the failure point is
- a ``dummy''; if a failure happens and the failure point is a dummy,
- it gets discarded and the next next one is tried. */
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */
- PREFIX(fail_stack_type) fail_stack;
-#endif
-#ifdef DEBUG
- static unsigned failure_id;
- unsigned nfailure_points_pushed = 0, nfailure_points_popped = 0;
-#endif
-
-#ifdef REL_ALLOC
- /* This holds the pointer to the failure stack, when
- it is allocated relocatably. */
- fail_stack_elt_t *failure_stack_ptr;
-#endif
-
- /* We fill all the registers internally, independent of what we
- return, for use in backreferences. The number here includes
- an element for register zero. */
- size_t num_regs = bufp->re_nsub + 1;
-
- /* The currently active registers. */
- active_reg_t lowest_active_reg = NO_LOWEST_ACTIVE_REG;
- active_reg_t highest_active_reg = NO_HIGHEST_ACTIVE_REG;
-
- /* Information on the contents of registers. These are pointers into
- the input strings; they record just what was matched (on this
- attempt) by a subexpression part of the pattern, that is, the
- regnum-th regstart pointer points to where in the pattern we began
- matching and the regnum-th regend points to right after where we
- stopped matching the regnum-th subexpression. (The zeroth register
- keeps track of what the whole pattern matches.) */
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
- const CHAR_T **regstart, **regend;
-#endif
-
- /* If a group that's operated upon by a repetition operator fails to
- match anything, then the register for its start will need to be
- restored because it will have been set to wherever in the string we
- are when we last see its open-group operator. Similarly for a
- register's end. */
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
- const CHAR_T **old_regstart, **old_regend;
-#endif
-
- /* The is_active field of reg_info helps us keep track of which (possibly
- nested) subexpressions we are currently in. The matched_something
- field of reg_info[reg_num] helps us tell whether or not we have
- matched any of the pattern so far this time through the reg_num-th
- subexpression. These two fields get reset each time through any
- loop their register is in. */
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, this is global. */
- PREFIX(register_info_type) *reg_info;
-#endif
-
- /* The following record the register info as found in the above
- variables when we find a match better than any we've seen before.
- This happens as we backtrack through the failure points, which in
- turn happens only if we have not yet matched the entire string. */
- unsigned best_regs_set = false;
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
- const CHAR_T **best_regstart, **best_regend;
-#endif
-
- /* Logically, this is `best_regend[0]'. But we don't want to have to
- allocate space for that if we're not allocating space for anything
- else (see below). Also, we never need info about register 0 for
- any of the other register vectors, and it seems rather a kludge to
- treat `best_regend' differently than the rest. So we keep track of
- the end of the best match so far in a separate variable. We
- initialize this to NULL so that when we backtrack the first time
- and need to test it, it's not garbage. */
- const CHAR_T *match_end = NULL;
-
- /* This helps SET_REGS_MATCHED avoid doing redundant work. */
- int set_regs_matched_done = 0;
-
- /* Used when we pop values we don't care about. */
-#ifdef MATCH_MAY_ALLOCATE /* otherwise, these are global. */
- const CHAR_T **reg_dummy;
- PREFIX(register_info_type) *reg_info_dummy;
-#endif
-
-#ifdef DEBUG
- /* Counts the total number of registers pushed. */
- unsigned num_regs_pushed = 0;
-#endif
-
- DEBUG_PRINT1 ("\n\nEntering re_match_2.\n");
-
- INIT_FAIL_STACK ();
-
-#ifdef MATCH_MAY_ALLOCATE
- /* Do not bother to initialize all the register variables if there are
- no groups in the pattern, as it takes a fair amount of time. If
- there are groups, we include space for register 0 (the whole
- pattern), even though we never use it, since it simplifies the
- array indexing. We should fix this. */
- if (bufp->re_nsub)
- {
- regstart = REGEX_TALLOC (num_regs, const CHAR_T *);
- regend = REGEX_TALLOC (num_regs, const CHAR_T *);
- old_regstart = REGEX_TALLOC (num_regs, const CHAR_T *);
- old_regend = REGEX_TALLOC (num_regs, const CHAR_T *);
- best_regstart = REGEX_TALLOC (num_regs, const CHAR_T *);
- best_regend = REGEX_TALLOC (num_regs, const CHAR_T *);
- reg_info = REGEX_TALLOC (num_regs, PREFIX(register_info_type));
- reg_dummy = REGEX_TALLOC (num_regs, const CHAR_T *);
- reg_info_dummy = REGEX_TALLOC (num_regs, PREFIX(register_info_type));
-
- if (!(regstart && regend && old_regstart && old_regend && reg_info
- && best_regstart && best_regend && reg_dummy && reg_info_dummy))
- {
- FREE_VARIABLES ();
- return -2;
- }
- }
- else
- {
- /* We must initialize all our variables to NULL, so that
- `FREE_VARIABLES' doesn't try to free them. */
- regstart = regend = old_regstart = old_regend = best_regstart
- = best_regend = reg_dummy = NULL;
- reg_info = reg_info_dummy = (PREFIX(register_info_type) *) NULL;
- }
-#endif /* MATCH_MAY_ALLOCATE */
-
- /* The starting position is bogus. */
-#ifdef WCHAR
- if (pos < 0 || pos > csize1 + csize2)
-#else /* BYTE */
- if (pos < 0 || pos > size1 + size2)
-#endif
- {
- FREE_VARIABLES ();
- return -1;
- }
-
-#ifdef WCHAR
- /* Allocate wchar_t array for string1 and string2 and
- fill them with converted string. */
- if (string1 == NULL && string2 == NULL)
- {
- /* We need seting up buffers here. */
-
- /* We must free wcs buffers in this function. */
- cant_free_wcs_buf = 0;
-
- if (csize1 != 0)
- {
- string1 = REGEX_TALLOC (csize1 + 1, CHAR_T);
- mbs_offset1 = REGEX_TALLOC (csize1 + 1, int);
- is_binary = REGEX_TALLOC (csize1 + 1, char);
- if (!string1 || !mbs_offset1 || !is_binary)
- {
- FREE_VAR (string1);
- FREE_VAR (mbs_offset1);
- FREE_VAR (is_binary);
- return -2;
- }
- }
- if (csize2 != 0)
- {
- string2 = REGEX_TALLOC (csize2 + 1, CHAR_T);
- mbs_offset2 = REGEX_TALLOC (csize2 + 1, int);
- is_binary = REGEX_TALLOC (csize2 + 1, char);
- if (!string2 || !mbs_offset2 || !is_binary)
- {
- FREE_VAR (string1);
- FREE_VAR (mbs_offset1);
- FREE_VAR (string2);
- FREE_VAR (mbs_offset2);
- FREE_VAR (is_binary);
- return -2;
- }
- size2 = convert_mbs_to_wcs(string2, cstring2, csize2,
- mbs_offset2, is_binary);
- string2[size2] = L'\0'; /* for a sentinel */
- FREE_VAR (is_binary);
- }
- }
-
- /* We need to cast pattern to (wchar_t*), because we casted this compiled
- pattern to (char*) in regex_compile. */
- p = pattern = (CHAR_T*)bufp->buffer;
- pend = (CHAR_T*)(bufp->buffer + bufp->used);
-
-#endif /* WCHAR */
-
- /* Initialize subexpression text positions to -1 to mark ones that no
- start_memory/stop_memory has been seen for. Also initialize the
- register information struct. */
- for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
- {
- regstart[mcnt] = regend[mcnt]
- = old_regstart[mcnt] = old_regend[mcnt] = REG_UNSET_VALUE;
-
- REG_MATCH_NULL_STRING_P (reg_info[mcnt]) = MATCH_NULL_UNSET_VALUE;
- IS_ACTIVE (reg_info[mcnt]) = 0;
- MATCHED_SOMETHING (reg_info[mcnt]) = 0;
- EVER_MATCHED_SOMETHING (reg_info[mcnt]) = 0;
- }
-
- /* We move `string1' into `string2' if the latter's empty -- but not if
- `string1' is null. */
- if (size2 == 0 && string1 != NULL)
- {
- string2 = string1;
- size2 = size1;
- string1 = 0;
- size1 = 0;
-#ifdef WCHAR
- mbs_offset2 = mbs_offset1;
- csize2 = csize1;
- mbs_offset1 = NULL;
- csize1 = 0;
-#endif
- }
- end1 = string1 + size1;
- end2 = string2 + size2;
-
- /* Compute where to stop matching, within the two strings. */
-#ifdef WCHAR
- if (stop <= csize1)
- {
- mcnt = count_mbs_length(mbs_offset1, stop);
- end_match_1 = string1 + mcnt;
- end_match_2 = string2;
- }
- else
- {
- if (stop > csize1 + csize2)
- stop = csize1 + csize2;
- end_match_1 = end1;
- mcnt = count_mbs_length(mbs_offset2, stop-csize1);
- end_match_2 = string2 + mcnt;
- }
- if (mcnt < 0)
- { /* count_mbs_length return error. */
- FREE_VARIABLES ();
- return -1;
- }
-#else
- if (stop <= size1)
- {
- end_match_1 = string1 + stop;
- end_match_2 = string2;
- }
- else
- {
- end_match_1 = end1;
- end_match_2 = string2 + stop - size1;
- }
-#endif /* WCHAR */
-
- /* `p' scans through the pattern as `d' scans through the data.
- `dend' is the end of the input string that `d' points within. `d'
- is advanced into the following input string whenever necessary, but
- this happens before fetching; therefore, at the beginning of the
- loop, `d' can be pointing at the end of a string, but it cannot
- equal `string2'. */
-#ifdef WCHAR
- if (size1 > 0 && pos <= csize1)
- {
- mcnt = count_mbs_length(mbs_offset1, pos);
- d = string1 + mcnt;
- dend = end_match_1;
- }
- else
- {
- mcnt = count_mbs_length(mbs_offset2, pos-csize1);
- d = string2 + mcnt;
- dend = end_match_2;
- }
-
- if (mcnt < 0)
- { /* count_mbs_length return error. */
- FREE_VARIABLES ();
- return -1;
- }
-#else
- if (size1 > 0 && pos <= size1)
- {
- d = string1 + pos;
- dend = end_match_1;
- }
- else
- {
- d = string2 + pos - size1;
- dend = end_match_2;
- }
-#endif /* WCHAR */
-
- DEBUG_PRINT1 ("The compiled pattern is:\n");
- DEBUG_PRINT_COMPILED_PATTERN (bufp, p, pend);
- DEBUG_PRINT1 ("The string to match is: `");
- DEBUG_PRINT_DOUBLE_STRING (d, string1, size1, string2, size2);
- DEBUG_PRINT1 ("'\n");
-
- /* This loops over pattern commands. It exits by returning from the
- function if the match is complete, or it drops through if the match
- fails at this starting point in the input data. */
- for (;;)
- {
-#ifdef _LIBC
- DEBUG_PRINT2 ("\n%p: ", p);
-#else
- DEBUG_PRINT2 ("\n0x%x: ", p);
-#endif
-
- if (p == pend)
- { /* End of pattern means we might have succeeded. */
- DEBUG_PRINT1 ("end of pattern ... ");
-
- /* If we haven't matched the entire string, and we want the
- longest match, try backtracking. */
- if (d != end_match_2)
- {
- /* 1 if this match ends in the same string (string1 or string2)
- as the best previous match. */
- boolean same_str_p;
-
- /* 1 if this match is the best seen so far. */
- boolean best_match_p;
-
- same_str_p = (FIRST_STRING_P (match_end)
- == MATCHING_IN_FIRST_STRING);
-
- /* AIX compiler got confused when this was combined
- with the previous declaration. */
- if (same_str_p)
- best_match_p = d > match_end;
- else
- best_match_p = !MATCHING_IN_FIRST_STRING;
-
- DEBUG_PRINT1 ("backtracking.\n");
-
- if (!FAIL_STACK_EMPTY ())
- { /* More failure points to try. */
-
- /* If exceeds best match so far, save it. */
- if (!best_regs_set || best_match_p)
- {
- best_regs_set = true;
- match_end = d;
-
- DEBUG_PRINT1 ("\nSAVING match as best so far.\n");
-
- for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
- {
- best_regstart[mcnt] = regstart[mcnt];
- best_regend[mcnt] = regend[mcnt];
- }
- }
- goto fail;
- }
-
- /* If no failure points, don't restore garbage. And if
- last match is real best match, don't restore second
- best one. */
- else if (best_regs_set && !best_match_p)
- {
- restore_best_regs:
- /* Restore best match. It may happen that `dend ==
- end_match_1' while the restored d is in string2.
- For example, the pattern `x.*y.*z' against the
- strings `x-' and `y-z-', if the two strings are
- not consecutive in memory. */
- DEBUG_PRINT1 ("Restoring best registers.\n");
-
- d = match_end;
- dend = ((d >= string1 && d <= end1)
- ? end_match_1 : end_match_2);
-
- for (mcnt = 1; (unsigned) mcnt < num_regs; mcnt++)
- {
- regstart[mcnt] = best_regstart[mcnt];
- regend[mcnt] = best_regend[mcnt];
- }
- }
- } /* d != end_match_2 */
-
- succeed_label:
- DEBUG_PRINT1 ("Accepting match.\n");
- /* If caller wants register contents data back, do it. */
- if (regs && !bufp->no_sub)
- {
- /* Have the register data arrays been allocated? */
- if (bufp->regs_allocated == REGS_UNALLOCATED)
- { /* No. So allocate them with malloc. We need one
- extra element beyond `num_regs' for the `-1' marker
- GNU code uses. */
- regs->num_regs = MAX (RE_NREGS, num_regs + 1);
- regs->start = TALLOC (regs->num_regs, regoff_t);
- regs->end = TALLOC (regs->num_regs, regoff_t);
- if (regs->start == NULL || regs->end == NULL)
- {
- FREE_VARIABLES ();
- return -2;
- }
- bufp->regs_allocated = REGS_REALLOCATE;
- }
- else if (bufp->regs_allocated == REGS_REALLOCATE)
- { /* Yes. If we need more elements than were already
- allocated, reallocate them. If we need fewer, just
- leave it alone. */
- if (regs->num_regs < num_regs + 1)
- {
- regs->num_regs = num_regs + 1;
- RETALLOC (regs->start, regs->num_regs, regoff_t);
- RETALLOC (regs->end, regs->num_regs, regoff_t);
- if (regs->start == NULL || regs->end == NULL)
- {
- FREE_VARIABLES ();
- return -2;
- }
- }
- }
- else
- {
- /* These braces fend off a "empty body in an else-statement"
- warning under GCC when assert expands to nothing. */
- assert (bufp->regs_allocated == REGS_FIXED);
- }
-
- /* Convert the pointer data in `regstart' and `regend' to
- indices. Register zero has to be set differently,
- since we haven't kept track of any info for it. */
- if (regs->num_regs > 0)
- {
- regs->start[0] = pos;
-#ifdef WCHAR
- if (MATCHING_IN_FIRST_STRING)
- regs->end[0] = mbs_offset1 != NULL ?
- mbs_offset1[d-string1] : 0;
- else
- regs->end[0] = csize1 + (mbs_offset2 != NULL ?
- mbs_offset2[d-string2] : 0);
-#else
- regs->end[0] = (MATCHING_IN_FIRST_STRING
- ? ((regoff_t) (d - string1))
- : ((regoff_t) (d - string2 + size1)));
-#endif /* WCHAR */
- }
-
- /* Go through the first `min (num_regs, regs->num_regs)'
- registers, since that is all we initialized. */
- for (mcnt = 1; (unsigned) mcnt < MIN (num_regs, regs->num_regs);
- mcnt++)
- {
- if (REG_UNSET (regstart[mcnt]) || REG_UNSET (regend[mcnt]))
- regs->start[mcnt] = regs->end[mcnt] = -1;
- else
- {
- regs->start[mcnt]
- = (regoff_t) POINTER_TO_OFFSET (regstart[mcnt]);
- regs->end[mcnt]
- = (regoff_t) POINTER_TO_OFFSET (regend[mcnt]);
- }
- }
-
- /* If the regs structure we return has more elements than
- were in the pattern, set the extra elements to -1. If
- we (re)allocated the registers, this is the case,
- because we always allocate enough to have at least one
- -1 at the end. */
- for (mcnt = num_regs; (unsigned) mcnt < regs->num_regs; mcnt++)
- regs->start[mcnt] = regs->end[mcnt] = -1;
- } /* regs && !bufp->no_sub */
-
- DEBUG_PRINT4 ("%u failure points pushed, %u popped (%u remain).\n",
- nfailure_points_pushed, nfailure_points_popped,
- nfailure_points_pushed - nfailure_points_popped);
- DEBUG_PRINT2 ("%u registers pushed.\n", num_regs_pushed);
-
-#ifdef WCHAR
- if (MATCHING_IN_FIRST_STRING)
- mcnt = mbs_offset1 != NULL ? mbs_offset1[d-string1] : 0;
- else
- mcnt = (mbs_offset2 != NULL ? mbs_offset2[d-string2] : 0) +
- csize1;
- mcnt -= pos;
-#else
- mcnt = d - pos - (MATCHING_IN_FIRST_STRING
- ? string1
- : string2 - size1);
-#endif /* WCHAR */
-
- DEBUG_PRINT2 ("Returning %d from re_match_2.\n", mcnt);
-
- FREE_VARIABLES ();
- return mcnt;
- }
-
- /* Otherwise match next pattern command. */
- switch (SWITCH_ENUM_CAST ((re_opcode_t) *p++))
- {
- /* Ignore these. Used to ignore the n of succeed_n's which
- currently have n == 0. */
- case no_op:
- DEBUG_PRINT1 ("EXECUTING no_op.\n");
- break;
-
- case succeed:
- DEBUG_PRINT1 ("EXECUTING succeed.\n");
- goto succeed_label;
-
- /* Match the next n pattern characters exactly. The following
- byte in the pattern defines n, and the n bytes after that
- are the characters to match. */
- case exactn:
-#ifdef MBS_SUPPORT
- case exactn_bin:
-#endif
- mcnt = *p++;
- DEBUG_PRINT2 ("EXECUTING exactn %d.\n", mcnt);
-
- /* This is written out as an if-else so we don't waste time
- testing `translate' inside the loop. */
- if (translate)
- {
- do
- {
- PREFETCH ();
-#ifdef WCHAR
- if (*d <= 0xff)
- {
- if ((UCHAR_T) translate[(unsigned char) *d++]
- != (UCHAR_T) *p++)
- goto fail;
- }
- else
- {
- if (*d++ != (CHAR_T) *p++)
- goto fail;
- }
-#else
- if ((UCHAR_T) translate[(unsigned char) *d++]
- != (UCHAR_T) *p++)
- goto fail;
-#endif /* WCHAR */
- }
- while (--mcnt);
- }
- else
- {
- do
- {
- PREFETCH ();
- if (*d++ != (CHAR_T) *p++) goto fail;
- }
- while (--mcnt);
- }
- SET_REGS_MATCHED ();
- break;
-
-
- /* Match any character except possibly a newline or a null. */
- case anychar:
- DEBUG_PRINT1 ("EXECUTING anychar.\n");
-
- PREFETCH ();
-
- if ((!(bufp->syntax & RE_DOT_NEWLINE) && TRANSLATE (*d) == '\n')
- || (bufp->syntax & RE_DOT_NOT_NULL && TRANSLATE (*d) == '\000'))
- goto fail;
-
- SET_REGS_MATCHED ();
- DEBUG_PRINT2 (" Matched `%ld'.\n", (long int) *d);
- d++;
- break;
-
-
- case charset:
- case charset_not:
- {
- register UCHAR_T c;
-#ifdef WCHAR
- unsigned int i, char_class_length, coll_symbol_length,
- equiv_class_length, ranges_length, chars_length, length;
- CHAR_T *workp, *workp2, *charset_top;
-#define WORK_BUFFER_SIZE 128
- CHAR_T str_buf[WORK_BUFFER_SIZE];
-# ifdef _LIBC
- uint32_t nrules;
-# endif /* _LIBC */
-#endif /* WCHAR */
- boolean negate = (re_opcode_t) *(p - 1) == charset_not;
-
- DEBUG_PRINT2 ("EXECUTING charset%s.\n", negate ? "_not" : "");
- PREFETCH ();
- c = TRANSLATE (*d); /* The character to match. */
-#ifdef WCHAR
-# ifdef _LIBC
- nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES);
-# endif /* _LIBC */
- charset_top = p - 1;
- char_class_length = *p++;
- coll_symbol_length = *p++;
- equiv_class_length = *p++;
- ranges_length = *p++;
- chars_length = *p++;
- /* p points charset[6], so the address of the next instruction
- (charset[l+m+n+2o+k+p']) equals p[l+m+n+2*o+p'],
- where l=length of char_classes, m=length of collating_symbol,
- n=equivalence_class, o=length of char_range,
- p'=length of character. */
- workp = p;
- /* Update p to indicate the next instruction. */
- p += char_class_length + coll_symbol_length+ equiv_class_length +
- 2*ranges_length + chars_length;
-
- /* match with char_class? */
- for (i = 0; i < char_class_length ; i += CHAR_CLASS_SIZE)
- {
- wctype_t wctype;
- uintptr_t alignedp = ((uintptr_t)workp
- + __alignof__(wctype_t) - 1)
- & ~(uintptr_t)(__alignof__(wctype_t) - 1);
- wctype = *((wctype_t*)alignedp);
- workp += CHAR_CLASS_SIZE;
-# ifdef _LIBC
- if (__iswctype((wint_t)c, wctype))
- goto char_set_matched;
-# else
- if (iswctype((wint_t)c, wctype))
- goto char_set_matched;
-# endif
- }
-
- /* match with collating_symbol? */
-# ifdef _LIBC
- if (nrules != 0)
- {
- const unsigned char *extra = (const unsigned char *)
- _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB);
-
- for (workp2 = workp + coll_symbol_length ; workp < workp2 ;
- workp++)
- {
- int32_t *wextra;
- wextra = (int32_t*)(extra + *workp++);
- for (i = 0; i < *wextra; ++i)
- if (TRANSLATE(d[i]) != wextra[1 + i])
- break;
-
- if (i == *wextra)
- {
- /* Update d, however d will be incremented at
- char_set_matched:, we decrement d here. */
- d += i - 1;
- goto char_set_matched;
- }
- }
- }
- else /* (nrules == 0) */
-# endif
- /* If we can't look up collation data, we use wcscoll
- instead. */
- {
- for (workp2 = workp + coll_symbol_length ; workp < workp2 ;)
- {
- const CHAR_T *backup_d = d, *backup_dend = dend;
-# ifdef _LIBC
- length = __wcslen (workp);
-# else
- length = wcslen (workp);
-# endif
-
- /* If wcscoll(the collating symbol, whole string) > 0,
- any substring of the string never match with the
- collating symbol. */
-# ifdef _LIBC
- if (__wcscoll (workp, d) > 0)
-# else
- if (wcscoll (workp, d) > 0)
-# endif
- {
- workp += length + 1;
- continue;
- }
-
- /* First, we compare the collating symbol with
- the first character of the string.
- If it don't match, we add the next character to
- the compare buffer in turn. */
- for (i = 0 ; i < WORK_BUFFER_SIZE-1 ; i++, d++)
- {
- int match;
- if (d == dend)
- {
- if (dend == end_match_2)
- break;
- d = string2;
- dend = end_match_2;
- }
-
- /* add next character to the compare buffer. */
- str_buf[i] = TRANSLATE(*d);
- str_buf[i+1] = '\0';
-
-# ifdef _LIBC
- match = __wcscoll (workp, str_buf);
-# else
- match = wcscoll (workp, str_buf);
-# endif
- if (match == 0)
- goto char_set_matched;
-
- if (match < 0)
- /* (str_buf > workp) indicate (str_buf + X > workp),
- because for all X (str_buf + X > str_buf).
- So we don't need continue this loop. */
- break;
-
- /* Otherwise(str_buf < workp),
- (str_buf+next_character) may equals (workp).
- So we continue this loop. */
- }
- /* not matched */
- d = backup_d;
- dend = backup_dend;
- workp += length + 1;
- }
- }
- /* match with equivalence_class? */
-# ifdef _LIBC
- if (nrules != 0)
- {
- const CHAR_T *backup_d = d, *backup_dend = dend;
- /* Try to match the equivalence class against
- those known to the collate implementation. */
- const int32_t *table;
- const int32_t *weights;
- const int32_t *extra;
- const int32_t *indirect;
- int32_t idx, idx2;
- wint_t *cp;
- size_t len;
-
- /* This #include defines a local function! */
-# include <locale/weightwc.h>
-
- table = (const int32_t *)
- _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEWC);
- weights = (const wint_t *)
- _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTWC);
- extra = (const wint_t *)
- _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAWC);
- indirect = (const int32_t *)
- _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTWC);
-
- /* Write 1 collating element to str_buf, and
- get its index. */
- idx2 = 0;
-
- for (i = 0 ; idx2 == 0 && i < WORK_BUFFER_SIZE - 1; i++)
- {
- cp = (wint_t*)str_buf;
- if (d == dend)
- {
- if (dend == end_match_2)
- break;
- d = string2;
- dend = end_match_2;
- }
- str_buf[i] = TRANSLATE(*(d+i));
- str_buf[i+1] = '\0'; /* sentinel */
- idx2 = findidx ((const wint_t**)&cp);
- }
-
- /* Update d, however d will be incremented at
- char_set_matched:, we decrement d here. */
- d = backup_d + ((wchar_t*)cp - (wchar_t*)str_buf - 1);
- if (d >= dend)
- {
- if (dend == end_match_2)
- d = dend;
- else
- {
- d = string2;
- dend = end_match_2;
- }
- }
-
- len = weights[idx2];
-
- for (workp2 = workp + equiv_class_length ; workp < workp2 ;
- workp++)
- {
- idx = (int32_t)*workp;
- /* We already checked idx != 0 in regex_compile. */
-
- if (idx2 != 0 && len == weights[idx])
- {
- int cnt = 0;
- while (cnt < len && (weights[idx + 1 + cnt]
- == weights[idx2 + 1 + cnt]))
- ++cnt;
-
- if (cnt == len)
- goto char_set_matched;
- }
- }
- /* not matched */
- d = backup_d;
- dend = backup_dend;
- }
- else /* (nrules == 0) */
-# endif
- /* If we can't look up collation data, we use wcscoll
- instead. */
- {
- for (workp2 = workp + equiv_class_length ; workp < workp2 ;)
- {
- const CHAR_T *backup_d = d, *backup_dend = dend;
-# ifdef _LIBC
- length = __wcslen (workp);
-# else
- length = wcslen (workp);
-# endif
-
- /* If wcscoll(the collating symbol, whole string) > 0,
- any substring of the string never match with the
- collating symbol. */
-# ifdef _LIBC
- if (__wcscoll (workp, d) > 0)
-# else
- if (wcscoll (workp, d) > 0)
-# endif
- {
- workp += length + 1;
- break;
- }
-
- /* First, we compare the equivalence class with
- the first character of the string.
- If it don't match, we add the next character to
- the compare buffer in turn. */
- for (i = 0 ; i < WORK_BUFFER_SIZE - 1 ; i++, d++)
- {
- int match;
- if (d == dend)
- {
- if (dend == end_match_2)
- break;
- d = string2;
- dend = end_match_2;
- }
-
- /* add next character to the compare buffer. */
- str_buf[i] = TRANSLATE(*d);
- str_buf[i+1] = '\0';
-
-# ifdef _LIBC
- match = __wcscoll (workp, str_buf);
-# else
- match = wcscoll (workp, str_buf);
-# endif
-
- if (match == 0)
- goto char_set_matched;
-
- if (match < 0)
- /* (str_buf > workp) indicate (str_buf + X > workp),
- because for all X (str_buf + X > str_buf).
- So we don't need continue this loop. */
- break;
-
- /* Otherwise(str_buf < workp),
- (str_buf+next_character) may equals (workp).
- So we continue this loop. */
- }
- /* not matched */
- d = backup_d;
- dend = backup_dend;
- workp += length + 1;
- }
- }
-
- /* match with char_range? */
-# ifdef _LIBC
- if (nrules != 0)
- {
- uint32_t collseqval;
- const char *collseq = (const char *)
- _NL_CURRENT(LC_COLLATE, _NL_COLLATE_COLLSEQWC);
-
- collseqval = collseq_table_lookup (collseq, c);
-
- for (; workp < p - chars_length ;)
- {
- uint32_t start_val, end_val;
-
- /* We already compute the collation sequence value
- of the characters (or collating symbols). */
- start_val = (uint32_t) *workp++; /* range_start */
- end_val = (uint32_t) *workp++; /* range_end */
-
- if (start_val <= collseqval && collseqval <= end_val)
- goto char_set_matched;
- }
- }
- else
-# endif
- {
- /* We set range_start_char at str_buf[0], range_end_char
- at str_buf[4], and compared char at str_buf[2]. */
- str_buf[1] = 0;
- str_buf[2] = c;
- str_buf[3] = 0;
- str_buf[5] = 0;
- for (; workp < p - chars_length ;)
- {
- wchar_t *range_start_char, *range_end_char;
-
- /* match if (range_start_char <= c <= range_end_char). */
-
- /* If range_start(or end) < 0, we assume -range_start(end)
- is the offset of the collating symbol which is specified
- as the character of the range start(end). */
-
- /* range_start */
- if (*workp < 0)
- range_start_char = charset_top - (*workp++);
- else
- {
- str_buf[0] = *workp++;
- range_start_char = str_buf;
- }
-
- /* range_end */
- if (*workp < 0)
- range_end_char = charset_top - (*workp++);
- else
- {
- str_buf[4] = *workp++;
- range_end_char = str_buf + 4;
- }
-
-# ifdef _LIBC
- if (__wcscoll (range_start_char, str_buf+2) <= 0
- && __wcscoll (str_buf+2, range_end_char) <= 0)
-# else
- if (wcscoll (range_start_char, str_buf+2) <= 0
- && wcscoll (str_buf+2, range_end_char) <= 0)
-# endif
- goto char_set_matched;
- }
- }
-
- /* match with char? */
- for (; workp < p ; workp++)
- if (c == *workp)
- goto char_set_matched;
-
- negate = !negate;
-
- char_set_matched:
- if (negate) goto fail;
-#else
- /* Cast to `unsigned' instead of `unsigned char' in case the
- bit list is a full 32 bytes long. */
- if (c < (unsigned) (*p * BYTEWIDTH)
- && p[1 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
- negate = !negate;
-
- p += 1 + *p;
-
- if (!negate) goto fail;
-#undef WORK_BUFFER_SIZE
-#endif /* WCHAR */
- SET_REGS_MATCHED ();
- d++;
- break;
- }
-
-
- /* The beginning of a group is represented by start_memory.
- The arguments are the register number in the next byte, and the
- number of groups inner to this one in the next. The text
- matched within the group is recorded (in the internal
- registers data structure) under the register number. */
- case start_memory:
- DEBUG_PRINT3 ("EXECUTING start_memory %ld (%ld):\n",
- (long int) *p, (long int) p[1]);
-
- /* Find out if this group can match the empty string. */
- p1 = p; /* To send to group_match_null_string_p. */
-
- if (REG_MATCH_NULL_STRING_P (reg_info[*p]) == MATCH_NULL_UNSET_VALUE)
- REG_MATCH_NULL_STRING_P (reg_info[*p])
- = PREFIX(group_match_null_string_p) (&p1, pend, reg_info);
-
- /* Save the position in the string where we were the last time
- we were at this open-group operator in case the group is
- operated upon by a repetition operator, e.g., with `(a*)*b'
- against `ab'; then we want to ignore where we are now in
- the string in case this attempt to match fails. */
- old_regstart[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
- ? REG_UNSET (regstart[*p]) ? d : regstart[*p]
- : regstart[*p];
- DEBUG_PRINT2 (" old_regstart: %d\n",
- POINTER_TO_OFFSET (old_regstart[*p]));
-
- regstart[*p] = d;
- DEBUG_PRINT2 (" regstart: %d\n", POINTER_TO_OFFSET (regstart[*p]));
-
- IS_ACTIVE (reg_info[*p]) = 1;
- MATCHED_SOMETHING (reg_info[*p]) = 0;
-
- /* Clear this whenever we change the register activity status. */
- set_regs_matched_done = 0;
-
- /* This is the new highest active register. */
- highest_active_reg = *p;
-
- /* If nothing was active before, this is the new lowest active
- register. */
- if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
- lowest_active_reg = *p;
-
- /* Move past the register number and inner group count. */
- p += 2;
- just_past_start_mem = p;
-
- break;
-
-
- /* The stop_memory opcode represents the end of a group. Its
- arguments are the same as start_memory's: the register
- number, and the number of inner groups. */
- case stop_memory:
- DEBUG_PRINT3 ("EXECUTING stop_memory %ld (%ld):\n",
- (long int) *p, (long int) p[1]);
-
- /* We need to save the string position the last time we were at
- this close-group operator in case the group is operated
- upon by a repetition operator, e.g., with `((a*)*(b*)*)*'
- against `aba'; then we want to ignore where we are now in
- the string in case this attempt to match fails. */
- old_regend[*p] = REG_MATCH_NULL_STRING_P (reg_info[*p])
- ? REG_UNSET (regend[*p]) ? d : regend[*p]
- : regend[*p];
- DEBUG_PRINT2 (" old_regend: %d\n",
- POINTER_TO_OFFSET (old_regend[*p]));
-
- regend[*p] = d;
- DEBUG_PRINT2 (" regend: %d\n", POINTER_TO_OFFSET (regend[*p]));
-
- /* This register isn't active anymore. */
- IS_ACTIVE (reg_info[*p]) = 0;
-
- /* Clear this whenever we change the register activity status. */
- set_regs_matched_done = 0;
-
- /* If this was the only register active, nothing is active
- anymore. */
- if (lowest_active_reg == highest_active_reg)
- {
- lowest_active_reg = NO_LOWEST_ACTIVE_REG;
- highest_active_reg = NO_HIGHEST_ACTIVE_REG;
- }
- else
- { /* We must scan for the new highest active register, since
- it isn't necessarily one less than now: consider
- (a(b)c(d(e)f)g). When group 3 ends, after the f), the
- new highest active register is 1. */
- UCHAR_T r = *p - 1;
- while (r > 0 && !IS_ACTIVE (reg_info[r]))
- r--;
-
- /* If we end up at register zero, that means that we saved
- the registers as the result of an `on_failure_jump', not
- a `start_memory', and we jumped to past the innermost
- `stop_memory'. For example, in ((.)*) we save
- registers 1 and 2 as a result of the *, but when we pop
- back to the second ), we are at the stop_memory 1.
- Thus, nothing is active. */
- if (r == 0)
- {
- lowest_active_reg = NO_LOWEST_ACTIVE_REG;
- highest_active_reg = NO_HIGHEST_ACTIVE_REG;
- }
- else
- highest_active_reg = r;
- }
-
- /* If just failed to match something this time around with a
- group that's operated on by a repetition operator, try to
- force exit from the ``loop'', and restore the register
- information for this group that we had before trying this
- last match. */
- if ((!MATCHED_SOMETHING (reg_info[*p])
- || just_past_start_mem == p - 1)
- && (p + 2) < pend)
- {
- boolean is_a_jump_n = false;
-
- p1 = p + 2;
- mcnt = 0;
- switch ((re_opcode_t) *p1++)
- {
- case jump_n:
- is_a_jump_n = true;
- case pop_failure_jump:
- case maybe_pop_jump:
- case jump:
- case dummy_failure_jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- if (is_a_jump_n)
- p1 += OFFSET_ADDRESS_SIZE;
- break;
-
- default:
- /* do nothing */ ;
- }
- p1 += mcnt;
-
- /* If the next operation is a jump backwards in the pattern
- to an on_failure_jump right before the start_memory
- corresponding to this stop_memory, exit from the loop
- by forcing a failure after pushing on the stack the
- on_failure_jump's jump in the pattern, and d. */
- if (mcnt < 0 && (re_opcode_t) *p1 == on_failure_jump
- && (re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == start_memory
- && p1[2+OFFSET_ADDRESS_SIZE] == *p)
- {
- /* If this group ever matched anything, then restore
- what its registers were before trying this last
- failed match, e.g., with `(a*)*b' against `ab' for
- regstart[1], and, e.g., with `((a*)*(b*)*)*'
- against `aba' for regend[3].
-
- Also restore the registers for inner groups for,
- e.g., `((a*)(b*))*' against `aba' (register 3 would
- otherwise get trashed). */
-
- if (EVER_MATCHED_SOMETHING (reg_info[*p]))
- {
- unsigned r;
-
- EVER_MATCHED_SOMETHING (reg_info[*p]) = 0;
-
- /* Restore this and inner groups' (if any) registers. */
- for (r = *p; r < (unsigned) *p + (unsigned) *(p + 1);
- r++)
- {
- regstart[r] = old_regstart[r];
-
- /* xx why this test? */
- if (old_regend[r] >= regstart[r])
- regend[r] = old_regend[r];
- }
- }
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- PUSH_FAILURE_POINT (p1 + mcnt, d, -2);
-
- goto fail;
- }
- }
-
- /* Move past the register number and the inner group count. */
- p += 2;
- break;
-
-
- /* \<digit> has been turned into a `duplicate' command which is
- followed by the numeric value of <digit> as the register number. */
- case duplicate:
- {
- register const CHAR_T *d2, *dend2;
- int regno = *p++; /* Get which register to match against. */
- DEBUG_PRINT2 ("EXECUTING duplicate %d.\n", regno);
-
- /* Can't back reference a group which we've never matched. */
- if (REG_UNSET (regstart[regno]) || REG_UNSET (regend[regno]))
- goto fail;
-
- /* Where in input to try to start matching. */
- d2 = regstart[regno];
-
- /* Where to stop matching; if both the place to start and
- the place to stop matching are in the same string, then
- set to the place to stop, otherwise, for now have to use
- the end of the first string. */
-
- dend2 = ((FIRST_STRING_P (regstart[regno])
- == FIRST_STRING_P (regend[regno]))
- ? regend[regno] : end_match_1);
- for (;;)
- {
- /* If necessary, advance to next segment in register
- contents. */
- while (d2 == dend2)
- {
- if (dend2 == end_match_2) break;
- if (dend2 == regend[regno]) break;
-
- /* End of string1 => advance to string2. */
- d2 = string2;
- dend2 = regend[regno];
- }
- /* At end of register contents => success */
- if (d2 == dend2) break;
-
- /* If necessary, advance to next segment in data. */
- PREFETCH ();
-
- /* How many characters left in this segment to match. */
- mcnt = dend - d;
-
- /* Want how many consecutive characters we can match in
- one shot, so, if necessary, adjust the count. */
- if (mcnt > dend2 - d2)
- mcnt = dend2 - d2;
-
- /* Compare that many; failure if mismatch, else move
- past them. */
- if (translate
- ? PREFIX(bcmp_translate) (d, d2, mcnt, translate)
- : memcmp (d, d2, mcnt*sizeof(UCHAR_T)))
- goto fail;
- d += mcnt, d2 += mcnt;
-
- /* Do this because we've match some characters. */
- SET_REGS_MATCHED ();
- }
- }
- break;
-
-
- /* begline matches the empty string at the beginning of the string
- (unless `not_bol' is set in `bufp'), and, if
- `newline_anchor' is set, after newlines. */
- case begline:
- DEBUG_PRINT1 ("EXECUTING begline.\n");
-
- if (AT_STRINGS_BEG (d))
- {
- if (!bufp->not_bol) break;
- }
- else if (d[-1] == '\n' && bufp->newline_anchor)
- {
- break;
- }
- /* In all other cases, we fail. */
- goto fail;
-
-
- /* endline is the dual of begline. */
- case endline:
- DEBUG_PRINT1 ("EXECUTING endline.\n");
-
- if (AT_STRINGS_END (d))
- {
- if (!bufp->not_eol) break;
- }
-
- /* We have to ``prefetch'' the next character. */
- else if ((d == end1 ? *string2 : *d) == '\n'
- && bufp->newline_anchor)
- {
- break;
- }
- goto fail;
-
-
- /* Match at the very beginning of the data. */
- case begbuf:
- DEBUG_PRINT1 ("EXECUTING begbuf.\n");
- if (AT_STRINGS_BEG (d))
- break;
- goto fail;
-
-
- /* Match at the very end of the data. */
- case endbuf:
- DEBUG_PRINT1 ("EXECUTING endbuf.\n");
- if (AT_STRINGS_END (d))
- break;
- goto fail;
-
-
- /* on_failure_keep_string_jump is used to optimize `.*\n'. It
- pushes NULL as the value for the string on the stack. Then
- `pop_failure_point' will keep the current value for the
- string, instead of restoring it. To see why, consider
- matching `foo\nbar' against `.*\n'. The .* matches the foo;
- then the . fails against the \n. But the next thing we want
- to do is match the \n against the \n; if we restored the
- string value, we would be back at the foo.
-
- Because this is used only in specific cases, we don't need to
- check all the things that `on_failure_jump' does, to make
- sure the right things get saved on the stack. Hence we don't
- share its code. The only reason to push anything on the
- stack at all is that otherwise we would have to change
- `anychar's code to do something besides goto fail in this
- case; that seems worse than this. */
- case on_failure_keep_string_jump:
- DEBUG_PRINT1 ("EXECUTING on_failure_keep_string_jump");
-
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
-#ifdef _LIBC
- DEBUG_PRINT3 (" %d (to %p):\n", mcnt, p + mcnt);
-#else
- DEBUG_PRINT3 (" %d (to 0x%x):\n", mcnt, p + mcnt);
-#endif
-
- PUSH_FAILURE_POINT (p + mcnt, NULL, -2);
- break;
-
-
- /* Uses of on_failure_jump:
-
- Each alternative starts with an on_failure_jump that points
- to the beginning of the next alternative. Each alternative
- except the last ends with a jump that in effect jumps past
- the rest of the alternatives. (They really jump to the
- ending jump of the following alternative, because tensioning
- these jumps is a hassle.)
-
- Repeats start with an on_failure_jump that points past both
- the repetition text and either the following jump or
- pop_failure_jump back to this on_failure_jump. */
- case on_failure_jump:
- on_failure:
- DEBUG_PRINT1 ("EXECUTING on_failure_jump");
-
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
-#ifdef _LIBC
- DEBUG_PRINT3 (" %d (to %p)", mcnt, p + mcnt);
-#else
- DEBUG_PRINT3 (" %d (to 0x%x)", mcnt, p + mcnt);
-#endif
-
- /* If this on_failure_jump comes right before a group (i.e.,
- the original * applied to a group), save the information
- for that group and all inner ones, so that if we fail back
- to this point, the group's information will be correct.
- For example, in \(a*\)*\1, we need the preceding group,
- and in \(zz\(a*\)b*\)\2, we need the inner group. */
-
- /* We can't use `p' to check ahead because we push
- a failure point to `p + mcnt' after we do this. */
- p1 = p;
-
- /* We need to skip no_op's before we look for the
- start_memory in case this on_failure_jump is happening as
- the result of a completed succeed_n, as in \(a\)\{1,3\}b\1
- against aba. */
- while (p1 < pend && (re_opcode_t) *p1 == no_op)
- p1++;
-
- if (p1 < pend && (re_opcode_t) *p1 == start_memory)
- {
- /* We have a new highest active register now. This will
- get reset at the start_memory we are about to get to,
- but we will have saved all the registers relevant to
- this repetition op, as described above. */
- highest_active_reg = *(p1 + 1) + *(p1 + 2);
- if (lowest_active_reg == NO_LOWEST_ACTIVE_REG)
- lowest_active_reg = *(p1 + 1);
- }
-
- DEBUG_PRINT1 (":\n");
- PUSH_FAILURE_POINT (p + mcnt, d, -2);
- break;
-
-
- /* A smart repeat ends with `maybe_pop_jump'.
- We change it to either `pop_failure_jump' or `jump'. */
- case maybe_pop_jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- DEBUG_PRINT2 ("EXECUTING maybe_pop_jump %d.\n", mcnt);
- {
- register UCHAR_T *p2 = p;
-
- /* Compare the beginning of the repeat with what in the
- pattern follows its end. If we can establish that there
- is nothing that they would both match, i.e., that we
- would have to backtrack because of (as in, e.g., `a*a')
- then we can change to pop_failure_jump, because we'll
- never have to backtrack.
-
- This is not true in the case of alternatives: in
- `(a|ab)*' we do need to backtrack to the `ab' alternative
- (e.g., if the string was `ab'). But instead of trying to
- detect that here, the alternative has put on a dummy
- failure point which is what we will end up popping. */
-
- /* Skip over open/close-group commands.
- If what follows this loop is a ...+ construct,
- look at what begins its body, since we will have to
- match at least one of that. */
- while (1)
- {
- if (p2 + 2 < pend
- && ((re_opcode_t) *p2 == stop_memory
- || (re_opcode_t) *p2 == start_memory))
- p2 += 3;
- else if (p2 + 2 + 2 * OFFSET_ADDRESS_SIZE < pend
- && (re_opcode_t) *p2 == dummy_failure_jump)
- p2 += 2 + 2 * OFFSET_ADDRESS_SIZE;
- else
- break;
- }
-
- p1 = p + mcnt;
- /* p1[0] ... p1[2] are the `on_failure_jump' corresponding
- to the `maybe_finalize_jump' of this case. Examine what
- follows. */
-
- /* If we're at the end of the pattern, we can change. */
- if (p2 == pend)
- {
- /* Consider what happens when matching ":\(.*\)"
- against ":/". I don't really understand this code
- yet. */
- p[-(1+OFFSET_ADDRESS_SIZE)] = (UCHAR_T)
- pop_failure_jump;
- DEBUG_PRINT1
- (" End of pattern: change to `pop_failure_jump'.\n");
- }
-
- else if ((re_opcode_t) *p2 == exactn
-#ifdef MBS_SUPPORT
- || (re_opcode_t) *p2 == exactn_bin
-#endif
- || (bufp->newline_anchor && (re_opcode_t) *p2 == endline))
- {
- register UCHAR_T c
- = *p2 == (UCHAR_T) endline ? '\n' : p2[2];
-
- if (((re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == exactn
-#ifdef MBS_SUPPORT
- || (re_opcode_t) p1[1+OFFSET_ADDRESS_SIZE] == exactn_bin
-#endif
- ) && p1[3+OFFSET_ADDRESS_SIZE] != c)
- {
- p[-(1+OFFSET_ADDRESS_SIZE)] = (UCHAR_T)
- pop_failure_jump;
-#ifdef WCHAR
- DEBUG_PRINT3 (" %C != %C => pop_failure_jump.\n",
- (wint_t) c,
- (wint_t) p1[3+OFFSET_ADDRESS_SIZE]);
-#else
- DEBUG_PRINT3 (" %c != %c => pop_failure_jump.\n",
- (char) c,
- (char) p1[3+OFFSET_ADDRESS_SIZE]);
-#endif
- }
-
-#ifndef WCHAR
- else if ((re_opcode_t) p1[3] == charset
- || (re_opcode_t) p1[3] == charset_not)
- {
- int negate = (re_opcode_t) p1[3] == charset_not;
-
- if (c < (unsigned) (p1[4] * BYTEWIDTH)
- && p1[5 + c / BYTEWIDTH] & (1 << (c % BYTEWIDTH)))
- negate = !negate;
-
- /* `negate' is equal to 1 if c would match, which means
- that we can't change to pop_failure_jump. */
- if (!negate)
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
- }
- }
-#endif /* not WCHAR */
- }
-#ifndef WCHAR
- else if ((re_opcode_t) *p2 == charset)
- {
- /* We win if the first character of the loop is not part
- of the charset. */
- if ((re_opcode_t) p1[3] == exactn
- && ! ((int) p2[1] * BYTEWIDTH > (int) p1[5]
- && (p2[2 + p1[5] / BYTEWIDTH]
- & (1 << (p1[5] % BYTEWIDTH)))))
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
- }
-
- else if ((re_opcode_t) p1[3] == charset_not)
- {
- int idx;
- /* We win if the charset_not inside the loop
- lists every character listed in the charset after. */
- for (idx = 0; idx < (int) p2[1]; idx++)
- if (! (p2[2 + idx] == 0
- || (idx < (int) p1[4]
- && ((p2[2 + idx] & ~ p1[5 + idx]) == 0))))
- break;
-
- if (idx == p2[1])
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
- }
- }
- else if ((re_opcode_t) p1[3] == charset)
- {
- int idx;
- /* We win if the charset inside the loop
- has no overlap with the one after the loop. */
- for (idx = 0;
- idx < (int) p2[1] && idx < (int) p1[4];
- idx++)
- if ((p2[2 + idx] & p1[5 + idx]) != 0)
- break;
-
- if (idx == p2[1] || idx == p1[4])
- {
- p[-3] = (unsigned char) pop_failure_jump;
- DEBUG_PRINT1 (" No match => pop_failure_jump.\n");
- }
- }
- }
-#endif /* not WCHAR */
- }
- p -= OFFSET_ADDRESS_SIZE; /* Point at relative address again. */
- if ((re_opcode_t) p[-1] != pop_failure_jump)
- {
- p[-1] = (UCHAR_T) jump;
- DEBUG_PRINT1 (" Match => jump.\n");
- goto unconditional_jump;
- }
- /* Note fall through. */
-
-
- /* The end of a simple repeat has a pop_failure_jump back to
- its matching on_failure_jump, where the latter will push a
- failure point. The pop_failure_jump takes off failure
- points put on by this pop_failure_jump's matching
- on_failure_jump; we got through the pattern to here from the
- matching on_failure_jump, so didn't fail. */
- case pop_failure_jump:
- {
- /* We need to pass separate storage for the lowest and
- highest registers, even though we don't care about the
- actual values. Otherwise, we will restore only one
- register from the stack, since lowest will == highest in
- `pop_failure_point'. */
- active_reg_t dummy_low_reg, dummy_high_reg;
- UCHAR_T *pdummy ATTRIBUTE_UNUSED = NULL;
- const CHAR_T *sdummy ATTRIBUTE_UNUSED = NULL;
-
- DEBUG_PRINT1 ("EXECUTING pop_failure_jump.\n");
- POP_FAILURE_POINT (sdummy, pdummy,
- dummy_low_reg, dummy_high_reg,
- reg_dummy, reg_dummy, reg_info_dummy);
- }
- /* Note fall through. */
-
- unconditional_jump:
-#ifdef _LIBC
- DEBUG_PRINT2 ("\n%p: ", p);
-#else
- DEBUG_PRINT2 ("\n0x%x: ", p);
-#endif
- /* Note fall through. */
-
- /* Unconditionally jump (without popping any failure points). */
- case jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p); /* Get the amount to jump. */
- DEBUG_PRINT2 ("EXECUTING jump %d ", mcnt);
- p += mcnt; /* Do the jump. */
-#ifdef _LIBC
- DEBUG_PRINT2 ("(to %p).\n", p);
-#else
- DEBUG_PRINT2 ("(to 0x%x).\n", p);
-#endif
- break;
-
-
- /* We need this opcode so we can detect where alternatives end
- in `group_match_null_string_p' et al. */
- case jump_past_alt:
- DEBUG_PRINT1 ("EXECUTING jump_past_alt.\n");
- goto unconditional_jump;
-
-
- /* Normally, the on_failure_jump pushes a failure point, which
- then gets popped at pop_failure_jump. We will end up at
- pop_failure_jump, also, and with a pattern of, say, `a+', we
- are skipping over the on_failure_jump, so we have to push
- something meaningless for pop_failure_jump to pop. */
- case dummy_failure_jump:
- DEBUG_PRINT1 ("EXECUTING dummy_failure_jump.\n");
- /* It doesn't matter what we push for the string here. What
- the code at `fail' tests is the value for the pattern. */
- PUSH_FAILURE_POINT (NULL, NULL, -2);
- goto unconditional_jump;
-
-
- /* At the end of an alternative, we need to push a dummy failure
- point in case we are followed by a `pop_failure_jump', because
- we don't want the failure point for the alternative to be
- popped. For example, matching `(a|ab)*' against `aab'
- requires that we match the `ab' alternative. */
- case push_dummy_failure:
- DEBUG_PRINT1 ("EXECUTING push_dummy_failure.\n");
- /* See comments just above at `dummy_failure_jump' about the
- two zeroes. */
- PUSH_FAILURE_POINT (NULL, NULL, -2);
- break;
-
- /* Have to succeed matching what follows at least n times.
- After that, handle like `on_failure_jump'. */
- case succeed_n:
- EXTRACT_NUMBER (mcnt, p + OFFSET_ADDRESS_SIZE);
- DEBUG_PRINT2 ("EXECUTING succeed_n %d.\n", mcnt);
-
- assert (mcnt >= 0);
- /* Originally, this is how many times we HAVE to succeed. */
- if (mcnt > 0)
- {
- mcnt--;
- p += OFFSET_ADDRESS_SIZE;
- STORE_NUMBER_AND_INCR (p, mcnt);
-#ifdef _LIBC
- DEBUG_PRINT3 (" Setting %p to %d.\n", p - OFFSET_ADDRESS_SIZE
- , mcnt);
-#else
- DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p - OFFSET_ADDRESS_SIZE
- , mcnt);
-#endif
- }
- else if (mcnt == 0)
- {
-#ifdef _LIBC
- DEBUG_PRINT2 (" Setting two bytes from %p to no_op.\n",
- p + OFFSET_ADDRESS_SIZE);
-#else
- DEBUG_PRINT2 (" Setting two bytes from 0x%x to no_op.\n",
- p + OFFSET_ADDRESS_SIZE);
-#endif /* _LIBC */
-
-#ifdef WCHAR
- p[1] = (UCHAR_T) no_op;
-#else
- p[2] = (UCHAR_T) no_op;
- p[3] = (UCHAR_T) no_op;
-#endif /* WCHAR */
- goto on_failure;
- }
- break;
-
- case jump_n:
- EXTRACT_NUMBER (mcnt, p + OFFSET_ADDRESS_SIZE);
- DEBUG_PRINT2 ("EXECUTING jump_n %d.\n", mcnt);
-
- /* Originally, this is how many times we CAN jump. */
- if (mcnt)
- {
- mcnt--;
- STORE_NUMBER (p + OFFSET_ADDRESS_SIZE, mcnt);
-
-#ifdef _LIBC
- DEBUG_PRINT3 (" Setting %p to %d.\n", p + OFFSET_ADDRESS_SIZE,
- mcnt);
-#else
- DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p + OFFSET_ADDRESS_SIZE,
- mcnt);
-#endif /* _LIBC */
- goto unconditional_jump;
- }
- /* If don't have to jump any more, skip over the rest of command. */
- else
- p += 2 * OFFSET_ADDRESS_SIZE;
- break;
-
- case set_number_at:
- {
- DEBUG_PRINT1 ("EXECUTING set_number_at.\n");
-
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
- p1 = p + mcnt;
- EXTRACT_NUMBER_AND_INCR (mcnt, p);
-#ifdef _LIBC
- DEBUG_PRINT3 (" Setting %p to %d.\n", p1, mcnt);
-#else
- DEBUG_PRINT3 (" Setting 0x%x to %d.\n", p1, mcnt);
-#endif
- STORE_NUMBER (p1, mcnt);
- break;
- }
-
-#if 0
- /* The DEC Alpha C compiler 3.x generates incorrect code for the
- test WORDCHAR_P (d - 1) != WORDCHAR_P (d) in the expansion of
- AT_WORD_BOUNDARY, so this code is disabled. Expanding the
- macro and introducing temporary variables works around the bug. */
-
- case wordbound:
- DEBUG_PRINT1 ("EXECUTING wordbound.\n");
- if (AT_WORD_BOUNDARY (d))
- break;
- goto fail;
-
- case notwordbound:
- DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
- if (AT_WORD_BOUNDARY (d))
- goto fail;
- break;
-#else
- case wordbound:
- {
- boolean prevchar, thischar;
-
- DEBUG_PRINT1 ("EXECUTING wordbound.\n");
- if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
- break;
-
- prevchar = WORDCHAR_P (d - 1);
- thischar = WORDCHAR_P (d);
- if (prevchar != thischar)
- break;
- goto fail;
- }
-
- case notwordbound:
- {
- boolean prevchar, thischar;
-
- DEBUG_PRINT1 ("EXECUTING notwordbound.\n");
- if (AT_STRINGS_BEG (d) || AT_STRINGS_END (d))
- goto fail;
-
- prevchar = WORDCHAR_P (d - 1);
- thischar = WORDCHAR_P (d);
- if (prevchar != thischar)
- goto fail;
- break;
- }
-#endif
-
- case wordbeg:
- DEBUG_PRINT1 ("EXECUTING wordbeg.\n");
- if (!AT_STRINGS_END (d) && WORDCHAR_P (d)
- && (AT_STRINGS_BEG (d) || !WORDCHAR_P (d - 1)))
- break;
- goto fail;
-
- case wordend:
- DEBUG_PRINT1 ("EXECUTING wordend.\n");
- if (!AT_STRINGS_BEG (d) && WORDCHAR_P (d - 1)
- && (AT_STRINGS_END (d) || !WORDCHAR_P (d)))
- break;
- goto fail;
-
-#ifdef emacs
- case before_dot:
- DEBUG_PRINT1 ("EXECUTING before_dot.\n");
- if (PTR_CHAR_POS ((unsigned char *) d) >= point)
- goto fail;
- break;
-
- case at_dot:
- DEBUG_PRINT1 ("EXECUTING at_dot.\n");
- if (PTR_CHAR_POS ((unsigned char *) d) != point)
- goto fail;
- break;
-
- case after_dot:
- DEBUG_PRINT1 ("EXECUTING after_dot.\n");
- if (PTR_CHAR_POS ((unsigned char *) d) <= point)
- goto fail;
- break;
-
- case syntaxspec:
- DEBUG_PRINT2 ("EXECUTING syntaxspec %d.\n", mcnt);
- mcnt = *p++;
- goto matchsyntax;
-
- case wordchar:
- DEBUG_PRINT1 ("EXECUTING Emacs wordchar.\n");
- mcnt = (int) Sword;
- matchsyntax:
- PREFETCH ();
- /* Can't use *d++ here; SYNTAX may be an unsafe macro. */
- d++;
- if (SYNTAX (d[-1]) != (enum syntaxcode) mcnt)
- goto fail;
- SET_REGS_MATCHED ();
- break;
-
- case notsyntaxspec:
- DEBUG_PRINT2 ("EXECUTING notsyntaxspec %d.\n", mcnt);
- mcnt = *p++;
- goto matchnotsyntax;
-
- case notwordchar:
- DEBUG_PRINT1 ("EXECUTING Emacs notwordchar.\n");
- mcnt = (int) Sword;
- matchnotsyntax:
- PREFETCH ();
- /* Can't use *d++ here; SYNTAX may be an unsafe macro. */
- d++;
- if (SYNTAX (d[-1]) == (enum syntaxcode) mcnt)
- goto fail;
- SET_REGS_MATCHED ();
- break;
-
-#else /* not emacs */
- case wordchar:
- DEBUG_PRINT1 ("EXECUTING non-Emacs wordchar.\n");
- PREFETCH ();
- if (!WORDCHAR_P (d))
- goto fail;
- SET_REGS_MATCHED ();
- d++;
- break;
-
- case notwordchar:
- DEBUG_PRINT1 ("EXECUTING non-Emacs notwordchar.\n");
- PREFETCH ();
- if (WORDCHAR_P (d))
- goto fail;
- SET_REGS_MATCHED ();
- d++;
- break;
-#endif /* not emacs */
-
- default:
- abort ();
- }
- continue; /* Successfully executed one pattern command; keep going. */
-
-
- /* We goto here if a matching operation fails. */
- fail:
- if (!FAIL_STACK_EMPTY ())
- { /* A restart point is known. Restore to that state. */
- DEBUG_PRINT1 ("\nFAIL:\n");
- POP_FAILURE_POINT (d, p,
- lowest_active_reg, highest_active_reg,
- regstart, regend, reg_info);
-
- /* If this failure point is a dummy, try the next one. */
- if (!p)
- goto fail;
-
- /* If we failed to the end of the pattern, don't examine *p. */
- assert (p <= pend);
- if (p < pend)
- {
- boolean is_a_jump_n = false;
-
- /* If failed to a backwards jump that's part of a repetition
- loop, need to pop this failure point and use the next one. */
- switch ((re_opcode_t) *p)
- {
- case jump_n:
- is_a_jump_n = true;
- case maybe_pop_jump:
- case pop_failure_jump:
- case jump:
- p1 = p + 1;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- p1 += mcnt;
-
- if ((is_a_jump_n && (re_opcode_t) *p1 == succeed_n)
- || (!is_a_jump_n
- && (re_opcode_t) *p1 == on_failure_jump))
- goto fail;
- break;
- default:
- /* do nothing */ ;
- }
- }
-
- if (d >= string1 && d <= end1)
- dend = end_match_1;
- }
- else
- break; /* Matching at this starting point really fails. */
- } /* for (;;) */
-
- if (best_regs_set)
- goto restore_best_regs;
-
- FREE_VARIABLES ();
-
- return -1; /* Failure to match. */
-} /* re_match_2 */
-
-/* Subroutine definitions for re_match_2. */
-
-
-/* We are passed P pointing to a register number after a start_memory.
-
- Return true if the pattern up to the corresponding stop_memory can
- match the empty string, and false otherwise.
-
- If we find the matching stop_memory, sets P to point to one past its number.
- Otherwise, sets P to an undefined byte less than or equal to END.
-
- We don't handle duplicates properly (yet). */
-
-static boolean
-PREFIX(group_match_null_string_p) (UCHAR_T **p, UCHAR_T *end,
- PREFIX(register_info_type) *reg_info)
-{
- int mcnt;
- /* Point to after the args to the start_memory. */
- UCHAR_T *p1 = *p + 2;
-
- while (p1 < end)
- {
- /* Skip over opcodes that can match nothing, and return true or
- false, as appropriate, when we get to one that can't, or to the
- matching stop_memory. */
-
- switch ((re_opcode_t) *p1)
- {
- /* Could be either a loop or a series of alternatives. */
- case on_failure_jump:
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
-
- /* If the next operation is not a jump backwards in the
- pattern. */
-
- if (mcnt >= 0)
- {
- /* Go through the on_failure_jumps of the alternatives,
- seeing if any of the alternatives cannot match nothing.
- The last alternative starts with only a jump,
- whereas the rest start with on_failure_jump and end
- with a jump, e.g., here is the pattern for `a|b|c':
-
- /on_failure_jump/0/6/exactn/1/a/jump_past_alt/0/6
- /on_failure_jump/0/6/exactn/1/b/jump_past_alt/0/3
- /exactn/1/c
-
- So, we have to first go through the first (n-1)
- alternatives and then deal with the last one separately. */
-
-
- /* Deal with the first (n-1) alternatives, which start
- with an on_failure_jump (see above) that jumps to right
- past a jump_past_alt. */
-
- while ((re_opcode_t) p1[mcnt-(1+OFFSET_ADDRESS_SIZE)] ==
- jump_past_alt)
- {
- /* `mcnt' holds how many bytes long the alternative
- is, including the ending `jump_past_alt' and
- its number. */
-
- if (!PREFIX(alt_match_null_string_p) (p1, p1 + mcnt -
- (1 + OFFSET_ADDRESS_SIZE),
- reg_info))
- return false;
-
- /* Move to right after this alternative, including the
- jump_past_alt. */
- p1 += mcnt;
-
- /* Break if it's the beginning of an n-th alternative
- that doesn't begin with an on_failure_jump. */
- if ((re_opcode_t) *p1 != on_failure_jump)
- break;
-
- /* Still have to check that it's not an n-th
- alternative that starts with an on_failure_jump. */
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- if ((re_opcode_t) p1[mcnt-(1+OFFSET_ADDRESS_SIZE)] !=
- jump_past_alt)
- {
- /* Get to the beginning of the n-th alternative. */
- p1 -= 1 + OFFSET_ADDRESS_SIZE;
- break;
- }
- }
-
- /* Deal with the last alternative: go back and get number
- of the `jump_past_alt' just before it. `mcnt' contains
- the length of the alternative. */
- EXTRACT_NUMBER (mcnt, p1 - OFFSET_ADDRESS_SIZE);
-
- if (!PREFIX(alt_match_null_string_p) (p1, p1 + mcnt, reg_info))
- return false;
-
- p1 += mcnt; /* Get past the n-th alternative. */
- } /* if mcnt > 0 */
- break;
-
-
- case stop_memory:
- assert (p1[1] == **p);
- *p = p1 + 2;
- return true;
-
-
- default:
- if (!PREFIX(common_op_match_null_string_p) (&p1, end, reg_info))
- return false;
- }
- } /* while p1 < end */
-
- return false;
-} /* group_match_null_string_p */
-
-
-/* Similar to group_match_null_string_p, but doesn't deal with alternatives:
- It expects P to be the first byte of a single alternative and END one
- byte past the last. The alternative can contain groups. */
-
-static boolean
-PREFIX(alt_match_null_string_p) (UCHAR_T *p, UCHAR_T *end,
- PREFIX(register_info_type) *reg_info)
-{
- int mcnt;
- UCHAR_T *p1 = p;
-
- while (p1 < end)
- {
- /* Skip over opcodes that can match nothing, and break when we get
- to one that can't. */
-
- switch ((re_opcode_t) *p1)
- {
- /* It's a loop. */
- case on_failure_jump:
- p1++;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- p1 += mcnt;
- break;
-
- default:
- if (!PREFIX(common_op_match_null_string_p) (&p1, end, reg_info))
- return false;
- }
- } /* while p1 < end */
-
- return true;
-} /* alt_match_null_string_p */
-
-
-/* Deals with the ops common to group_match_null_string_p and
- alt_match_null_string_p.
-
- Sets P to one after the op and its arguments, if any. */
-
-static boolean
-PREFIX(common_op_match_null_string_p) (UCHAR_T **p, UCHAR_T *end,
- PREFIX(register_info_type) *reg_info)
-{
- int mcnt;
- boolean ret;
- int reg_no;
- UCHAR_T *p1 = *p;
-
- switch ((re_opcode_t) *p1++)
- {
- case no_op:
- case begline:
- case endline:
- case begbuf:
- case endbuf:
- case wordbeg:
- case wordend:
- case wordbound:
- case notwordbound:
-#ifdef emacs
- case before_dot:
- case at_dot:
- case after_dot:
-#endif
- break;
-
- case start_memory:
- reg_no = *p1;
- assert (reg_no > 0 && reg_no <= MAX_REGNUM);
- ret = PREFIX(group_match_null_string_p) (&p1, end, reg_info);
-
- /* Have to set this here in case we're checking a group which
- contains a group and a back reference to it. */
-
- if (REG_MATCH_NULL_STRING_P (reg_info[reg_no]) == MATCH_NULL_UNSET_VALUE)
- REG_MATCH_NULL_STRING_P (reg_info[reg_no]) = ret;
-
- if (!ret)
- return false;
- break;
-
- /* If this is an optimized succeed_n for zero times, make the jump. */
- case jump:
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- if (mcnt >= 0)
- p1 += mcnt;
- else
- return false;
- break;
-
- case succeed_n:
- /* Get to the number of times to succeed. */
- p1 += OFFSET_ADDRESS_SIZE;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
-
- if (mcnt == 0)
- {
- p1 -= 2 * OFFSET_ADDRESS_SIZE;
- EXTRACT_NUMBER_AND_INCR (mcnt, p1);
- p1 += mcnt;
- }
- else
- return false;
- break;
-
- case duplicate:
- if (!REG_MATCH_NULL_STRING_P (reg_info[*p1]))
- return false;
- break;
-
- case set_number_at:
- p1 += 2 * OFFSET_ADDRESS_SIZE;
-
- default:
- /* All other opcodes mean we cannot match the empty string. */
- return false;
- }
-
- *p = p1;
- return true;
-} /* common_op_match_null_string_p */
-
-
-/* Return zero if TRANSLATE[S1] and TRANSLATE[S2] are identical for LEN
- bytes; nonzero otherwise. */
-
-static int
-PREFIX(bcmp_translate) (const CHAR_T *s1, const CHAR_T *s2, register int len,
- RE_TRANSLATE_TYPE translate)
-{
- register const UCHAR_T *p1 = (const UCHAR_T *) s1;
- register const UCHAR_T *p2 = (const UCHAR_T *) s2;
- while (len)
- {
-#ifdef WCHAR
- if (((*p1<=0xff)?translate[*p1++]:*p1++)
- != ((*p2<=0xff)?translate[*p2++]:*p2++))
- return 1;
-#else /* BYTE */
- if (translate[*p1++] != translate[*p2++]) return 1;
-#endif /* WCHAR */
- len--;
- }
- return 0;
-}
-
-
-#else /* not INSIDE_RECURSION */
-
-/* Entry points for GNU code. */
-
-/* re_compile_pattern is the GNU regular expression compiler: it
- compiles PATTERN (of length SIZE) and puts the result in BUFP.
- Returns 0 if the pattern was valid, otherwise an error string.
-
- Assumes the `allocated' (and perhaps `buffer') and `translate' fields
- are set in BUFP on entry.
-
- We call regex_compile to do the actual compilation. */
-
-const char *
-re_compile_pattern (const char *pattern, size_t length,
- struct re_pattern_buffer *bufp)
-{
- reg_errcode_t ret;
-
- /* GNU code is written to assume at least RE_NREGS registers will be set
- (and at least one extra will be -1). */
- bufp->regs_allocated = REGS_UNALLOCATED;
-
- /* And GNU code determines whether or not to get register information
- by passing null for the REGS argument to re_match, etc., not by
- setting no_sub. */
- bufp->no_sub = 0;
-
- /* Match anchors at newline. */
- bufp->newline_anchor = 1;
-
-# ifdef MBS_SUPPORT
- if (MB_CUR_MAX != 1)
- ret = wcs_regex_compile (pattern, length, re_syntax_options, bufp);
- else
-# endif
- ret = byte_regex_compile (pattern, length, re_syntax_options, bufp);
-
- if (!ret)
- return NULL;
- return gettext (re_error_msgid[(int) ret]);
-}
-#ifdef _LIBC
-weak_alias (__re_compile_pattern, re_compile_pattern)
-#endif
-
-/* Entry points compatible with 4.2 BSD regex library. We don't define
- them unless specifically requested. */
-
-#if defined _REGEX_RE_COMP || defined _LIBC
-
-/* BSD has one and only one pattern buffer. */
-static struct re_pattern_buffer re_comp_buf;
-
-char *
-#ifdef _LIBC
-/* Make these definitions weak in libc, so POSIX programs can redefine
- these names if they don't use our functions, and still use
- regcomp/regexec below without link errors. */
-weak_function
-#endif
-re_comp (const char *s)
-{
- reg_errcode_t ret;
-
- if (!s)
- {
- if (!re_comp_buf.buffer)
- return (char *) gettext ("No previous regular expression");
- return 0;
- }
-
- if (!re_comp_buf.buffer)
- {
- re_comp_buf.buffer = (unsigned char *) malloc (200);
- if (re_comp_buf.buffer == NULL)
- return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
- re_comp_buf.allocated = 200;
-
- re_comp_buf.fastmap = (char *) malloc (1 << BYTEWIDTH);
- if (re_comp_buf.fastmap == NULL)
- return (char *) gettext (re_error_msgid[(int) REG_ESPACE]);
- }
-
- /* Since `re_exec' always passes NULL for the `regs' argument, we
- don't need to initialize the pattern buffer fields which affect it. */
-
- /* Match anchors at newlines. */
- re_comp_buf.newline_anchor = 1;
-
-# ifdef MBS_SUPPORT
- if (MB_CUR_MAX != 1)
- ret = wcs_regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
- else
-# endif
- ret = byte_regex_compile (s, strlen (s), re_syntax_options, &re_comp_buf);
-
- if (!ret)
- return NULL;
-
- /* Yes, we're discarding `const' here if !HAVE_LIBINTL. */
- return (char *) gettext (re_error_msgid[(int) ret]);
-}
-
-
-int
-#ifdef _LIBC
-weak_function
-#endif
-re_exec (const char *s)
-{
- const int len = strlen (s);
- return
- 0 <= re_search (&re_comp_buf, s, len, 0, len, (struct re_registers *) 0);
-}
-
-#endif /* _REGEX_RE_COMP */
-
-/* POSIX.2 functions. Don't define these for Emacs. */
-
-#ifndef emacs
-
-/* regcomp takes a regular expression as a string and compiles it.
-
- PREG is a regex_t *. We do not expect any fields to be initialized,
- since POSIX says we shouldn't. Thus, we set
-
- `buffer' to the compiled pattern;
- `used' to the length of the compiled pattern;
- `syntax' to RE_SYNTAX_POSIX_EXTENDED if the
- REG_EXTENDED bit in CFLAGS is set; otherwise, to
- RE_SYNTAX_POSIX_BASIC;
- `newline_anchor' to REG_NEWLINE being set in CFLAGS;
- `fastmap' to an allocated space for the fastmap;
- `fastmap_accurate' to zero;
- `re_nsub' to the number of subexpressions in PATTERN.
-
- PATTERN is the address of the pattern string.
-
- CFLAGS is a series of bits which affect compilation.
-
- If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we
- use POSIX basic syntax.
-
- If REG_NEWLINE is set, then . and [^...] don't match newline.
- Also, regexec will try a match beginning after every newline.
-
- If REG_ICASE is set, then we considers upper- and lowercase
- versions of letters to be equivalent when matching.
-
- If REG_NOSUB is set, then when PREG is passed to regexec, that
- routine will report only success or failure, and nothing about the
- registers.
-
- It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for
- the return codes and their meanings.) */
-
-int
-regcomp (regex_t *preg, const char *pattern, int cflags)
-{
- reg_errcode_t ret;
- reg_syntax_t syntax
- = (cflags & REG_EXTENDED) ?
- RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC;
-
- /* regex_compile will allocate the space for the compiled pattern. */
- preg->buffer = 0;
- preg->allocated = 0;
- preg->used = 0;
-
- /* Try to allocate space for the fastmap. */
- preg->fastmap = (char *) malloc (1 << BYTEWIDTH);
-
- if (cflags & REG_ICASE)
- {
- int i;
-
- preg->translate
- = (RE_TRANSLATE_TYPE) malloc (CHAR_SET_SIZE
- * sizeof (*(RE_TRANSLATE_TYPE)0));
- if (preg->translate == NULL)
- return (int) REG_ESPACE;
-
- /* Map uppercase characters to corresponding lowercase ones. */
- for (i = 0; i < CHAR_SET_SIZE; i++)
- preg->translate[i] = ISUPPER (i) ? TOLOWER (i) : i;
- }
- else
- preg->translate = NULL;
-
- /* If REG_NEWLINE is set, newlines are treated differently. */
- if (cflags & REG_NEWLINE)
- { /* REG_NEWLINE implies neither . nor [^...] match newline. */
- syntax &= ~RE_DOT_NEWLINE;
- syntax |= RE_HAT_LISTS_NOT_NEWLINE;
- /* It also changes the matching behavior. */
- preg->newline_anchor = 1;
- }
- else
- preg->newline_anchor = 0;
-
- preg->no_sub = !!(cflags & REG_NOSUB);
-
- /* POSIX says a null character in the pattern terminates it, so we
- can use strlen here in compiling the pattern. */
-# ifdef MBS_SUPPORT
- if (MB_CUR_MAX != 1)
- ret = wcs_regex_compile (pattern, strlen (pattern), syntax, preg);
- else
-# endif
- ret = byte_regex_compile (pattern, strlen (pattern), syntax, preg);
-
- /* POSIX doesn't distinguish between an unmatched open-group and an
- unmatched close-group: both are REG_EPAREN. */
- if (ret == REG_ERPAREN) ret = REG_EPAREN;
-
- if (ret == REG_NOERROR && preg->fastmap)
- {
- /* Compute the fastmap now, since regexec cannot modify the pattern
- buffer. */
- if (re_compile_fastmap (preg) == -2)
- {
- /* Some error occurred while computing the fastmap, just forget
- about it. */
- free (preg->fastmap);
- preg->fastmap = NULL;
- }
- }
-
- return (int) ret;
-}
-#ifdef _LIBC
-weak_alias (__regcomp, regcomp)
-#endif
-
-
-/* regexec searches for a given pattern, specified by PREG, in the
- string STRING.
-
- If NMATCH is zero or REG_NOSUB was set in the cflags argument to
- `regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at
- least NMATCH elements, and we set them to the offsets of the
- corresponding matched substrings.
-
- EFLAGS specifies `execution flags' which affect matching: if
- REG_NOTBOL is set, then ^ does not match at the beginning of the
- string; if REG_NOTEOL is set, then $ does not match at the end.
-
- We return 0 if we find a match and REG_NOMATCH if not. */
-
-int
-regexec (const regex_t *preg, const char *string, size_t nmatch,
- regmatch_t pmatch[], int eflags)
-{
- int ret;
- struct re_registers regs;
- regex_t private_preg;
- int len = strlen (string);
- boolean want_reg_info = !preg->no_sub && nmatch > 0;
-
- private_preg = *preg;
-
- private_preg.not_bol = !!(eflags & REG_NOTBOL);
- private_preg.not_eol = !!(eflags & REG_NOTEOL);
-
- /* The user has told us exactly how many registers to return
- information about, via `nmatch'. We have to pass that on to the
- matching routines. */
- private_preg.regs_allocated = REGS_FIXED;
-
- if (want_reg_info)
- {
- regs.num_regs = nmatch;
- regs.start = TALLOC (nmatch * 2, regoff_t);
- if (regs.start == NULL)
- return (int) REG_NOMATCH;
- regs.end = regs.start + nmatch;
- }
-
- /* Perform the searching operation. */
- ret = re_search (&private_preg, string, len,
- /* start: */ 0, /* range: */ len,
- want_reg_info ? &regs : (struct re_registers *) 0);
-
- /* Copy the register information to the POSIX structure. */
- if (want_reg_info)
- {
- if (ret >= 0)
- {
- unsigned r;
-
- for (r = 0; r < nmatch; r++)
- {
- pmatch[r].rm_so = regs.start[r];
- pmatch[r].rm_eo = regs.end[r];
- }
- }
-
- /* If we needed the temporary register info, free the space now. */
- free (regs.start);
- }
-
- /* We want zero return to mean success, unlike `re_search'. */
- return ret >= 0 ? (int) REG_NOERROR : (int) REG_NOMATCH;
-}
-#ifdef _LIBC
-weak_alias (__regexec, regexec)
-#endif
-
-
-/* Returns a message corresponding to an error code, ERRCODE, returned
- from either regcomp or regexec. We don't use PREG here. */
-
-size_t
-regerror (int errcode, const regex_t *preg ATTRIBUTE_UNUSED,
- char *errbuf, size_t errbuf_size)
-{
- const char *msg;
- size_t msg_size;
-
- if (errcode < 0
- || errcode >= (int) (sizeof (re_error_msgid)
- / sizeof (re_error_msgid[0])))
- /* Only error codes returned by the rest of the code should be passed
- to this routine. If we are given anything else, or if other regex
- code generates an invalid error code, then the program has a bug.
- Dump core so we can fix it. */
- abort ();
-
- msg = gettext (re_error_msgid[errcode]);
-
- msg_size = strlen (msg) + 1; /* Includes the null. */
-
- if (errbuf_size != 0)
- {
- if (msg_size > errbuf_size)
- {
-#if defined HAVE_MEMPCPY || defined _LIBC
- *((char *) mempcpy (errbuf, msg, errbuf_size - 1)) = '\0';
-#else
- memcpy (errbuf, msg, errbuf_size - 1);
- errbuf[errbuf_size - 1] = 0;
-#endif
- }
- else
- memcpy (errbuf, msg, msg_size);
- }
-
- return msg_size;
-}
-#ifdef _LIBC
-weak_alias (__regerror, regerror)
-#endif
-
-
-/* Free dynamically allocated space used by PREG. */
-
-void
-regfree (regex_t *preg)
-{
- free (preg->buffer);
- preg->buffer = NULL;
-
- preg->allocated = 0;
- preg->used = 0;
-
- free (preg->fastmap);
- preg->fastmap = NULL;
- preg->fastmap_accurate = 0;
-
- free (preg->translate);
- preg->translate = NULL;
-}
-#ifdef _LIBC
-weak_alias (__regfree, regfree)
-#endif
-
-#endif /* not emacs */
-
-#endif /* not INSIDE_RECURSION */
-
-
-#undef STORE_NUMBER
-#undef STORE_NUMBER_AND_INCR
-#undef EXTRACT_NUMBER
-#undef EXTRACT_NUMBER_AND_INCR
-
-#undef DEBUG_PRINT_COMPILED_PATTERN
-#undef DEBUG_PRINT_DOUBLE_STRING
-
-#undef INIT_FAIL_STACK
-#undef RESET_FAIL_STACK
-#undef DOUBLE_FAIL_STACK
-#undef PUSH_PATTERN_OP
-#undef PUSH_FAILURE_POINTER
-#undef PUSH_FAILURE_INT
-#undef PUSH_FAILURE_ELT
-#undef POP_FAILURE_POINTER
-#undef POP_FAILURE_INT
-#undef POP_FAILURE_ELT
-#undef DEBUG_PUSH
-#undef DEBUG_POP
-#undef PUSH_FAILURE_POINT
-#undef POP_FAILURE_POINT
-
-#undef REG_UNSET_VALUE
-#undef REG_UNSET
-
-#undef PATFETCH
-#undef PATFETCH_RAW
-#undef PATUNFETCH
-#undef TRANSLATE
-
-#undef INIT_BUF_SIZE
-#undef GET_BUFFER_SPACE
-#undef BUF_PUSH
-#undef BUF_PUSH_2
-#undef BUF_PUSH_3
-#undef STORE_JUMP
-#undef STORE_JUMP2
-#undef INSERT_JUMP
-#undef INSERT_JUMP2
-#undef EXTEND_BUFFER
-#undef GET_UNSIGNED_NUMBER
-#undef FREE_STACK_RETURN
-
-# undef POINTER_TO_OFFSET
-# undef MATCHING_IN_FRST_STRING
-# undef PREFETCH
-# undef AT_STRINGS_BEG
-# undef AT_STRINGS_END
-# undef WORDCHAR_P
-# undef FREE_VAR
-# undef FREE_VARIABLES
-# undef NO_HIGHEST_ACTIVE_REG
-# undef NO_LOWEST_ACTIVE_REG
-
-# undef CHAR_T
-# undef UCHAR_T
-# undef COMPILED_BUFFER_VAR
-# undef OFFSET_ADDRESS_SIZE
-# undef CHAR_CLASS_SIZE
-# undef PREFIX
-# undef ARG_PREFIX
-# undef PUT_CHAR
-# undef BYTE
-# undef WCHAR
-
-# define DEFINED_ONCE
diff --git a/gcc-4.7/libiberty/rename.c b/gcc-4.7/libiberty/rename.c
deleted file mode 100644
index ad342ffca..000000000
--- a/gcc-4.7/libiberty/rename.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* rename -- rename a file
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental int rename (const char *@var{old}, const char *@var{new})
-
-Renames a file from @var{old} to @var{new}. If @var{new} already
-exists, it is removed.
-
-@end deftypefn
-
-*/
-
-#include "ansidecl.h"
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <errno.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-int
-rename (const char *zfrom, const char *zto)
-{
- if (link (zfrom, zto) < 0)
- {
- if (errno != EEXIST)
- return -1;
- if (unlink (zto) < 0
- || link (zfrom, zto) < 0)
- return -1;
- }
- return unlink (zfrom);
-}
diff --git a/gcc-4.7/libiberty/rindex.c b/gcc-4.7/libiberty/rindex.c
deleted file mode 100644
index 194ef9fad..000000000
--- a/gcc-4.7/libiberty/rindex.c
+++ /dev/null
@@ -1,21 +0,0 @@
-/* Stub implementation of (obsolete) rindex(). */
-
-/*
-
-@deftypefn Supplemental char* rindex (const char *@var{s}, int @var{c})
-
-Returns a pointer to the last occurrence of the character @var{c} in
-the string @var{s}, or @code{NULL} if not found. The use of @code{rindex} is
-deprecated in new programs in favor of @code{strrchr}.
-
-@end deftypefn
-
-*/
-
-extern char *strrchr (const char *, int);
-
-char *
-rindex (const char *s, int c)
-{
- return strrchr (s, c);
-}
diff --git a/gcc-4.7/libiberty/safe-ctype.c b/gcc-4.7/libiberty/safe-ctype.c
deleted file mode 100644
index 0972b4b35..000000000
--- a/gcc-4.7/libiberty/safe-ctype.c
+++ /dev/null
@@ -1,255 +0,0 @@
-/* <ctype.h> replacement macros.
-
- Copyright (C) 2000, 2001, 2002, 2003, 2004,
- 2005 Free Software Foundation, Inc.
- Contributed by Zack Weinberg <zackw@stanford.edu>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@defvr Extension HOST_CHARSET
-This macro indicates the basic character set and encoding used by the
-host: more precisely, the encoding used for character constants in
-preprocessor @samp{#if} statements (the C "execution character set").
-It is defined by @file{safe-ctype.h}, and will be an integer constant
-with one of the following values:
-
-@ftable @code
-@item HOST_CHARSET_UNKNOWN
-The host character set is unknown - that is, not one of the next two
-possibilities.
-
-@item HOST_CHARSET_ASCII
-The host character set is ASCII.
-
-@item HOST_CHARSET_EBCDIC
-The host character set is some variant of EBCDIC. (Only one of the
-nineteen EBCDIC varying characters is tested; exercise caution.)
-@end ftable
-@end defvr
-
-@deffn Extension ISALPHA (@var{c})
-@deffnx Extension ISALNUM (@var{c})
-@deffnx Extension ISBLANK (@var{c})
-@deffnx Extension ISCNTRL (@var{c})
-@deffnx Extension ISDIGIT (@var{c})
-@deffnx Extension ISGRAPH (@var{c})
-@deffnx Extension ISLOWER (@var{c})
-@deffnx Extension ISPRINT (@var{c})
-@deffnx Extension ISPUNCT (@var{c})
-@deffnx Extension ISSPACE (@var{c})
-@deffnx Extension ISUPPER (@var{c})
-@deffnx Extension ISXDIGIT (@var{c})
-
-These twelve macros are defined by @file{safe-ctype.h}. Each has the
-same meaning as the corresponding macro (with name in lowercase)
-defined by the standard header @file{ctype.h}. For example,
-@code{ISALPHA} returns true for alphabetic characters and false for
-others. However, there are two differences between these macros and
-those provided by @file{ctype.h}:
-
-@itemize @bullet
-@item These macros are guaranteed to have well-defined behavior for all
-values representable by @code{signed char} and @code{unsigned char}, and
-for @code{EOF}.
-
-@item These macros ignore the current locale; they are true for these
-fixed sets of characters:
-@multitable {@code{XDIGIT}} {yada yada yada yada yada yada yada yada}
-@item @code{ALPHA} @tab @kbd{A-Za-z}
-@item @code{ALNUM} @tab @kbd{A-Za-z0-9}
-@item @code{BLANK} @tab @kbd{space tab}
-@item @code{CNTRL} @tab @code{!PRINT}
-@item @code{DIGIT} @tab @kbd{0-9}
-@item @code{GRAPH} @tab @code{ALNUM || PUNCT}
-@item @code{LOWER} @tab @kbd{a-z}
-@item @code{PRINT} @tab @code{GRAPH ||} @kbd{space}
-@item @code{PUNCT} @tab @kbd{`~!@@#$%^&*()_-=+[@{]@}\|;:'",<.>/?}
-@item @code{SPACE} @tab @kbd{space tab \n \r \f \v}
-@item @code{UPPER} @tab @kbd{A-Z}
-@item @code{XDIGIT} @tab @kbd{0-9A-Fa-f}
-@end multitable
-
-Note that, if the host character set is ASCII or a superset thereof,
-all these macros will return false for all values of @code{char} outside
-the range of 7-bit ASCII. In particular, both ISPRINT and ISCNTRL return
-false for characters with numeric values from 128 to 255.
-@end itemize
-@end deffn
-
-@deffn Extension ISIDNUM (@var{c})
-@deffnx Extension ISIDST (@var{c})
-@deffnx Extension IS_VSPACE (@var{c})
-@deffnx Extension IS_NVSPACE (@var{c})
-@deffnx Extension IS_SPACE_OR_NUL (@var{c})
-@deffnx Extension IS_ISOBASIC (@var{c})
-These six macros are defined by @file{safe-ctype.h} and provide
-additional character classes which are useful when doing lexical
-analysis of C or similar languages. They are true for the following
-sets of characters:
-
-@multitable {@code{SPACE_OR_NUL}} {yada yada yada yada yada yada yada yada}
-@item @code{IDNUM} @tab @kbd{A-Za-z0-9_}
-@item @code{IDST} @tab @kbd{A-Za-z_}
-@item @code{VSPACE} @tab @kbd{\r \n}
-@item @code{NVSPACE} @tab @kbd{space tab \f \v \0}
-@item @code{SPACE_OR_NUL} @tab @code{VSPACE || NVSPACE}
-@item @code{ISOBASIC} @tab @code{VSPACE || NVSPACE || PRINT}
-@end multitable
-@end deffn
-
-*/
-
-#include "ansidecl.h"
-#include <safe-ctype.h>
-#include <stdio.h> /* for EOF */
-
-#if EOF != -1
- #error "<safe-ctype.h> requires EOF == -1"
-#endif
-
-/* Shorthand */
-#define bl _sch_isblank
-#define cn _sch_iscntrl
-#define di _sch_isdigit
-#define is _sch_isidst
-#define lo _sch_islower
-#define nv _sch_isnvsp
-#define pn _sch_ispunct
-#define pr _sch_isprint
-#define sp _sch_isspace
-#define up _sch_isupper
-#define vs _sch_isvsp
-#define xd _sch_isxdigit
-
-/* Masks. */
-#define L (const unsigned short) (lo|is |pr) /* lower case letter */
-#define XL (const unsigned short) (lo|is|xd|pr) /* lowercase hex digit */
-#define U (const unsigned short) (up|is |pr) /* upper case letter */
-#define XU (const unsigned short) (up|is|xd|pr) /* uppercase hex digit */
-#define D (const unsigned short) (di |xd|pr) /* decimal digit */
-#define P (const unsigned short) (pn |pr) /* punctuation */
-#define _ (const unsigned short) (pn|is |pr) /* underscore */
-
-#define C (const unsigned short) ( cn) /* control character */
-#define Z (const unsigned short) (nv |cn) /* NUL */
-#define M (const unsigned short) (nv|sp |cn) /* cursor movement: \f \v */
-#define V (const unsigned short) (vs|sp |cn) /* vertical space: \r \n */
-#define T (const unsigned short) (nv|sp|bl|cn) /* tab */
-#define S (const unsigned short) (nv|sp|bl|pr) /* space */
-
-/* Are we ASCII? */
-#if HOST_CHARSET == HOST_CHARSET_ASCII
-
-const unsigned short _sch_istable[256] =
-{
- Z, C, C, C, C, C, C, C, /* NUL SOH STX ETX EOT ENQ ACK BEL */
- C, T, V, M, M, V, C, C, /* BS HT LF VT FF CR SO SI */
- C, C, C, C, C, C, C, C, /* DLE DC1 DC2 DC3 DC4 NAK SYN ETB */
- C, C, C, C, C, C, C, C, /* CAN EM SUB ESC FS GS RS US */
- S, P, P, P, P, P, P, P, /* SP ! " # $ % & ' */
- P, P, P, P, P, P, P, P, /* ( ) * + , - . / */
- D, D, D, D, D, D, D, D, /* 0 1 2 3 4 5 6 7 */
- D, D, P, P, P, P, P, P, /* 8 9 : ; < = > ? */
- P, XU, XU, XU, XU, XU, XU, U, /* @ A B C D E F G */
- U, U, U, U, U, U, U, U, /* H I J K L M N O */
- U, U, U, U, U, U, U, U, /* P Q R S T U V W */
- U, U, U, P, P, P, P, _, /* X Y Z [ \ ] ^ _ */
- P, XL, XL, XL, XL, XL, XL, L, /* ` a b c d e f g */
- L, L, L, L, L, L, L, L, /* h i j k l m n o */
- L, L, L, L, L, L, L, L, /* p q r s t u v w */
- L, L, L, P, P, P, P, C, /* x y z { | } ~ DEL */
-
- /* high half of unsigned char is locale-specific, so all tests are
- false in "C" locale */
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
-};
-
-const unsigned char _sch_tolower[256] =
-{
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64,
-
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
- 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
-
- 91, 92, 93, 94, 95, 96,
-
- 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
- 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z',
-
- 123,124,125,126,127,
-
- 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
- 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159,
- 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175,
- 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191,
-
- 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207,
- 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
- 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
- 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255,
-};
-
-const unsigned char _sch_toupper[256] =
-{
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
- 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
- 64,
-
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
- 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
-
- 91, 92, 93, 94, 95, 96,
-
- 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
- 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
-
- 123,124,125,126,127,
-
- 128,129,130,131, 132,133,134,135, 136,137,138,139, 140,141,142,143,
- 144,145,146,147, 148,149,150,151, 152,153,154,155, 156,157,158,159,
- 160,161,162,163, 164,165,166,167, 168,169,170,171, 172,173,174,175,
- 176,177,178,179, 180,181,182,183, 184,185,186,187, 188,189,190,191,
-
- 192,193,194,195, 196,197,198,199, 200,201,202,203, 204,205,206,207,
- 208,209,210,211, 212,213,214,215, 216,217,218,219, 220,221,222,223,
- 224,225,226,227, 228,229,230,231, 232,233,234,235, 236,237,238,239,
- 240,241,242,243, 244,245,246,247, 248,249,250,251, 252,253,254,255,
-};
-
-#else
-# if HOST_CHARSET == HOST_CHARSET_EBCDIC
- #error "FIXME: write tables for EBCDIC"
-# else
- #error "Unrecognized host character set"
-# endif
-#endif
diff --git a/gcc-4.7/libiberty/setenv.c b/gcc-4.7/libiberty/setenv.c
deleted file mode 100644
index 96917d576..000000000
--- a/gcc-4.7/libiberty/setenv.c
+++ /dev/null
@@ -1,185 +0,0 @@
-/* Copyright (C) 1992, 1995, 1996, 1997, 2002, 2011 Free Software Foundation,
- Inc.
- This file based on setenv.c in the GNU C Library.
-
- The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
-
- The GNU C Library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
-
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
- Boston, MA 02110-1301, USA. */
-
-
-/*
-
-@deftypefn Supplemental int setenv (const char *@var{name}, @
- const char *@var{value}, int @var{overwrite})
-@deftypefnx Supplemental void unsetenv (const char *@var{name})
-
-@code{setenv} adds @var{name} to the environment with value
-@var{value}. If the name was already present in the environment,
-the new value will be stored only if @var{overwrite} is nonzero.
-The companion @code{unsetenv} function removes @var{name} from the
-environment. This implementation is not safe for multithreaded code.
-
-@end deftypefn
-
-*/
-
-#if HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#define setenv libiberty_setenv
-#define unsetenv libiberty_unsetenv
-
-#include "ansidecl.h"
-#include <sys/types.h> /* For `size_t' */
-#include <stdio.h> /* For `NULL' */
-
-#include <errno.h>
-#if !defined(errno) && !defined(HAVE_ERRNO_DECL)
-extern int errno;
-#endif
-#define __set_errno(ev) ((errno) = (ev))
-
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-#if HAVE_STRING_H
-# include <string.h>
-#endif
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#define __environ environ
-#ifndef HAVE_ENVIRON_DECL
-extern char **environ;
-#endif
-
-#undef setenv
-#undef unsetenv
-
-/* LOCK and UNLOCK are defined as no-ops. This makes the libiberty
- * implementation MT-Unsafe. */
-#define LOCK
-#define UNLOCK
-
-/* Below this point, it's verbatim code from the glibc-2.0 implementation */
-
-/* If this variable is not a null pointer we allocated the current
- environment. */
-static char **last_environ;
-
-
-int
-setenv (const char *name, const char *value, int replace)
-{
- register char **ep = 0;
- register size_t size;
- const size_t namelen = strlen (name);
- const size_t vallen = strlen (value) + 1;
-
- LOCK;
-
- size = 0;
- if (__environ != NULL)
- {
- for (ep = __environ; *ep != NULL; ++ep)
- if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=')
- break;
- else
- ++size;
- }
-
- if (__environ == NULL || *ep == NULL)
- {
- char **new_environ;
- if (__environ == last_environ && __environ != NULL)
- /* We allocated this space; we can extend it. */
- new_environ = (char **) realloc (last_environ,
- (size + 2) * sizeof (char *));
- else
- new_environ = (char **) malloc ((size + 2) * sizeof (char *));
-
- if (new_environ == NULL)
- {
- UNLOCK;
- return -1;
- }
-
- new_environ[size] = (char *) malloc (namelen + 1 + vallen);
- if (new_environ[size] == NULL)
- {
- free ((char *) new_environ);
- __set_errno (ENOMEM);
- UNLOCK;
- return -1;
- }
-
- if (__environ != last_environ)
- memcpy ((char *) new_environ, (char *) __environ,
- size * sizeof (char *));
-
- memcpy (new_environ[size], name, namelen);
- new_environ[size][namelen] = '=';
- memcpy (&new_environ[size][namelen + 1], value, vallen);
-
- new_environ[size + 1] = NULL;
-
- last_environ = __environ = new_environ;
- }
- else if (replace)
- {
- size_t len = strlen (*ep);
- if (len + 1 < namelen + 1 + vallen)
- {
- /* The existing string is too short; malloc a new one. */
- char *new_string = (char *) malloc (namelen + 1 + vallen);
- if (new_string == NULL)
- {
- UNLOCK;
- return -1;
- }
- *ep = new_string;
- }
- memcpy (*ep, name, namelen);
- (*ep)[namelen] = '=';
- memcpy (&(*ep)[namelen + 1], value, vallen);
- }
-
- UNLOCK;
-
- return 0;
-}
-
-void
-unsetenv (const char *name)
-{
- const size_t len = strlen (name);
- char **ep;
-
- LOCK;
-
- for (ep = __environ; *ep; ++ep)
- if (!strncmp (*ep, name, len) && (*ep)[len] == '=')
- {
- /* Found it. Remove this pointer by moving later ones back. */
- char **dp = ep;
- do
- dp[0] = dp[1];
- while (*dp++);
- /* Continue the loop in case NAME appears again. */
- }
-
- UNLOCK;
-}
diff --git a/gcc-4.7/libiberty/setproctitle.c b/gcc-4.7/libiberty/setproctitle.c
deleted file mode 100644
index 6a2fe8ce3..000000000
--- a/gcc-4.7/libiberty/setproctitle.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Set the title of a process.
- Copyright (C) 2010, 2011 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef HAVE_SYS_PRCTL_H
-#include <sys/types.h>
-#include <sys/prctl.h>
-#endif
-#include "ansidecl.h"
-
-/*
-
-@deftypefn Supplemental void setproctitle (const char *@var{fmt}, ...)
-
-Set the title of a process to @var{fmt}. va args not supported for now,
-but defined for compatibility with BSD.
-
-@end deftypefn
-
-*/
-
-void
-setproctitle (const char *name ATTRIBUTE_UNUSED, ...)
-{
-#ifdef PR_SET_NAME
- /* On GNU/Linux this sets the top visible "comm", but not
- necessarily the name visible in ps. */
- prctl (PR_SET_NAME, name);
-#endif
-}
diff --git a/gcc-4.7/libiberty/sha1.c b/gcc-4.7/libiberty/sha1.c
deleted file mode 100644
index 6a25ab239..000000000
--- a/gcc-4.7/libiberty/sha1.c
+++ /dev/null
@@ -1,416 +0,0 @@
-/* sha1.c - Functions to compute SHA1 message digest of files or
- memory blocks according to the NIST specification FIPS-180-1.
-
- Copyright (C) 2000, 2001, 2003, 2004, 2005, 2006, 2008 Free Software
- Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by the
- Free Software Foundation; either version 2, or (at your option) any
- later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */
-
-/* Written by Scott G. Miller
- Credits:
- Robert Klep <robert@ilse.nl> -- Expansion function fix
-*/
-
-#include <config.h>
-
-#include "sha1.h"
-
-#include <stddef.h>
-#include <string.h>
-
-#if USE_UNLOCKED_IO
-# include "unlocked-io.h"
-#endif
-
-#ifdef WORDS_BIGENDIAN
-# define SWAP(n) (n)
-#else
-# define SWAP(n) \
- (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24))
-#endif
-
-#define BLOCKSIZE 4096
-#if BLOCKSIZE % 64 != 0
-# error "invalid BLOCKSIZE"
-#endif
-
-/* This array contains the bytes used to pad the buffer to the next
- 64-byte boundary. (RFC 1321, 3.1: Step 1) */
-static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ };
-
-
-/* Take a pointer to a 160 bit block of data (five 32 bit ints) and
- initialize it to the start constants of the SHA1 algorithm. This
- must be called before using hash in the call to sha1_hash. */
-void
-sha1_init_ctx (struct sha1_ctx *ctx)
-{
- ctx->A = 0x67452301;
- ctx->B = 0xefcdab89;
- ctx->C = 0x98badcfe;
- ctx->D = 0x10325476;
- ctx->E = 0xc3d2e1f0;
-
- ctx->total[0] = ctx->total[1] = 0;
- ctx->buflen = 0;
-}
-
-/* Put result from CTX in first 20 bytes following RESBUF. The result
- must be in little endian byte order.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32-bit value. */
-void *
-sha1_read_ctx (const struct sha1_ctx *ctx, void *resbuf)
-{
- ((sha1_uint32 *) resbuf)[0] = SWAP (ctx->A);
- ((sha1_uint32 *) resbuf)[1] = SWAP (ctx->B);
- ((sha1_uint32 *) resbuf)[2] = SWAP (ctx->C);
- ((sha1_uint32 *) resbuf)[3] = SWAP (ctx->D);
- ((sha1_uint32 *) resbuf)[4] = SWAP (ctx->E);
-
- return resbuf;
-}
-
-/* Process the remaining bytes in the internal buffer and the usual
- prolog according to the standard and write the result to RESBUF.
-
- IMPORTANT: On some systems it is required that RESBUF is correctly
- aligned for a 32-bit value. */
-void *
-sha1_finish_ctx (struct sha1_ctx *ctx, void *resbuf)
-{
- /* Take yet unprocessed bytes into account. */
- sha1_uint32 bytes = ctx->buflen;
- size_t size = (bytes < 56) ? 64 / 4 : 64 * 2 / 4;
-
- /* Now count remaining bytes. */
- ctx->total[0] += bytes;
- if (ctx->total[0] < bytes)
- ++ctx->total[1];
-
- /* Put the 64-bit file length in *bits* at the end of the buffer. */
- ctx->buffer[size - 2] = SWAP ((ctx->total[1] << 3) | (ctx->total[0] >> 29));
- ctx->buffer[size - 1] = SWAP (ctx->total[0] << 3);
-
- memcpy (&((char *) ctx->buffer)[bytes], fillbuf, (size - 2) * 4 - bytes);
-
- /* Process last bytes. */
- sha1_process_block (ctx->buffer, size * 4, ctx);
-
- return sha1_read_ctx (ctx, resbuf);
-}
-
-/* Compute SHA1 message digest for bytes read from STREAM. The
- resulting message digest number will be written into the 16 bytes
- beginning at RESBLOCK. */
-int
-sha1_stream (FILE *stream, void *resblock)
-{
- struct sha1_ctx ctx;
- char buffer[BLOCKSIZE + 72];
- size_t sum;
-
- /* Initialize the computation context. */
- sha1_init_ctx (&ctx);
-
- /* Iterate over full file contents. */
- while (1)
- {
- /* We read the file in blocks of BLOCKSIZE bytes. One call of the
- computation function processes the whole buffer so that with the
- next round of the loop another block can be read. */
- size_t n;
- sum = 0;
-
- /* Read block. Take care for partial reads. */
- while (1)
- {
- n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream);
-
- sum += n;
-
- if (sum == BLOCKSIZE)
- break;
-
- if (n == 0)
- {
- /* Check for the error flag IFF N == 0, so that we don't
- exit the loop after a partial read due to e.g., EAGAIN
- or EWOULDBLOCK. */
- if (ferror (stream))
- return 1;
- goto process_partial_block;
- }
-
- /* We've read at least one byte, so ignore errors. But always
- check for EOF, since feof may be true even though N > 0.
- Otherwise, we could end up calling fread after EOF. */
- if (feof (stream))
- goto process_partial_block;
- }
-
- /* Process buffer with BLOCKSIZE bytes. Note that
- BLOCKSIZE % 64 == 0
- */
- sha1_process_block (buffer, BLOCKSIZE, &ctx);
- }
-
- process_partial_block:;
-
- /* Process any remaining bytes. */
- if (sum > 0)
- sha1_process_bytes (buffer, sum, &ctx);
-
- /* Construct result in desired memory. */
- sha1_finish_ctx (&ctx, resblock);
- return 0;
-}
-
-/* Compute SHA1 message digest for LEN bytes beginning at BUFFER. The
- result is always in little endian byte order, so that a byte-wise
- output yields to the wanted ASCII representation of the message
- digest. */
-void *
-sha1_buffer (const char *buffer, size_t len, void *resblock)
-{
- struct sha1_ctx ctx;
-
- /* Initialize the computation context. */
- sha1_init_ctx (&ctx);
-
- /* Process whole buffer but last len % 64 bytes. */
- sha1_process_bytes (buffer, len, &ctx);
-
- /* Put result in desired memory area. */
- return sha1_finish_ctx (&ctx, resblock);
-}
-
-void
-sha1_process_bytes (const void *buffer, size_t len, struct sha1_ctx *ctx)
-{
- /* When we already have some bits in our internal buffer concatenate
- both inputs first. */
- if (ctx->buflen != 0)
- {
- size_t left_over = ctx->buflen;
- size_t add = 128 - left_over > len ? len : 128 - left_over;
-
- memcpy (&((char *) ctx->buffer)[left_over], buffer, add);
- ctx->buflen += add;
-
- if (ctx->buflen > 64)
- {
- sha1_process_block (ctx->buffer, ctx->buflen & ~63, ctx);
-
- ctx->buflen &= 63;
- /* The regions in the following copy operation cannot overlap. */
- memcpy (ctx->buffer,
- &((char *) ctx->buffer)[(left_over + add) & ~63],
- ctx->buflen);
- }
-
- buffer = (const char *) buffer + add;
- len -= add;
- }
-
- /* Process available complete blocks. */
- if (len >= 64)
- {
-#if !_STRING_ARCH_unaligned
-# define alignof(type) offsetof (struct { char c; type x; }, x)
-# define UNALIGNED_P(p) (((size_t) p) % alignof (sha1_uint32) != 0)
- if (UNALIGNED_P (buffer))
- while (len > 64)
- {
- sha1_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx);
- buffer = (const char *) buffer + 64;
- len -= 64;
- }
- else
-#endif
- {
- sha1_process_block (buffer, len & ~63, ctx);
- buffer = (const char *) buffer + (len & ~63);
- len &= 63;
- }
- }
-
- /* Move remaining bytes in internal buffer. */
- if (len > 0)
- {
- size_t left_over = ctx->buflen;
-
- memcpy (&((char *) ctx->buffer)[left_over], buffer, len);
- left_over += len;
- if (left_over >= 64)
- {
- sha1_process_block (ctx->buffer, 64, ctx);
- left_over -= 64;
- memcpy (ctx->buffer, &ctx->buffer[16], left_over);
- }
- ctx->buflen = left_over;
- }
-}
-
-/* --- Code below is the primary difference between md5.c and sha1.c --- */
-
-/* SHA1 round constants */
-#define K1 0x5a827999
-#define K2 0x6ed9eba1
-#define K3 0x8f1bbcdc
-#define K4 0xca62c1d6
-
-/* Round functions. Note that F2 is the same as F4. */
-#define F1(B,C,D) ( D ^ ( B & ( C ^ D ) ) )
-#define F2(B,C,D) (B ^ C ^ D)
-#define F3(B,C,D) ( ( B & C ) | ( D & ( B | C ) ) )
-#define F4(B,C,D) (B ^ C ^ D)
-
-/* Process LEN bytes of BUFFER, accumulating context into CTX.
- It is assumed that LEN % 64 == 0.
- Most of this code comes from GnuPG's cipher/sha1.c. */
-
-void
-sha1_process_block (const void *buffer, size_t len, struct sha1_ctx *ctx)
-{
- const sha1_uint32 *words = (const sha1_uint32*) buffer;
- size_t nwords = len / sizeof (sha1_uint32);
- const sha1_uint32 *endp = words + nwords;
- sha1_uint32 x[16];
- sha1_uint32 a = ctx->A;
- sha1_uint32 b = ctx->B;
- sha1_uint32 c = ctx->C;
- sha1_uint32 d = ctx->D;
- sha1_uint32 e = ctx->E;
-
- /* First increment the byte count. RFC 1321 specifies the possible
- length of the file up to 2^64 bits. Here we only compute the
- number of bytes. Do a double word increment. */
- ctx->total[0] += len;
- if (ctx->total[0] < len)
- ++ctx->total[1];
-
-#define rol(x, n) (((x) << (n)) | ((sha1_uint32) (x) >> (32 - (n))))
-
-#define M(I) ( tm = x[I&0x0f] ^ x[(I-14)&0x0f] \
- ^ x[(I-8)&0x0f] ^ x[(I-3)&0x0f] \
- , (x[I&0x0f] = rol(tm, 1)) )
-
-#define R(A,B,C,D,E,F,K,M) do { E += rol( A, 5 ) \
- + F( B, C, D ) \
- + K \
- + M; \
- B = rol( B, 30 ); \
- } while(0)
-
- while (words < endp)
- {
- sha1_uint32 tm;
- int t;
- for (t = 0; t < 16; t++)
- {
- x[t] = SWAP (*words);
- words++;
- }
-
- R( a, b, c, d, e, F1, K1, x[ 0] );
- R( e, a, b, c, d, F1, K1, x[ 1] );
- R( d, e, a, b, c, F1, K1, x[ 2] );
- R( c, d, e, a, b, F1, K1, x[ 3] );
- R( b, c, d, e, a, F1, K1, x[ 4] );
- R( a, b, c, d, e, F1, K1, x[ 5] );
- R( e, a, b, c, d, F1, K1, x[ 6] );
- R( d, e, a, b, c, F1, K1, x[ 7] );
- R( c, d, e, a, b, F1, K1, x[ 8] );
- R( b, c, d, e, a, F1, K1, x[ 9] );
- R( a, b, c, d, e, F1, K1, x[10] );
- R( e, a, b, c, d, F1, K1, x[11] );
- R( d, e, a, b, c, F1, K1, x[12] );
- R( c, d, e, a, b, F1, K1, x[13] );
- R( b, c, d, e, a, F1, K1, x[14] );
- R( a, b, c, d, e, F1, K1, x[15] );
- R( e, a, b, c, d, F1, K1, M(16) );
- R( d, e, a, b, c, F1, K1, M(17) );
- R( c, d, e, a, b, F1, K1, M(18) );
- R( b, c, d, e, a, F1, K1, M(19) );
- R( a, b, c, d, e, F2, K2, M(20) );
- R( e, a, b, c, d, F2, K2, M(21) );
- R( d, e, a, b, c, F2, K2, M(22) );
- R( c, d, e, a, b, F2, K2, M(23) );
- R( b, c, d, e, a, F2, K2, M(24) );
- R( a, b, c, d, e, F2, K2, M(25) );
- R( e, a, b, c, d, F2, K2, M(26) );
- R( d, e, a, b, c, F2, K2, M(27) );
- R( c, d, e, a, b, F2, K2, M(28) );
- R( b, c, d, e, a, F2, K2, M(29) );
- R( a, b, c, d, e, F2, K2, M(30) );
- R( e, a, b, c, d, F2, K2, M(31) );
- R( d, e, a, b, c, F2, K2, M(32) );
- R( c, d, e, a, b, F2, K2, M(33) );
- R( b, c, d, e, a, F2, K2, M(34) );
- R( a, b, c, d, e, F2, K2, M(35) );
- R( e, a, b, c, d, F2, K2, M(36) );
- R( d, e, a, b, c, F2, K2, M(37) );
- R( c, d, e, a, b, F2, K2, M(38) );
- R( b, c, d, e, a, F2, K2, M(39) );
- R( a, b, c, d, e, F3, K3, M(40) );
- R( e, a, b, c, d, F3, K3, M(41) );
- R( d, e, a, b, c, F3, K3, M(42) );
- R( c, d, e, a, b, F3, K3, M(43) );
- R( b, c, d, e, a, F3, K3, M(44) );
- R( a, b, c, d, e, F3, K3, M(45) );
- R( e, a, b, c, d, F3, K3, M(46) );
- R( d, e, a, b, c, F3, K3, M(47) );
- R( c, d, e, a, b, F3, K3, M(48) );
- R( b, c, d, e, a, F3, K3, M(49) );
- R( a, b, c, d, e, F3, K3, M(50) );
- R( e, a, b, c, d, F3, K3, M(51) );
- R( d, e, a, b, c, F3, K3, M(52) );
- R( c, d, e, a, b, F3, K3, M(53) );
- R( b, c, d, e, a, F3, K3, M(54) );
- R( a, b, c, d, e, F3, K3, M(55) );
- R( e, a, b, c, d, F3, K3, M(56) );
- R( d, e, a, b, c, F3, K3, M(57) );
- R( c, d, e, a, b, F3, K3, M(58) );
- R( b, c, d, e, a, F3, K3, M(59) );
- R( a, b, c, d, e, F4, K4, M(60) );
- R( e, a, b, c, d, F4, K4, M(61) );
- R( d, e, a, b, c, F4, K4, M(62) );
- R( c, d, e, a, b, F4, K4, M(63) );
- R( b, c, d, e, a, F4, K4, M(64) );
- R( a, b, c, d, e, F4, K4, M(65) );
- R( e, a, b, c, d, F4, K4, M(66) );
- R( d, e, a, b, c, F4, K4, M(67) );
- R( c, d, e, a, b, F4, K4, M(68) );
- R( b, c, d, e, a, F4, K4, M(69) );
- R( a, b, c, d, e, F4, K4, M(70) );
- R( e, a, b, c, d, F4, K4, M(71) );
- R( d, e, a, b, c, F4, K4, M(72) );
- R( c, d, e, a, b, F4, K4, M(73) );
- R( b, c, d, e, a, F4, K4, M(74) );
- R( a, b, c, d, e, F4, K4, M(75) );
- R( e, a, b, c, d, F4, K4, M(76) );
- R( d, e, a, b, c, F4, K4, M(77) );
- R( c, d, e, a, b, F4, K4, M(78) );
- R( b, c, d, e, a, F4, K4, M(79) );
-
- a = ctx->A += a;
- b = ctx->B += b;
- c = ctx->C += c;
- d = ctx->D += d;
- e = ctx->E += e;
- }
-}
diff --git a/gcc-4.7/libiberty/sigsetmask.c b/gcc-4.7/libiberty/sigsetmask.c
deleted file mode 100644
index 3b708b16a..000000000
--- a/gcc-4.7/libiberty/sigsetmask.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Version of sigsetmask.c
- Written by Steve Chamberlain (sac@cygnus.com).
- Contributed by Cygnus Support.
- This file is in the public doamin. */
-
-/*
-
-@deftypefn Supplemental int sigsetmask (int @var{set})
-
-Sets the signal mask to the one provided in @var{set} and returns
-the old mask (which, for libiberty's implementation, will always
-be the value @code{1}).
-
-@end deftypefn
-
-*/
-
-#define _POSIX_SOURCE
-#include <ansidecl.h>
-/* Including <sys/types.h> seems to be needed by ISC. */
-#include <sys/types.h>
-#include <signal.h>
-
-extern void abort (void) ATTRIBUTE_NORETURN;
-
-#ifdef SIG_SETMASK
-int
-sigsetmask (int set)
-{
- sigset_t new_sig;
- sigset_t old_sig;
-
- sigemptyset (&new_sig);
- if (set != 0) {
- abort(); /* FIXME, we don't know how to translate old mask to new */
- }
- sigprocmask(SIG_SETMASK, &new_sig, &old_sig);
- return 1; /* FIXME, we always return 1 as old value. */
-}
-#endif
diff --git a/gcc-4.7/libiberty/simple-object-coff.c b/gcc-4.7/libiberty/simple-object-coff.c
deleted file mode 100644
index a7802a520..000000000
--- a/gcc-4.7/libiberty/simple-object-coff.c
+++ /dev/null
@@ -1,804 +0,0 @@
-/* simple-object-coff.c -- routines to manipulate COFF object files.
- Copyright 2010 Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Google.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-#include "libiberty.h"
-#include "simple-object.h"
-
-#include <errno.h>
-#include <stddef.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#include "simple-object-common.h"
-
-/* COFF structures and constants. */
-
-/* COFF file header. */
-
-struct external_filehdr
-{
- unsigned char f_magic[2]; /* magic number */
- unsigned char f_nscns[2]; /* number of sections */
- unsigned char f_timdat[4]; /* time & date stamp */
- unsigned char f_symptr[4]; /* file pointer to symtab */
- unsigned char f_nsyms[4]; /* number of symtab entries */
- unsigned char f_opthdr[2]; /* sizeof(optional hdr) */
- unsigned char f_flags[2]; /* flags */
-};
-
-/* Bits for filehdr f_flags field. */
-
-#define F_EXEC (0x0002)
-#define IMAGE_FILE_SYSTEM (0x1000)
-#define IMAGE_FILE_DLL (0x2000)
-
-/* COFF section header. */
-
-struct external_scnhdr
-{
- unsigned char s_name[8]; /* section name */
- unsigned char s_paddr[4]; /* physical address, aliased s_nlib */
- unsigned char s_vaddr[4]; /* virtual address */
- unsigned char s_size[4]; /* section size */
- unsigned char s_scnptr[4]; /* file ptr to raw data for section */
- unsigned char s_relptr[4]; /* file ptr to relocation */
- unsigned char s_lnnoptr[4]; /* file ptr to line numbers */
- unsigned char s_nreloc[2]; /* number of relocation entries */
- unsigned char s_nlnno[2]; /* number of line number entries */
- unsigned char s_flags[4]; /* flags */
-};
-
-/* The length of the s_name field in struct external_scnhdr. */
-
-#define SCNNMLEN (8)
-
-/* Bits for scnhdr s_flags field. This includes some bits defined
- only for PE. This may need to be moved into coff_magic. */
-
-#define STYP_DATA (1 << 6)
-#define IMAGE_SCN_MEM_DISCARDABLE (1 << 25)
-#define IMAGE_SCN_MEM_SHARED (1 << 28)
-#define IMAGE_SCN_MEM_READ (1 << 30)
-
-#define IMAGE_SCN_ALIGN_POWER_BIT_POS 20
-#define IMAGE_SCN_ALIGN_POWER_CONST(val) \
- (((val) + 1) << IMAGE_SCN_ALIGN_POWER_BIT_POS)
-
-/* COFF symbol table entry. */
-
-#define E_SYMNMLEN 8 /* # characters in a symbol name */
-
-struct external_syment
-{
- union
- {
- unsigned char e_name[E_SYMNMLEN];
-
- struct
- {
- unsigned char e_zeroes[4];
- unsigned char e_offset[4];
- } e;
- } e;
-
- unsigned char e_value[4];
- unsigned char e_scnum[2];
- unsigned char e_type[2];
- unsigned char e_sclass[1];
- unsigned char e_numaux[1];
-};
-
-/* Length allowed for filename in aux sym format 4. */
-
-#define E_FILNMLEN 18
-
-/* Omits x_sym and other unused variants. */
-
-union external_auxent
-{
- /* Aux sym format 4: file. */
- union
- {
- char x_fname[E_FILNMLEN];
- struct
- {
- unsigned char x_zeroes[4];
- unsigned char x_offset[4];
- } x_n;
- } x_file;
- /* Aux sym format 5: section. */
- struct
- {
- unsigned char x_scnlen[4]; /* section length */
- unsigned char x_nreloc[2]; /* # relocation entries */
- unsigned char x_nlinno[2]; /* # line numbers */
- unsigned char x_checksum[4]; /* section COMDAT checksum */
- unsigned char x_associated[2]; /* COMDAT assoc section index */
- unsigned char x_comdat[1]; /* COMDAT selection number */
- } x_scn;
-};
-
-/* Symbol-related constants. */
-
-#define IMAGE_SYM_DEBUG (-2)
-#define IMAGE_SYM_TYPE_NULL (0)
-#define IMAGE_SYM_DTYPE_NULL (0)
-#define IMAGE_SYM_CLASS_STATIC (3)
-#define IMAGE_SYM_CLASS_FILE (103)
-
-#define IMAGE_SYM_TYPE \
- ((IMAGE_SYM_DTYPE_NULL << 4) | IMAGE_SYM_TYPE_NULL)
-
-/* Private data for an simple_object_read. */
-
-struct simple_object_coff_read
-{
- /* Magic number. */
- unsigned short magic;
- /* Whether the file is big-endian. */
- unsigned char is_big_endian;
- /* Number of sections. */
- unsigned short nscns;
- /* File offset of symbol table. */
- off_t symptr;
- /* Number of symbol table entries. */
- unsigned int nsyms;
- /* Flags. */
- unsigned short flags;
- /* Offset of section headers in file. */
- off_t scnhdr_offset;
-};
-
-/* Private data for an simple_object_attributes. */
-
-struct simple_object_coff_attributes
-{
- /* Magic number. */
- unsigned short magic;
- /* Whether the file is big-endian. */
- unsigned char is_big_endian;
- /* Flags. */
- unsigned short flags;
-};
-
-/* There is no magic number which indicates a COFF file as opposed to
- any other sort of file. Instead, each COFF file starts with a
- two-byte magic number which also indicates the type of the target.
- This struct holds a magic number as well as characteristics of that
- COFF format. */
-
-struct coff_magic_struct
-{
- /* Magic number. */
- unsigned short magic;
- /* Whether this magic number is for a big-endian file. */
- unsigned char is_big_endian;
- /* Flag bits, in the f_flags fields, which indicates that this file
- is not a relocatable object file. There is no flag which
- specifically indicates a relocatable object file, it is only
- implied by the absence of these flags. */
- unsigned short non_object_flags;
-};
-
-/* This is a list of the COFF magic numbers which we recognize, namely
- the ones used on Windows. More can be added as needed. */
-
-static const struct coff_magic_struct coff_magic[] =
-{
- /* i386. */
- { 0x14c, 0, F_EXEC | IMAGE_FILE_SYSTEM | IMAGE_FILE_DLL },
- /* x86_64. */
- { 0x8664, 0, F_EXEC | IMAGE_FILE_SYSTEM | IMAGE_FILE_DLL }
-};
-
-/* See if we have a COFF file. */
-
-static void *
-simple_object_coff_match (unsigned char header[SIMPLE_OBJECT_MATCH_HEADER_LEN],
- int descriptor, off_t offset,
- const char *segment_name ATTRIBUTE_UNUSED,
- const char **errmsg, int *err)
-{
- size_t c;
- unsigned short magic_big;
- unsigned short magic_little;
- unsigned short magic;
- size_t i;
- int is_big_endian;
- unsigned short (*fetch_16) (const unsigned char *);
- unsigned int (*fetch_32) (const unsigned char *);
- unsigned char hdrbuf[sizeof (struct external_filehdr)];
- unsigned short flags;
- struct simple_object_coff_read *ocr;
-
- c = sizeof (coff_magic) / sizeof (coff_magic[0]);
- magic_big = simple_object_fetch_big_16 (header);
- magic_little = simple_object_fetch_little_16 (header);
- for (i = 0; i < c; ++i)
- {
- if (coff_magic[i].is_big_endian
- ? coff_magic[i].magic == magic_big
- : coff_magic[i].magic == magic_little)
- break;
- }
- if (i >= c)
- {
- *errmsg = NULL;
- *err = 0;
- return NULL;
- }
- is_big_endian = coff_magic[i].is_big_endian;
-
- magic = is_big_endian ? magic_big : magic_little;
- fetch_16 = (is_big_endian
- ? simple_object_fetch_big_16
- : simple_object_fetch_little_16);
- fetch_32 = (is_big_endian
- ? simple_object_fetch_big_32
- : simple_object_fetch_little_32);
-
- if (!simple_object_internal_read (descriptor, offset, hdrbuf, sizeof hdrbuf,
- errmsg, err))
- return NULL;
-
- flags = fetch_16 (hdrbuf + offsetof (struct external_filehdr, f_flags));
- if ((flags & coff_magic[i].non_object_flags) != 0)
- {
- *errmsg = "not relocatable object file";
- *err = 0;
- return NULL;
- }
-
- ocr = XNEW (struct simple_object_coff_read);
- ocr->magic = magic;
- ocr->is_big_endian = is_big_endian;
- ocr->nscns = fetch_16 (hdrbuf + offsetof (struct external_filehdr, f_nscns));
- ocr->symptr = fetch_32 (hdrbuf
- + offsetof (struct external_filehdr, f_symptr));
- ocr->nsyms = fetch_32 (hdrbuf + offsetof (struct external_filehdr, f_nsyms));
- ocr->flags = flags;
- ocr->scnhdr_offset = (sizeof (struct external_filehdr)
- + fetch_16 (hdrbuf + offsetof (struct external_filehdr,
- f_opthdr)));
-
- return (void *) ocr;
-}
-
-/* Read the string table in a COFF file. */
-
-static char *
-simple_object_coff_read_strtab (simple_object_read *sobj, size_t *strtab_size,
- const char **errmsg, int *err)
-{
- struct simple_object_coff_read *ocr =
- (struct simple_object_coff_read *) sobj->data;
- off_t strtab_offset;
- unsigned char strsizebuf[4];
- size_t strsize;
- char *strtab;
-
- strtab_offset = sobj->offset + ocr->symptr
- + ocr->nsyms * sizeof (struct external_syment);
- if (!simple_object_internal_read (sobj->descriptor, strtab_offset,
- strsizebuf, 4, errmsg, err))
- return NULL;
- strsize = (ocr->is_big_endian
- ? simple_object_fetch_big_32 (strsizebuf)
- : simple_object_fetch_little_32 (strsizebuf));
- strtab = XNEWVEC (char, strsize);
- if (!simple_object_internal_read (sobj->descriptor, strtab_offset,
- (unsigned char *) strtab, strsize, errmsg,
- err))
- {
- XDELETEVEC (strtab);
- return NULL;
- }
- *strtab_size = strsize;
- return strtab;
-}
-
-/* Find all sections in a COFF file. */
-
-static const char *
-simple_object_coff_find_sections (simple_object_read *sobj,
- int (*pfn) (void *, const char *,
- off_t offset, off_t length),
- void *data,
- int *err)
-{
- struct simple_object_coff_read *ocr =
- (struct simple_object_coff_read *) sobj->data;
- size_t scnhdr_size;
- unsigned char *scnbuf;
- const char *errmsg;
- unsigned int (*fetch_32) (const unsigned char *);
- unsigned int nscns;
- char *strtab;
- size_t strtab_size;
- unsigned int i;
-
- scnhdr_size = sizeof (struct external_scnhdr);
- scnbuf = XNEWVEC (unsigned char, scnhdr_size * ocr->nscns);
- if (!simple_object_internal_read (sobj->descriptor,
- sobj->offset + ocr->scnhdr_offset,
- scnbuf, scnhdr_size * ocr->nscns, &errmsg,
- err))
- {
- XDELETEVEC (scnbuf);
- return errmsg;
- }
-
- fetch_32 = (ocr->is_big_endian
- ? simple_object_fetch_big_32
- : simple_object_fetch_little_32);
-
- nscns = ocr->nscns;
- strtab = NULL;
- strtab_size = 0;
- for (i = 0; i < nscns; ++i)
- {
- unsigned char *scnhdr;
- unsigned char *scnname;
- char namebuf[SCNNMLEN + 1];
- char *name;
- off_t scnptr;
- unsigned int size;
-
- scnhdr = scnbuf + i * scnhdr_size;
- scnname = scnhdr + offsetof (struct external_scnhdr, s_name);
- memcpy (namebuf, scnname, SCNNMLEN);
- namebuf[SCNNMLEN] = '\0';
- name = &namebuf[0];
- if (namebuf[0] == '/')
- {
- size_t strindex;
- char *end;
-
- strindex = strtol (namebuf + 1, &end, 10);
- if (*end == '\0')
- {
- /* The real section name is found in the string
- table. */
- if (strtab == NULL)
- {
- strtab = simple_object_coff_read_strtab (sobj,
- &strtab_size,
- &errmsg, err);
- if (strtab == NULL)
- {
- XDELETEVEC (scnbuf);
- return errmsg;
- }
- }
-
- if (strindex < 4 || strindex >= strtab_size)
- {
- XDELETEVEC (strtab);
- XDELETEVEC (scnbuf);
- *err = 0;
- return "section string index out of range";
- }
-
- name = strtab + strindex;
- }
- }
-
- scnptr = fetch_32 (scnhdr + offsetof (struct external_scnhdr, s_scnptr));
- size = fetch_32 (scnhdr + offsetof (struct external_scnhdr, s_size));
-
- if (!(*pfn) (data, name, scnptr, size))
- break;
- }
-
- if (strtab != NULL)
- XDELETEVEC (strtab);
- XDELETEVEC (scnbuf);
-
- return NULL;
-}
-
-/* Fetch the attributes for an simple_object_read. */
-
-static void *
-simple_object_coff_fetch_attributes (simple_object_read *sobj,
- const char **errmsg ATTRIBUTE_UNUSED,
- int *err ATTRIBUTE_UNUSED)
-{
- struct simple_object_coff_read *ocr =
- (struct simple_object_coff_read *) sobj->data;
- struct simple_object_coff_attributes *ret;
-
- ret = XNEW (struct simple_object_coff_attributes);
- ret->magic = ocr->magic;
- ret->is_big_endian = ocr->is_big_endian;
- ret->flags = ocr->flags;
- return ret;
-}
-
-/* Release the private data for an simple_object_read. */
-
-static void
-simple_object_coff_release_read (void *data)
-{
- XDELETE (data);
-}
-
-/* Compare two attributes structures. */
-
-static const char *
-simple_object_coff_attributes_merge (void *todata, void *fromdata, int *err)
-{
- struct simple_object_coff_attributes *to =
- (struct simple_object_coff_attributes *) todata;
- struct simple_object_coff_attributes *from =
- (struct simple_object_coff_attributes *) fromdata;
-
- if (to->magic != from->magic || to->is_big_endian != from->is_big_endian)
- {
- *err = 0;
- return "COFF object format mismatch";
- }
- return NULL;
-}
-
-/* Release the private data for an attributes structure. */
-
-static void
-simple_object_coff_release_attributes (void *data)
-{
- XDELETE (data);
-}
-
-/* Prepare to write out a file. */
-
-static void *
-simple_object_coff_start_write (void *attributes_data,
- const char **errmsg ATTRIBUTE_UNUSED,
- int *err ATTRIBUTE_UNUSED)
-{
- struct simple_object_coff_attributes *attrs =
- (struct simple_object_coff_attributes *) attributes_data;
- struct simple_object_coff_attributes *ret;
-
- /* We're just going to record the attributes, but we need to make a
- copy because the user may delete them. */
- ret = XNEW (struct simple_object_coff_attributes);
- *ret = *attrs;
- return ret;
-}
-
-/* Write out a COFF filehdr. */
-
-static int
-simple_object_coff_write_filehdr (simple_object_write *sobj, int descriptor,
- unsigned int nscns, size_t symtab_offset,
- unsigned int nsyms, const char **errmsg,
- int *err)
-{
- struct simple_object_coff_attributes *attrs =
- (struct simple_object_coff_attributes *) sobj->data;
- unsigned char hdrbuf[sizeof (struct external_filehdr)];
- unsigned char *hdr;
- void (*set_16) (unsigned char *, unsigned short);
- void (*set_32) (unsigned char *, unsigned int);
-
- hdr = &hdrbuf[0];
-
- set_16 = (attrs->is_big_endian
- ? simple_object_set_big_16
- : simple_object_set_little_16);
- set_32 = (attrs->is_big_endian
- ? simple_object_set_big_32
- : simple_object_set_little_32);
-
- memset (hdr, 0, sizeof (struct external_filehdr));
-
- set_16 (hdr + offsetof (struct external_filehdr, f_magic), attrs->magic);
- set_16 (hdr + offsetof (struct external_filehdr, f_nscns), nscns);
- /* f_timdat left as zero. */
- set_32 (hdr + offsetof (struct external_filehdr, f_symptr), symtab_offset);
- set_32 (hdr + offsetof (struct external_filehdr, f_nsyms), nsyms);
- /* f_opthdr left as zero. */
- set_16 (hdr + offsetof (struct external_filehdr, f_flags), attrs->flags);
-
- return simple_object_internal_write (descriptor, 0, hdrbuf,
- sizeof (struct external_filehdr),
- errmsg, err);
-}
-
-/* Write out a COFF section header. */
-
-static int
-simple_object_coff_write_scnhdr (simple_object_write *sobj, int descriptor,
- const char *name, size_t *name_offset,
- off_t scnhdr_offset, size_t scnsize,
- off_t offset, unsigned int align,
- const char **errmsg, int *err)
-{
- struct simple_object_coff_attributes *attrs =
- (struct simple_object_coff_attributes *) sobj->data;
- void (*set_32) (unsigned char *, unsigned int);
- unsigned char hdrbuf[sizeof (struct external_scnhdr)];
- unsigned char *hdr;
- size_t namelen;
- unsigned int flags;
-
- set_32 = (attrs->is_big_endian
- ? simple_object_set_big_32
- : simple_object_set_little_32);
-
- memset (hdrbuf, 0, sizeof hdrbuf);
- hdr = &hdrbuf[0];
-
- namelen = strlen (name);
- if (namelen <= SCNNMLEN)
- strncpy ((char *) hdr + offsetof (struct external_scnhdr, s_name), name,
- SCNNMLEN);
- else
- {
- snprintf ((char *) hdr + offsetof (struct external_scnhdr, s_name),
- SCNNMLEN, "/%lu", (unsigned long) *name_offset);
- *name_offset += namelen + 1;
- }
-
- /* s_paddr left as zero. */
- /* s_vaddr left as zero. */
- set_32 (hdr + offsetof (struct external_scnhdr, s_size), scnsize);
- set_32 (hdr + offsetof (struct external_scnhdr, s_scnptr), offset);
- /* s_relptr left as zero. */
- /* s_lnnoptr left as zero. */
- /* s_nreloc left as zero. */
- /* s_nlnno left as zero. */
- flags = (STYP_DATA | IMAGE_SCN_MEM_DISCARDABLE | IMAGE_SCN_MEM_SHARED
- | IMAGE_SCN_MEM_READ);
- /* PE can represent alignment up to 13. */
- if (align > 13)
- align = 13;
- flags |= IMAGE_SCN_ALIGN_POWER_CONST(align);
- set_32 (hdr + offsetof (struct external_scnhdr, s_flags), flags);
-
- return simple_object_internal_write (descriptor, scnhdr_offset, hdrbuf,
- sizeof (struct external_scnhdr),
- errmsg, err);
-}
-
-/* Write out a complete COFF file. */
-
-static const char *
-simple_object_coff_write_to_file (simple_object_write *sobj, int descriptor,
- int *err)
-{
- struct simple_object_coff_attributes *attrs =
- (struct simple_object_coff_attributes *) sobj->data;
- unsigned int nscns, secnum;
- simple_object_write_section *section;
- off_t scnhdr_offset;
- size_t symtab_offset;
- off_t secsym_offset;
- unsigned int nsyms;
- size_t offset;
- size_t name_offset;
- const char *errmsg;
- unsigned char strsizebuf[4];
- /* The interface doesn't give us access to the name of the input file
- yet. We want to use its basename for the FILE symbol. This is
- what 'gas' uses when told to assemble from stdin. */
- const char *source_filename = "fake";
- size_t sflen;
- union
- {
- struct external_syment sym;
- union external_auxent aux;
- } syms[2];
- void (*set_16) (unsigned char *, unsigned short);
- void (*set_32) (unsigned char *, unsigned int);
-
- set_16 = (attrs->is_big_endian
- ? simple_object_set_big_16
- : simple_object_set_little_16);
- set_32 = (attrs->is_big_endian
- ? simple_object_set_big_32
- : simple_object_set_little_32);
-
- nscns = 0;
- for (section = sobj->sections; section != NULL; section = section->next)
- ++nscns;
-
- scnhdr_offset = sizeof (struct external_filehdr);
- offset = scnhdr_offset + nscns * sizeof (struct external_scnhdr);
- name_offset = 4;
- for (section = sobj->sections; section != NULL; section = section->next)
- {
- size_t mask;
- size_t new_offset;
- size_t scnsize;
- struct simple_object_write_section_buffer *buffer;
-
- mask = (1U << section->align) - 1;
- new_offset = offset & mask;
- new_offset &= ~ mask;
- while (new_offset > offset)
- {
- unsigned char zeroes[16];
- size_t write;
-
- memset (zeroes, 0, sizeof zeroes);
- write = new_offset - offset;
- if (write > sizeof zeroes)
- write = sizeof zeroes;
- if (!simple_object_internal_write (descriptor, offset, zeroes, write,
- &errmsg, err))
- return errmsg;
- }
-
- scnsize = 0;
- for (buffer = section->buffers; buffer != NULL; buffer = buffer->next)
- {
- if (!simple_object_internal_write (descriptor, offset + scnsize,
- ((const unsigned char *)
- buffer->buffer),
- buffer->size, &errmsg, err))
- return errmsg;
- scnsize += buffer->size;
- }
-
- if (!simple_object_coff_write_scnhdr (sobj, descriptor, section->name,
- &name_offset, scnhdr_offset,
- scnsize, offset, section->align,
- &errmsg, err))
- return errmsg;
-
- scnhdr_offset += sizeof (struct external_scnhdr);
- offset += scnsize;
- }
-
- /* Symbol table is always half-word aligned. */
- offset += (offset & 1);
- /* There is a file symbol and a section symbol per section,
- and each of these has a single auxiliary symbol following. */
- nsyms = 2 * (nscns + 1);
- symtab_offset = offset;
- /* Advance across space reserved for symbol table to locate
- start of string table. */
- offset += nsyms * sizeof (struct external_syment);
-
- /* Write out file symbol. */
- memset (&syms[0], 0, sizeof (syms));
- strcpy ((char *)&syms[0].sym.e.e_name[0], ".file");
- set_16 (&syms[0].sym.e_scnum[0], IMAGE_SYM_DEBUG);
- set_16 (&syms[0].sym.e_type[0], IMAGE_SYM_TYPE);
- syms[0].sym.e_sclass[0] = IMAGE_SYM_CLASS_FILE;
- syms[0].sym.e_numaux[0] = 1;
- /* The name need not be nul-terminated if it fits into the x_fname field
- directly, but must be if it has to be placed into the string table. */
- sflen = strlen (source_filename);
- if (sflen <= E_FILNMLEN)
- memcpy (&syms[1].aux.x_file.x_fname[0], source_filename, sflen);
- else
- {
- set_32 (&syms[1].aux.x_file.x_n.x_offset[0], name_offset);
- if (!simple_object_internal_write (descriptor, offset + name_offset,
- ((const unsigned char *)
- source_filename),
- sflen + 1, &errmsg, err))
- return errmsg;
- name_offset += strlen (source_filename) + 1;
- }
- if (!simple_object_internal_write (descriptor, symtab_offset,
- (const unsigned char *) &syms[0],
- sizeof (syms), &errmsg, err))
- return errmsg;
-
- /* Write the string table length, followed by the strings and section
- symbols in step with each other. */
- set_32 (strsizebuf, name_offset);
- if (!simple_object_internal_write (descriptor, offset, strsizebuf, 4,
- &errmsg, err))
- return errmsg;
-
- name_offset = 4;
- secsym_offset = symtab_offset + sizeof (syms);
- memset (&syms[0], 0, sizeof (syms));
- set_16 (&syms[0].sym.e_type[0], IMAGE_SYM_TYPE);
- syms[0].sym.e_sclass[0] = IMAGE_SYM_CLASS_STATIC;
- syms[0].sym.e_numaux[0] = 1;
- secnum = 1;
-
- for (section = sobj->sections; section != NULL; section = section->next)
- {
- size_t namelen;
- size_t scnsize;
- struct simple_object_write_section_buffer *buffer;
-
- namelen = strlen (section->name);
- set_16 (&syms[0].sym.e_scnum[0], secnum++);
- scnsize = 0;
- for (buffer = section->buffers; buffer != NULL; buffer = buffer->next)
- scnsize += buffer->size;
- set_32 (&syms[1].aux.x_scn.x_scnlen[0], scnsize);
- if (namelen > SCNNMLEN)
- {
- set_32 (&syms[0].sym.e.e.e_zeroes[0], 0);
- set_32 (&syms[0].sym.e.e.e_offset[0], name_offset);
- if (!simple_object_internal_write (descriptor, offset + name_offset,
- ((const unsigned char *)
- section->name),
- namelen + 1, &errmsg, err))
- return errmsg;
- name_offset += namelen + 1;
- }
- else
- {
- memcpy (&syms[0].sym.e.e_name[0], section->name,
- strlen (section->name));
- memset (&syms[0].sym.e.e_name[strlen (section->name)], 0,
- E_SYMNMLEN - strlen (section->name));
- }
-
- if (!simple_object_internal_write (descriptor, secsym_offset,
- (const unsigned char *) &syms[0],
- sizeof (syms), &errmsg, err))
- return errmsg;
- secsym_offset += sizeof (syms);
- }
-
- if (!simple_object_coff_write_filehdr (sobj, descriptor, nscns,
- symtab_offset, nsyms, &errmsg, err))
- return errmsg;
-
- return NULL;
-}
-
-/* Release the private data for an simple_object_write structure. */
-
-static void
-simple_object_coff_release_write (void *data)
-{
- XDELETE (data);
-}
-
-/* The COFF functions. */
-
-const struct simple_object_functions simple_object_coff_functions =
-{
- simple_object_coff_match,
- simple_object_coff_find_sections,
- simple_object_coff_fetch_attributes,
- simple_object_coff_release_read,
- simple_object_coff_attributes_merge,
- simple_object_coff_release_attributes,
- simple_object_coff_start_write,
- simple_object_coff_write_to_file,
- simple_object_coff_release_write
-};
diff --git a/gcc-4.7/libiberty/simple-object-common.h b/gcc-4.7/libiberty/simple-object-common.h
deleted file mode 100644
index 264b17995..000000000
--- a/gcc-4.7/libiberty/simple-object-common.h
+++ /dev/null
@@ -1,355 +0,0 @@
-/* simple-object-common.h -- common structs for object file manipulation.
- Copyright (C) 2010 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/* Forward reference. */
-struct simple_object_functions;
-
-/* An object file opened for reading. */
-
-struct simple_object_read_struct
-{
- /* The file descriptor. */
- int descriptor;
- /* The offset within the file. */
- off_t offset;
- /* The functions which do the actual work. */
- const struct simple_object_functions *functions;
- /* Private data for the object file format. */
- void *data;
-};
-
-/* Object file attributes. */
-
-struct simple_object_attributes_struct
-{
- /* The functions which do the actual work. */
- const struct simple_object_functions *functions;
- /* Private data for the object file format. */
- void *data;
-};
-
-/* An object file being created. */
-
-struct simple_object_write_struct
-{
- /* The functions which do the actual work. */
- const struct simple_object_functions *functions;
- /* The segment_name argument from the user. */
- char *segment_name;
- /* The start of the list of sections. */
- simple_object_write_section *sections;
- /* The last entry in the list of sections. */
- simple_object_write_section *last_section;
- /* Private data for the object file format. */
- void *data;
-};
-
-/* A section in an object file being created. */
-
-struct simple_object_write_section_struct
-{
- /* Next in the list of sections attached to an
- simple_object_write. */
- simple_object_write_section *next;
- /* The name of this section. */
- char *name;
- /* The required alignment. */
- unsigned int align;
- /* The first data attached to this section. */
- struct simple_object_write_section_buffer *buffers;
- /* The last data attached to this section. */
- struct simple_object_write_section_buffer *last_buffer;
-};
-
-/* Data attached to a section. */
-
-struct simple_object_write_section_buffer
-{
- /* The next data for this section. */
- struct simple_object_write_section_buffer *next;
- /* The size of the buffer. */
- size_t size;
- /* The actual bytes. */
- const void *buffer;
- /* A buffer to free, or NULL. */
- void *free_buffer;
-};
-
-/* The number of bytes we read from the start of the file to pass to
- the match function. */
-#define SIMPLE_OBJECT_MATCH_HEADER_LEN (16)
-
-/* Format-specific object file functions. */
-
-struct simple_object_functions
-{
- /* If this file matches these functions, return a new value for the
- private data for an simple_object_read. HEADER is the first 16
- bytes of the file. DESCRIPTOR, OFFSET, SEGMENT_NAME, ERRMSG, and
- ERR are as for simple_object_open_read. If this file does not
- match, this function should return NULL with *ERRMSG set to
- NULL. */
- void *(*match) (unsigned char header[SIMPLE_OBJECT_MATCH_HEADER_LEN],
- int descriptor, off_t offset, const char *segment_name,
- const char **errmsg, int *err);
-
- /* Implement simple_object_find_sections. */
- const char *(*find_sections) (simple_object_read *,
- int (*pfn) (void *, const char *,
- off_t offset, off_t length),
- void *data,
- int *err);
-
- /* Return the private data for the attributes for SOBJ. */
- void *(*fetch_attributes) (simple_object_read *sobj, const char **errmsg,
- int *err);
-
- /* Release the private data for an simple_object_read. */
- void (*release_read) (void *);
-
- /* Merge the private data for the attributes of two files. If they
- could be linked together, return NULL. Otherwise return an error
- message. */
- const char *(*attributes_merge) (void *, void *, int *err);
-
- /* Release the private data for an simple_object_attributes. */
- void (*release_attributes) (void *);
-
- /* Start creating an object file. */
- void *(*start_write) (void *attributes_data, const char **errmsg,
- int *err);
-
- /* Write the complete object file. */
- const char *(*write_to_file) (simple_object_write *sobj, int descriptor,
- int *err);
-
- /* Release the private data for an simple_object_write. */
- void (*release_write) (void *);
-};
-
-/* The known object file formats. */
-
-extern const struct simple_object_functions simple_object_coff_functions;
-extern const struct simple_object_functions simple_object_elf_functions;
-extern const struct simple_object_functions simple_object_mach_o_functions;
-
-/* Read SIZE bytes from DESCRIPTOR at file offset OFFSET into BUFFER.
- Return non-zero on success. On failure return 0 and set *ERRMSG
- and *ERR. */
-
-extern int
-simple_object_internal_read (int descriptor, off_t offset,
- unsigned char *buffer, size_t size,
- const char **errmsg, int *err);
-
-/* Write SIZE bytes from BUFFER to DESCRIPTOR at file offset OFFSET.
- Return non-zero on success. On failure return 0 and set *ERRMSG
- and *ERR. */
-
-extern int
-simple_object_internal_write (int descriptor, off_t offset,
- const unsigned char *buffer, size_t size,
- const char **errmsg, int *err);
-
-/* Define ulong_type as an unsigned 64-bit type if available.
- Otherwise just make it unsigned long. */
-
-#ifdef UNSIGNED_64BIT_TYPE
-__extension__ typedef UNSIGNED_64BIT_TYPE ulong_type;
-#else
-typedef unsigned long ulong_type;
-#endif
-
-/* Fetch a big-endian 16-bit value. */
-
-static inline unsigned short
-simple_object_fetch_big_16 (const unsigned char *buf)
-{
- return ((unsigned short) buf[0] << 8) | (unsigned short) buf[1];
-}
-
-/* Fetch a little-endian 16-bit value. */
-
-static inline unsigned short
-simple_object_fetch_little_16 (const unsigned char *buf)
-{
- return ((unsigned short) buf[1] << 8) | (unsigned short) buf[0];
-}
-
-/* Fetch a big-endian 32-bit value. */
-
-static inline unsigned int
-simple_object_fetch_big_32 (const unsigned char *buf)
-{
- return (((unsigned int) buf[0] << 24)
- | ((unsigned int) buf[1] << 16)
- | ((unsigned int) buf[2] << 8)
- | (unsigned int) buf[3]);
-}
-
-/* Fetch a little-endian 32-bit value. */
-
-static inline unsigned int
-simple_object_fetch_little_32 (const unsigned char *buf)
-{
- return (((unsigned int) buf[3] << 24)
- | ((unsigned int) buf[2] << 16)
- | ((unsigned int) buf[1] << 8)
- | (unsigned int) buf[0]);
-}
-
-/* Fetch a big-endian 32-bit value as a ulong_type. */
-
-static inline ulong_type
-simple_object_fetch_big_32_ulong (const unsigned char *buf)
-{
- return (ulong_type) simple_object_fetch_big_32 (buf);
-}
-
-/* Fetch a little-endian 32-bit value as a ulong_type. */
-
-static inline ulong_type
-simple_object_fetch_little_32_ulong (const unsigned char *buf)
-{
- return (ulong_type) simple_object_fetch_little_32 (buf);
-}
-
-#ifdef UNSIGNED_64BIT_TYPE
-
-/* Fetch a big-endian 64-bit value. */
-
-static inline ulong_type
-simple_object_fetch_big_64 (const unsigned char *buf)
-{
- return (((ulong_type) buf[0] << 56)
- | ((ulong_type) buf[1] << 48)
- | ((ulong_type) buf[2] << 40)
- | ((ulong_type) buf[3] << 32)
- | ((ulong_type) buf[4] << 24)
- | ((ulong_type) buf[5] << 16)
- | ((ulong_type) buf[6] << 8)
- | (ulong_type) buf[7]);
-}
-
-/* Fetch a little-endian 64-bit value. */
-
-static inline ulong_type
-simple_object_fetch_little_64 (const unsigned char *buf)
-{
- return (((ulong_type) buf[7] << 56)
- | ((ulong_type) buf[6] << 48)
- | ((ulong_type) buf[5] << 40)
- | ((ulong_type) buf[4] << 32)
- | ((ulong_type) buf[3] << 24)
- | ((ulong_type) buf[2] << 16)
- | ((ulong_type) buf[1] << 8)
- | (ulong_type) buf[0]);
-}
-
-#endif
-
-/* Store a big-endian 16-bit value. */
-
-static inline void
-simple_object_set_big_16 (unsigned char *buf, unsigned short val)
-{
- buf[0] = (val >> 8) & 0xff;
- buf[1] = val & 0xff;
-}
-
-/* Store a little-endian 16-bit value. */
-
-static inline void
-simple_object_set_little_16 (unsigned char *buf, unsigned short val)
-{
- buf[1] = (val >> 8) & 0xff;
- buf[0] = val & 0xff;
-}
-
-/* Store a big-endian 32-bit value. */
-
-static inline void
-simple_object_set_big_32 (unsigned char *buf, unsigned int val)
-{
- buf[0] = (val >> 24) & 0xff;
- buf[1] = (val >> 16) & 0xff;
- buf[2] = (val >> 8) & 0xff;
- buf[3] = val & 0xff;
-}
-
-/* Store a little-endian 32-bit value. */
-
-static inline void
-simple_object_set_little_32 (unsigned char *buf, unsigned int val)
-{
- buf[3] = (val >> 24) & 0xff;
- buf[2] = (val >> 16) & 0xff;
- buf[1] = (val >> 8) & 0xff;
- buf[0] = val & 0xff;
-}
-
-/* Store a big-endian 32-bit value coming in as a ulong_type. */
-
-static inline void
-simple_object_set_big_32_ulong (unsigned char *buf, ulong_type val)
-{
- simple_object_set_big_32 (buf, val);
-}
-
-/* Store a little-endian 32-bit value coming in as a ulong_type. */
-
-static inline void
-simple_object_set_little_32_ulong (unsigned char *buf, ulong_type val)
-{
- simple_object_set_little_32 (buf, val);
-}
-
-#ifdef UNSIGNED_64BIT_TYPE
-
-/* Store a big-endian 64-bit value. */
-
-static inline void
-simple_object_set_big_64 (unsigned char *buf, ulong_type val)
-{
- buf[0] = (val >> 56) & 0xff;
- buf[1] = (val >> 48) & 0xff;
- buf[2] = (val >> 40) & 0xff;
- buf[3] = (val >> 32) & 0xff;
- buf[4] = (val >> 24) & 0xff;
- buf[5] = (val >> 16) & 0xff;
- buf[6] = (val >> 8) & 0xff;
- buf[7] = val & 0xff;
-}
-
-/* Store a little-endian 64-bit value. */
-
-static inline void
-simple_object_set_little_64 (unsigned char *buf, ulong_type val)
-{
- buf[7] = (val >> 56) & 0xff;
- buf[6] = (val >> 48) & 0xff;
- buf[5] = (val >> 40) & 0xff;
- buf[4] = (val >> 32) & 0xff;
- buf[3] = (val >> 24) & 0xff;
- buf[2] = (val >> 16) & 0xff;
- buf[1] = (val >> 8) & 0xff;
- buf[0] = val & 0xff;
-}
-
-#endif
diff --git a/gcc-4.7/libiberty/simple-object-elf.c b/gcc-4.7/libiberty/simple-object-elf.c
deleted file mode 100644
index 4196c537c..000000000
--- a/gcc-4.7/libiberty/simple-object-elf.c
+++ /dev/null
@@ -1,953 +0,0 @@
-/* simple-object-elf.c -- routines to manipulate ELF object files.
- Copyright 2010 Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Google.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-#include "libiberty.h"
-#include "simple-object.h"
-
-#include <errno.h>
-#include <stddef.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#include "simple-object-common.h"
-
-/* ELF structures and constants. */
-
-/* 32-bit ELF file header. */
-
-typedef struct {
- unsigned char e_ident[16]; /* ELF "magic number" */
- unsigned char e_type[2]; /* Identifies object file type */
- unsigned char e_machine[2]; /* Specifies required architecture */
- unsigned char e_version[4]; /* Identifies object file version */
- unsigned char e_entry[4]; /* Entry point virtual address */
- unsigned char e_phoff[4]; /* Program header table file offset */
- unsigned char e_shoff[4]; /* Section header table file offset */
- unsigned char e_flags[4]; /* Processor-specific flags */
- unsigned char e_ehsize[2]; /* ELF header size in bytes */
- unsigned char e_phentsize[2]; /* Program header table entry size */
- unsigned char e_phnum[2]; /* Program header table entry count */
- unsigned char e_shentsize[2]; /* Section header table entry size */
- unsigned char e_shnum[2]; /* Section header table entry count */
- unsigned char e_shstrndx[2]; /* Section header string table index */
-} Elf32_External_Ehdr;
-
-/* 64-bit ELF file header. */
-
-typedef struct {
- unsigned char e_ident[16]; /* ELF "magic number" */
- unsigned char e_type[2]; /* Identifies object file type */
- unsigned char e_machine[2]; /* Specifies required architecture */
- unsigned char e_version[4]; /* Identifies object file version */
- unsigned char e_entry[8]; /* Entry point virtual address */
- unsigned char e_phoff[8]; /* Program header table file offset */
- unsigned char e_shoff[8]; /* Section header table file offset */
- unsigned char e_flags[4]; /* Processor-specific flags */
- unsigned char e_ehsize[2]; /* ELF header size in bytes */
- unsigned char e_phentsize[2]; /* Program header table entry size */
- unsigned char e_phnum[2]; /* Program header table entry count */
- unsigned char e_shentsize[2]; /* Section header table entry size */
- unsigned char e_shnum[2]; /* Section header table entry count */
- unsigned char e_shstrndx[2]; /* Section header string table index */
-} Elf64_External_Ehdr;
-
-/* Indexes and values in e_ident field of Ehdr. */
-
-#define EI_MAG0 0 /* File identification byte 0 index */
-#define ELFMAG0 0x7F /* Magic number byte 0 */
-
-#define EI_MAG1 1 /* File identification byte 1 index */
-#define ELFMAG1 'E' /* Magic number byte 1 */
-
-#define EI_MAG2 2 /* File identification byte 2 index */
-#define ELFMAG2 'L' /* Magic number byte 2 */
-
-#define EI_MAG3 3 /* File identification byte 3 index */
-#define ELFMAG3 'F' /* Magic number byte 3 */
-
-#define EI_CLASS 4 /* File class */
-#define ELFCLASSNONE 0 /* Invalid class */
-#define ELFCLASS32 1 /* 32-bit objects */
-#define ELFCLASS64 2 /* 64-bit objects */
-
-#define EI_DATA 5 /* Data encoding */
-#define ELFDATANONE 0 /* Invalid data encoding */
-#define ELFDATA2LSB 1 /* 2's complement, little endian */
-#define ELFDATA2MSB 2 /* 2's complement, big endian */
-
-#define EI_VERSION 6 /* File version */
-#define EV_CURRENT 1 /* Current version */
-
-#define EI_OSABI 7 /* Operating System/ABI indication */
-
-/* Values for e_type field of Ehdr. */
-
-#define ET_REL 1 /* Relocatable file */
-
-/* Values for e_machine field of Ehdr. */
-
-#define EM_SPARC 2 /* SUN SPARC */
-#define EM_SPARC32PLUS 18 /* Sun's "v8plus" */
-
-/* Special section index values. */
-
-#define SHN_LORESERVE 0xFF00 /* Begin range of reserved indices */
-#define SHN_XINDEX 0xFFFF /* Section index is held elsewhere */
-
-/* 32-bit ELF program header. */
-
-typedef struct {
- unsigned char p_type[4]; /* Identifies program segment type */
- unsigned char p_offset[4]; /* Segment file offset */
- unsigned char p_vaddr[4]; /* Segment virtual address */
- unsigned char p_paddr[4]; /* Segment physical address */
- unsigned char p_filesz[4]; /* Segment size in file */
- unsigned char p_memsz[4]; /* Segment size in memory */
- unsigned char p_flags[4]; /* Segment flags */
- unsigned char p_align[4]; /* Segment alignment, file & memory */
-} Elf32_External_Phdr;
-
-/* 64-bit ELF program header. */
-
-typedef struct {
- unsigned char p_type[4]; /* Identifies program segment type */
- unsigned char p_flags[4]; /* Segment flags */
- unsigned char p_offset[8]; /* Segment file offset */
- unsigned char p_vaddr[8]; /* Segment virtual address */
- unsigned char p_paddr[8]; /* Segment physical address */
- unsigned char p_filesz[8]; /* Segment size in file */
- unsigned char p_memsz[8]; /* Segment size in memory */
- unsigned char p_align[8]; /* Segment alignment, file & memory */
-} Elf64_External_Phdr;
-
-/* 32-bit ELF section header */
-
-typedef struct {
- unsigned char sh_name[4]; /* Section name, index in string tbl */
- unsigned char sh_type[4]; /* Type of section */
- unsigned char sh_flags[4]; /* Miscellaneous section attributes */
- unsigned char sh_addr[4]; /* Section virtual addr at execution */
- unsigned char sh_offset[4]; /* Section file offset */
- unsigned char sh_size[4]; /* Size of section in bytes */
- unsigned char sh_link[4]; /* Index of another section */
- unsigned char sh_info[4]; /* Additional section information */
- unsigned char sh_addralign[4]; /* Section alignment */
- unsigned char sh_entsize[4]; /* Entry size if section holds table */
-} Elf32_External_Shdr;
-
-/* 64-bit ELF section header. */
-
-typedef struct {
- unsigned char sh_name[4]; /* Section name, index in string tbl */
- unsigned char sh_type[4]; /* Type of section */
- unsigned char sh_flags[8]; /* Miscellaneous section attributes */
- unsigned char sh_addr[8]; /* Section virtual addr at execution */
- unsigned char sh_offset[8]; /* Section file offset */
- unsigned char sh_size[8]; /* Size of section in bytes */
- unsigned char sh_link[4]; /* Index of another section */
- unsigned char sh_info[4]; /* Additional section information */
- unsigned char sh_addralign[8]; /* Section alignment */
- unsigned char sh_entsize[8]; /* Entry size if section holds table */
-} Elf64_External_Shdr;
-
-/* Values for sh_type field. */
-
-#define SHT_PROGBITS 1 /* Program data */
-#define SHT_STRTAB 3 /* A string table */
-
-/* Functions to fetch and store different ELF types, depending on the
- endianness and size. */
-
-struct elf_type_functions
-{
- unsigned short (*fetch_Elf_Half) (const unsigned char *);
- unsigned int (*fetch_Elf_Word) (const unsigned char *);
- ulong_type (*fetch_Elf_Addr) (const unsigned char *);
- void (*set_Elf_Half) (unsigned char *, unsigned short);
- void (*set_Elf_Word) (unsigned char *, unsigned int);
- void (*set_Elf_Addr) (unsigned char *, ulong_type);
-};
-
-static const struct elf_type_functions elf_big_32_functions =
-{
- simple_object_fetch_big_16,
- simple_object_fetch_big_32,
- simple_object_fetch_big_32_ulong,
- simple_object_set_big_16,
- simple_object_set_big_32,
- simple_object_set_big_32_ulong
-};
-
-static const struct elf_type_functions elf_little_32_functions =
-{
- simple_object_fetch_little_16,
- simple_object_fetch_little_32,
- simple_object_fetch_little_32_ulong,
- simple_object_set_little_16,
- simple_object_set_little_32,
- simple_object_set_little_32_ulong
-};
-
-#ifdef UNSIGNED_64BIT_TYPE
-
-static const struct elf_type_functions elf_big_64_functions =
-{
- simple_object_fetch_big_16,
- simple_object_fetch_big_32,
- simple_object_fetch_big_64,
- simple_object_set_big_16,
- simple_object_set_big_32,
- simple_object_set_big_64
-};
-
-static const struct elf_type_functions elf_little_64_functions =
-{
- simple_object_fetch_little_16,
- simple_object_fetch_little_32,
- simple_object_fetch_little_64,
- simple_object_set_little_16,
- simple_object_set_little_32,
- simple_object_set_little_64
-};
-
-#endif
-
-/* Hideous macro to fetch the value of a field from an external ELF
- struct of some sort. TYPEFUNCS is the set of type functions.
- BUFFER points to the external data. STRUCTTYPE is the appropriate
- struct type. FIELD is a field within the struct. TYPE is the type
- of the field in the struct: Elf_Half, Elf_Word, or Elf_Addr. */
-
-#define ELF_FETCH_STRUCT_FIELD(TYPEFUNCS, STRUCTTYPE, FIELD, BUFFER, TYPE) \
- ((TYPEFUNCS)->fetch_ ## TYPE ((BUFFER) + offsetof (STRUCTTYPE, FIELD)))
-
-/* Even more hideous macro to fetch the value of FIELD from BUFFER.
- SIZE is 32 or 64. STRUCTTYPE is the name of the struct from
- elf/external.h: Ehdr, Shdr, etc. FIELD is the name of a field in
- the struct. TYPE is the type of the field in the struct: Elf_Half,
- Elf_Word, or Elf_Addr. */
-
-#define ELF_FETCH_SIZED_FIELD(TYPEFUNCS, SIZE, STRUCTTYPE, BUFFER, \
- FIELD, TYPE) \
- ELF_FETCH_STRUCT_FIELD (TYPEFUNCS, \
- Elf ## SIZE ## _External_ ## STRUCTTYPE, \
- FIELD, BUFFER, TYPE)
-
-/* Like ELF_FETCH_SIZED_FIELD but taking an ELFCLASS value. */
-
-#define ELF_FETCH_FIELD(TYPEFUNCS, CLASS, STRUCTTYPE, BUFFER, \
- FIELD, TYPE) \
- ((CLASS) == ELFCLASS32 \
- ? ELF_FETCH_SIZED_FIELD (TYPEFUNCS, 32, STRUCTTYPE, BUFFER, FIELD, \
- TYPE) \
- : ELF_FETCH_SIZED_FIELD (TYPEFUNCS, 64, STRUCTTYPE, BUFFER, FIELD, \
- TYPE))
-
-/* Hideous macro to set the value of a field in an external ELF
- structure to VAL. TYPEFUNCS is the set of type functions. BUFFER
- points to the external data. STRUCTTYPE is the appropriate
- structure type. FIELD is a field within the struct. TYPE is the
- type of the field in the struct: Elf_Half, Elf_Word, or
- Elf_Addr. */
-
-#define ELF_SET_STRUCT_FIELD(TYPEFUNCS, STRUCTTYPE, FIELD, BUFFER, TYPE, VAL) \
- (TYPEFUNCS)->set_ ## TYPE ((BUFFER) + offsetof (STRUCTTYPE, FIELD), (VAL))
-
-/* Even more hideous macro to set the value of FIELD in BUFFER to VAL.
- SIZE is 32 or 64. STRUCTTYPE is the name of the struct from
- elf/external.h: Ehdr, Shdr, etc. FIELD is the name of a field in
- the struct. TYPE is the type of the field in the struct: Elf_Half,
- Elf_Word, or Elf_Addr. */
-
-#define ELF_SET_SIZED_FIELD(TYPEFUNCS, SIZE, STRUCTTYPE, BUFFER, FIELD, \
- TYPE, VAL) \
- ELF_SET_STRUCT_FIELD (TYPEFUNCS, \
- Elf ## SIZE ## _External_ ## STRUCTTYPE, \
- FIELD, BUFFER, TYPE, VAL)
-
-/* Like ELF_SET_SIZED_FIELD but taking an ELFCLASS value. */
-
-#define ELF_SET_FIELD(TYPEFUNCS, CLASS, STRUCTTYPE, BUFFER, FIELD, \
- TYPE, VAL) \
- ((CLASS) == ELFCLASS32 \
- ? ELF_SET_SIZED_FIELD (TYPEFUNCS, 32, STRUCTTYPE, BUFFER, FIELD, \
- TYPE, VAL) \
- : ELF_SET_SIZED_FIELD (TYPEFUNCS, 64, STRUCTTYPE, BUFFER, FIELD, \
- TYPE, VAL))
-
-/* Private data for an simple_object_read. */
-
-struct simple_object_elf_read
-{
- /* Type functions. */
- const struct elf_type_functions* type_functions;
- /* Elf data. */
- unsigned char ei_data;
- /* Elf class. */
- unsigned char ei_class;
- /* ELF OS ABI. */
- unsigned char ei_osabi;
- /* Elf machine number. */
- unsigned short machine;
- /* Processor specific flags. */
- unsigned int flags;
- /* File offset of section headers. */
- ulong_type shoff;
- /* Number of sections. */
- unsigned int shnum;
- /* Index of string table section header. */
- unsigned int shstrndx;
-};
-
-/* Private data for an simple_object_attributes. */
-
-struct simple_object_elf_attributes
-{
- /* Type functions. */
- const struct elf_type_functions* type_functions;
- /* Elf data. */
- unsigned char ei_data;
- /* Elf class. */
- unsigned char ei_class;
- /* ELF OS ABI. */
- unsigned char ei_osabi;
- /* Elf machine number. */
- unsigned short machine;
- /* Processor specific flags. */
- unsigned int flags;
-};
-
-/* See if we have an ELF file. */
-
-static void *
-simple_object_elf_match (unsigned char header[SIMPLE_OBJECT_MATCH_HEADER_LEN],
- int descriptor, off_t offset,
- const char *segment_name ATTRIBUTE_UNUSED,
- const char **errmsg, int *err)
-{
- unsigned char ei_data;
- unsigned char ei_class;
- const struct elf_type_functions *type_functions;
- unsigned char ehdr[sizeof (Elf64_External_Ehdr)];
- struct simple_object_elf_read *eor;
-
- if (header[EI_MAG0] != ELFMAG0
- || header[EI_MAG1] != ELFMAG1
- || header[EI_MAG2] != ELFMAG2
- || header[EI_MAG3] != ELFMAG3
- || header[EI_VERSION] != EV_CURRENT)
- {
- *errmsg = NULL;
- *err = 0;
- return NULL;
- }
-
- ei_data = header[EI_DATA];
- if (ei_data != ELFDATA2LSB && ei_data != ELFDATA2MSB)
- {
- *errmsg = "unknown ELF endianness";
- *err = 0;
- return NULL;
- }
-
- ei_class = header[EI_CLASS];
- switch (ei_class)
- {
- case ELFCLASS32:
- type_functions = (ei_data == ELFDATA2LSB
- ? &elf_little_32_functions
- : &elf_big_32_functions);
- break;
-
- case ELFCLASS64:
-#ifndef UNSIGNED_64BIT_TYPE
- *errmsg = "64-bit ELF objects not supported";
- *err = 0;
- return NULL;
-#else
- type_functions = (ei_data == ELFDATA2LSB
- ? &elf_little_64_functions
- : &elf_big_64_functions);
- break;
-#endif
-
- default:
- *errmsg = "unrecognized ELF size";
- *err = 0;
- return NULL;
- }
-
- if (!simple_object_internal_read (descriptor, offset, ehdr, sizeof ehdr,
- errmsg, err))
- return NULL;
-
- eor = XNEW (struct simple_object_elf_read);
- eor->type_functions = type_functions;
- eor->ei_data = ei_data;
- eor->ei_class = ei_class;
- eor->ei_osabi = header[EI_OSABI];
- eor->machine = ELF_FETCH_FIELD (type_functions, ei_class, Ehdr, ehdr,
- e_machine, Elf_Half);
- eor->flags = ELF_FETCH_FIELD (type_functions, ei_class, Ehdr, ehdr,
- e_flags, Elf_Word);
- eor->shoff = ELF_FETCH_FIELD (type_functions, ei_class, Ehdr, ehdr,
- e_shoff, Elf_Addr);
- eor->shnum = ELF_FETCH_FIELD (type_functions, ei_class, Ehdr, ehdr,
- e_shnum, Elf_Half);
- eor->shstrndx = ELF_FETCH_FIELD (type_functions, ei_class, Ehdr, ehdr,
- e_shstrndx, Elf_Half);
-
- if ((eor->shnum == 0 || eor->shstrndx == SHN_XINDEX)
- && eor->shoff != 0)
- {
- unsigned char shdr[sizeof (Elf64_External_Shdr)];
-
- /* Object file has more than 0xffff sections. */
-
- if (!simple_object_internal_read (descriptor, offset + eor->shoff, shdr,
- (ei_class == ELFCLASS32
- ? sizeof (Elf32_External_Shdr)
- : sizeof (Elf64_External_Shdr)),
- errmsg, err))
- {
- XDELETE (eor);
- return NULL;
- }
-
- if (eor->shnum == 0)
- eor->shnum = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
- shdr, sh_size, Elf_Addr);
-
- if (eor->shstrndx == SHN_XINDEX)
- {
- eor->shstrndx = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
- shdr, sh_link, Elf_Word);
-
- /* Versions of the GNU binutils between 2.12 and 2.18 did
- not handle objects with more than SHN_LORESERVE sections
- correctly. All large section indexes were offset by
- 0x100. There is more information at
- http://sourceware.org/bugzilla/show_bug.cgi?id-5900 .
- Fortunately these object files are easy to detect, as the
- GNU binutils always put the section header string table
- near the end of the list of sections. Thus if the
- section header string table index is larger than the
- number of sections, then we know we have to subtract
- 0x100 to get the real section index. */
- if (eor->shstrndx >= eor->shnum
- && eor->shstrndx >= SHN_LORESERVE + 0x100)
- eor->shstrndx -= 0x100;
- }
- }
-
- if (eor->shstrndx >= eor->shnum)
- {
- *errmsg = "invalid ELF shstrndx >= shnum";
- *err = 0;
- XDELETE (eor);
- return NULL;
- }
-
- return (void *) eor;
-}
-
-/* Find all sections in an ELF file. */
-
-static const char *
-simple_object_elf_find_sections (simple_object_read *sobj,
- int (*pfn) (void *, const char *,
- off_t offset, off_t length),
- void *data,
- int *err)
-{
- struct simple_object_elf_read *eor =
- (struct simple_object_elf_read *) sobj->data;
- const struct elf_type_functions *type_functions = eor->type_functions;
- unsigned char ei_class = eor->ei_class;
- size_t shdr_size;
- unsigned int shnum;
- unsigned char *shdrs;
- const char *errmsg;
- unsigned char *shstrhdr;
- size_t name_size;
- off_t shstroff;
- unsigned char *names;
- unsigned int i;
-
- shdr_size = (ei_class == ELFCLASS32
- ? sizeof (Elf32_External_Shdr)
- : sizeof (Elf64_External_Shdr));
-
- /* Read the section headers. We skip section 0, which is not a
- useful section. */
-
- shnum = eor->shnum;
- shdrs = XNEWVEC (unsigned char, shdr_size * (shnum - 1));
-
- if (!simple_object_internal_read (sobj->descriptor,
- sobj->offset + eor->shoff + shdr_size,
- shdrs,
- shdr_size * (shnum - 1),
- &errmsg, err))
- {
- XDELETEVEC (shdrs);
- return errmsg;
- }
-
- /* Read the section names. */
-
- shstrhdr = shdrs + (eor->shstrndx - 1) * shdr_size;
- name_size = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
- shstrhdr, sh_size, Elf_Addr);
- shstroff = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
- shstrhdr, sh_offset, Elf_Addr);
- names = XNEWVEC (unsigned char, name_size);
- if (!simple_object_internal_read (sobj->descriptor,
- sobj->offset + shstroff,
- names, name_size, &errmsg, err))
- {
- XDELETEVEC (names);
- XDELETEVEC (shdrs);
- return errmsg;
- }
-
- for (i = 1; i < shnum; ++i)
- {
- unsigned char *shdr;
- unsigned int sh_name;
- const char *name;
- off_t offset;
- off_t length;
-
- shdr = shdrs + (i - 1) * shdr_size;
- sh_name = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
- shdr, sh_name, Elf_Word);
- if (sh_name >= name_size)
- {
- *err = 0;
- XDELETEVEC (names);
- XDELETEVEC (shdrs);
- return "ELF section name out of range";
- }
-
- name = (const char *) names + sh_name;
- offset = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
- shdr, sh_offset, Elf_Addr);
- length = ELF_FETCH_FIELD (type_functions, ei_class, Shdr,
- shdr, sh_size, Elf_Addr);
-
- if (!(*pfn) (data, name, offset, length))
- break;
- }
-
- XDELETEVEC (names);
- XDELETEVEC (shdrs);
-
- return NULL;
-}
-
-/* Fetch the attributes for an simple_object_read. */
-
-static void *
-simple_object_elf_fetch_attributes (simple_object_read *sobj,
- const char **errmsg ATTRIBUTE_UNUSED,
- int *err ATTRIBUTE_UNUSED)
-{
- struct simple_object_elf_read *eor =
- (struct simple_object_elf_read *) sobj->data;
- struct simple_object_elf_attributes *ret;
-
- ret = XNEW (struct simple_object_elf_attributes);
- ret->type_functions = eor->type_functions;
- ret->ei_data = eor->ei_data;
- ret->ei_class = eor->ei_class;
- ret->ei_osabi = eor->ei_osabi;
- ret->machine = eor->machine;
- ret->flags = eor->flags;
- return ret;
-}
-
-/* Release the privata data for an simple_object_read. */
-
-static void
-simple_object_elf_release_read (void *data)
-{
- XDELETE (data);
-}
-
-/* Compare two attributes structures. */
-
-static const char *
-simple_object_elf_attributes_merge (void *todata, void *fromdata, int *err)
-{
- struct simple_object_elf_attributes *to =
- (struct simple_object_elf_attributes *) todata;
- struct simple_object_elf_attributes *from =
- (struct simple_object_elf_attributes *) fromdata;
-
- if (to->ei_data != from->ei_data || to->ei_class != from->ei_class)
- {
- *err = 0;
- return "ELF object format mismatch";
- }
-
- if (to->machine != from->machine)
- {
- int ok;
-
- /* EM_SPARC and EM_SPARC32PLUS are compatible and force an
- output of EM_SPARC32PLUS. */
- ok = 0;
- switch (to->machine)
- {
- case EM_SPARC:
- if (from->machine == EM_SPARC32PLUS)
- {
- to->machine = from->machine;
- ok = 1;
- }
- break;
-
- case EM_SPARC32PLUS:
- if (from->machine == EM_SPARC)
- ok = 1;
- break;
-
- default:
- break;
- }
-
- if (!ok)
- {
- *err = 0;
- return "ELF machine number mismatch";
- }
- }
-
- return NULL;
-}
-
-/* Release the private data for an attributes structure. */
-
-static void
-simple_object_elf_release_attributes (void *data)
-{
- XDELETE (data);
-}
-
-/* Prepare to write out a file. */
-
-static void *
-simple_object_elf_start_write (void *attributes_data,
- const char **errmsg ATTRIBUTE_UNUSED,
- int *err ATTRIBUTE_UNUSED)
-{
- struct simple_object_elf_attributes *attrs =
- (struct simple_object_elf_attributes *) attributes_data;
- struct simple_object_elf_attributes *ret;
-
- /* We're just going to record the attributes, but we need to make a
- copy because the user may delete them. */
- ret = XNEW (struct simple_object_elf_attributes);
- *ret = *attrs;
- return ret;
-}
-
-/* Write out an ELF ehdr. */
-
-static int
-simple_object_elf_write_ehdr (simple_object_write *sobj, int descriptor,
- const char **errmsg, int *err)
-{
- struct simple_object_elf_attributes *attrs =
- (struct simple_object_elf_attributes *) sobj->data;
- const struct elf_type_functions* fns;
- unsigned char cl;
- size_t ehdr_size;
- unsigned char buf[sizeof (Elf64_External_Ehdr)];
- simple_object_write_section *section;
- unsigned int shnum;
-
- fns = attrs->type_functions;
- cl = attrs->ei_class;
-
- shnum = 0;
- for (section = sobj->sections; section != NULL; section = section->next)
- ++shnum;
- if (shnum > 0)
- {
- /* Add a section header for the dummy section and one for
- .shstrtab. */
- shnum += 2;
- }
-
- ehdr_size = (cl == ELFCLASS32
- ? sizeof (Elf32_External_Ehdr)
- : sizeof (Elf64_External_Ehdr));
- memset (buf, 0, sizeof (Elf64_External_Ehdr));
-
- buf[EI_MAG0] = ELFMAG0;
- buf[EI_MAG1] = ELFMAG1;
- buf[EI_MAG2] = ELFMAG2;
- buf[EI_MAG3] = ELFMAG3;
- buf[EI_CLASS] = cl;
- buf[EI_DATA] = attrs->ei_data;
- buf[EI_VERSION] = EV_CURRENT;
- buf[EI_OSABI] = attrs->ei_osabi;
-
- ELF_SET_FIELD (fns, cl, Ehdr, buf, e_type, Elf_Half, ET_REL);
- ELF_SET_FIELD (fns, cl, Ehdr, buf, e_machine, Elf_Half, attrs->machine);
- ELF_SET_FIELD (fns, cl, Ehdr, buf, e_version, Elf_Word, EV_CURRENT);
- /* e_entry left as zero. */
- /* e_phoff left as zero. */
- ELF_SET_FIELD (fns, cl, Ehdr, buf, e_shoff, Elf_Addr, ehdr_size);
- ELF_SET_FIELD (fns, cl, Ehdr, buf, e_flags, Elf_Word, attrs->flags);
- ELF_SET_FIELD (fns, cl, Ehdr, buf, e_ehsize, Elf_Half, ehdr_size);
- ELF_SET_FIELD (fns, cl, Ehdr, buf, e_phentsize, Elf_Half,
- (cl == ELFCLASS32
- ? sizeof (Elf32_External_Phdr)
- : sizeof (Elf64_External_Phdr)));
- /* e_phnum left as zero. */
- ELF_SET_FIELD (fns, cl, Ehdr, buf, e_shentsize, Elf_Half,
- (cl == ELFCLASS32
- ? sizeof (Elf32_External_Shdr)
- : sizeof (Elf64_External_Shdr)));
- ELF_SET_FIELD (fns, cl, Ehdr, buf, e_shnum, Elf_Half, shnum);
- ELF_SET_FIELD (fns, cl, Ehdr, buf, e_shstrndx, Elf_Half,
- shnum == 0 ? 0 : shnum - 1);
-
- return simple_object_internal_write (descriptor, 0, buf, ehdr_size,
- errmsg, err);
-}
-
-/* Write out an ELF shdr. */
-
-static int
-simple_object_elf_write_shdr (simple_object_write *sobj, int descriptor,
- off_t offset, unsigned int sh_name,
- unsigned int sh_type, unsigned int sh_flags,
- unsigned int sh_offset, unsigned int sh_size,
- unsigned int sh_addralign, const char **errmsg,
- int *err)
-{
- struct simple_object_elf_attributes *attrs =
- (struct simple_object_elf_attributes *) sobj->data;
- const struct elf_type_functions* fns;
- unsigned char cl;
- size_t shdr_size;
- unsigned char buf[sizeof (Elf64_External_Shdr)];
-
- fns = attrs->type_functions;
- cl = attrs->ei_class;
-
- shdr_size = (cl == ELFCLASS32
- ? sizeof (Elf32_External_Shdr)
- : sizeof (Elf64_External_Shdr));
- memset (buf, 0, sizeof (Elf64_External_Shdr));
-
- ELF_SET_FIELD (fns, cl, Shdr, buf, sh_name, Elf_Word, sh_name);
- ELF_SET_FIELD (fns, cl, Shdr, buf, sh_type, Elf_Word, sh_type);
- ELF_SET_FIELD (fns, cl, Shdr, buf, sh_flags, Elf_Addr, sh_flags);
- ELF_SET_FIELD (fns, cl, Shdr, buf, sh_offset, Elf_Addr, sh_offset);
- ELF_SET_FIELD (fns, cl, Shdr, buf, sh_size, Elf_Addr, sh_size);
- /* sh_link left as zero. */
- /* sh_info left as zero. */
- ELF_SET_FIELD (fns, cl, Shdr, buf, sh_addralign, Elf_Addr, sh_addralign);
- /* sh_entsize left as zero. */
-
- return simple_object_internal_write (descriptor, offset, buf, shdr_size,
- errmsg, err);
-}
-
-/* Write out a complete ELF file.
- Ehdr
- initial dummy Shdr
- user-created Shdrs
- .shstrtab Shdr
- user-created section data
- .shstrtab data */
-
-static const char *
-simple_object_elf_write_to_file (simple_object_write *sobj, int descriptor,
- int *err)
-{
- struct simple_object_elf_attributes *attrs =
- (struct simple_object_elf_attributes *) sobj->data;
- unsigned char cl;
- size_t ehdr_size;
- size_t shdr_size;
- const char *errmsg;
- simple_object_write_section *section;
- unsigned int shnum;
- size_t shdr_offset;
- size_t sh_offset;
- size_t sh_name;
- unsigned char zero;
-
- if (!simple_object_elf_write_ehdr (sobj, descriptor, &errmsg, err))
- return errmsg;
-
- cl = attrs->ei_class;
- if (cl == ELFCLASS32)
- {
- ehdr_size = sizeof (Elf32_External_Ehdr);
- shdr_size = sizeof (Elf32_External_Shdr);
- }
- else
- {
- ehdr_size = sizeof (Elf64_External_Ehdr);
- shdr_size = sizeof (Elf64_External_Shdr);
- }
-
- shnum = 0;
- for (section = sobj->sections; section != NULL; section = section->next)
- ++shnum;
- if (shnum == 0)
- return NULL;
-
- /* Add initial dummy Shdr and .shstrtab. */
- shnum += 2;
-
- shdr_offset = ehdr_size;
- sh_offset = shdr_offset + shnum * shdr_size;
-
- if (!simple_object_elf_write_shdr (sobj, descriptor, shdr_offset,
- 0, 0, 0, 0, 0, 0, &errmsg, err))
- return errmsg;
-
- shdr_offset += shdr_size;
-
- sh_name = 1;
- for (section = sobj->sections; section != NULL; section = section->next)
- {
- size_t mask;
- size_t new_sh_offset;
- size_t sh_size;
- struct simple_object_write_section_buffer *buffer;
-
- mask = (1U << section->align) - 1;
- new_sh_offset = sh_offset + mask;
- new_sh_offset &= ~ mask;
- while (new_sh_offset > sh_offset)
- {
- unsigned char zeroes[16];
- size_t write;
-
- memset (zeroes, 0, sizeof zeroes);
- write = new_sh_offset - sh_offset;
- if (write > sizeof zeroes)
- write = sizeof zeroes;
- if (!simple_object_internal_write (descriptor, sh_offset, zeroes,
- write, &errmsg, err))
- return errmsg;
- sh_offset += write;
- }
-
- sh_size = 0;
- for (buffer = section->buffers; buffer != NULL; buffer = buffer->next)
- {
- if (!simple_object_internal_write (descriptor, sh_offset + sh_size,
- ((const unsigned char *)
- buffer->buffer),
- buffer->size, &errmsg, err))
- return errmsg;
- sh_size += buffer->size;
- }
-
- if (!simple_object_elf_write_shdr (sobj, descriptor, shdr_offset,
- sh_name, SHT_PROGBITS, 0, sh_offset,
- sh_size, 1U << section->align,
- &errmsg, err))
- return errmsg;
-
- shdr_offset += shdr_size;
- sh_name += strlen (section->name) + 1;
- sh_offset += sh_size;
- }
-
- if (!simple_object_elf_write_shdr (sobj, descriptor, shdr_offset,
- sh_name, SHT_STRTAB, 0, sh_offset,
- sh_name + strlen (".shstrtab") + 1,
- 1, &errmsg, err))
- return errmsg;
-
- /* .shstrtab has a leading zero byte. */
- zero = 0;
- if (!simple_object_internal_write (descriptor, sh_offset, &zero, 1,
- &errmsg, err))
- return errmsg;
- ++sh_offset;
-
- for (section = sobj->sections; section != NULL; section = section->next)
- {
- size_t len;
-
- len = strlen (section->name) + 1;
- if (!simple_object_internal_write (descriptor, sh_offset,
- (const unsigned char *) section->name,
- len, &errmsg, err))
- return errmsg;
- sh_offset += len;
- }
-
- if (!simple_object_internal_write (descriptor, sh_offset,
- (const unsigned char *) ".shstrtab",
- strlen (".shstrtab") + 1, &errmsg, err))
- return errmsg;
-
- return NULL;
-}
-
-/* Release the private data for an simple_object_write structure. */
-
-static void
-simple_object_elf_release_write (void *data)
-{
- XDELETE (data);
-}
-
-/* The ELF functions. */
-
-const struct simple_object_functions simple_object_elf_functions =
-{
- simple_object_elf_match,
- simple_object_elf_find_sections,
- simple_object_elf_fetch_attributes,
- simple_object_elf_release_read,
- simple_object_elf_attributes_merge,
- simple_object_elf_release_attributes,
- simple_object_elf_start_write,
- simple_object_elf_write_to_file,
- simple_object_elf_release_write
-};
diff --git a/gcc-4.7/libiberty/simple-object-mach-o.c b/gcc-4.7/libiberty/simple-object-mach-o.c
deleted file mode 100644
index af5e4f9ca..000000000
--- a/gcc-4.7/libiberty/simple-object-mach-o.c
+++ /dev/null
@@ -1,1377 +0,0 @@
-/* simple-object-mach-o.c -- routines to manipulate Mach-O object files.
- Copyright 2010, 2011 Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Google.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-#include "libiberty.h"
-#include "simple-object.h"
-
-#include <stddef.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#include "simple-object-common.h"
-
-/* Mach-O structures and constants. */
-
-/* Mach-O header (32-bit version). */
-
-struct mach_o_header_32
-{
- unsigned char magic[4]; /* Magic number. */
- unsigned char cputype[4]; /* CPU that this object is for. */
- unsigned char cpusubtype[4]; /* CPU subtype. */
- unsigned char filetype[4]; /* Type of file. */
- unsigned char ncmds[4]; /* Number of load commands. */
- unsigned char sizeofcmds[4]; /* Total size of load commands. */
- unsigned char flags[4]; /* Flags for special featues. */
-};
-
-/* Mach-O header (64-bit version). */
-
-struct mach_o_header_64
-{
- unsigned char magic[4]; /* Magic number. */
- unsigned char cputype[4]; /* CPU that this object is for. */
- unsigned char cpusubtype[4]; /* CPU subtype. */
- unsigned char filetype[4]; /* Type of file. */
- unsigned char ncmds[4]; /* Number of load commands. */
- unsigned char sizeofcmds[4]; /* Total size of load commands. */
- unsigned char flags[4]; /* Flags for special featues. */
- unsigned char reserved[4]; /* Reserved. Duh. */
-};
-
-/* For magic field in header. */
-
-#define MACH_O_MH_MAGIC 0xfeedface
-#define MACH_O_MH_MAGIC_64 0xfeedfacf
-
-/* For filetype field in header. */
-
-#define MACH_O_MH_OBJECT 0x01
-
-/* A Mach-O file is a list of load commands. This is the header of a
- load command. */
-
-struct mach_o_load_command
-{
- unsigned char cmd[4]; /* The type of load command. */
- unsigned char cmdsize[4]; /* Size in bytes of entire command. */
-};
-
-/* For cmd field in load command. */
-
-#define MACH_O_LC_SEGMENT 0x01
-#define MACH_O_LC_SEGMENT_64 0x19
-
-/* LC_SEGMENT load command. */
-
-struct mach_o_segment_command_32
-{
- unsigned char cmd[4]; /* The type of load command (LC_SEGMENT). */
- unsigned char cmdsize[4]; /* Size in bytes of entire command. */
- unsigned char segname[16]; /* Name of this segment. */
- unsigned char vmaddr[4]; /* Virtual memory address of this segment. */
- unsigned char vmsize[4]; /* Size there, in bytes. */
- unsigned char fileoff[4]; /* Offset in bytes of the data to be mapped. */
- unsigned char filesize[4]; /* Size in bytes on disk. */
- unsigned char maxprot[4]; /* Maximum permitted vmem protection. */
- unsigned char initprot[4]; /* Initial vmem protection. */
- unsigned char nsects[4]; /* Number of sections in this segment. */
- unsigned char flags[4]; /* Flags that affect the loading. */
-};
-
-/* LC_SEGMENT_64 load command. */
-
-struct mach_o_segment_command_64
-{
- unsigned char cmd[4]; /* The type of load command (LC_SEGMENT_64). */
- unsigned char cmdsize[4]; /* Size in bytes of entire command. */
- unsigned char segname[16]; /* Name of this segment. */
- unsigned char vmaddr[8]; /* Virtual memory address of this segment. */
- unsigned char vmsize[8]; /* Size there, in bytes. */
- unsigned char fileoff[8]; /* Offset in bytes of the data to be mapped. */
- unsigned char filesize[8]; /* Size in bytes on disk. */
- unsigned char maxprot[4]; /* Maximum permitted vmem protection. */
- unsigned char initprot[4]; /* Initial vmem protection. */
- unsigned char nsects[4]; /* Number of sections in this segment. */
- unsigned char flags[4]; /* Flags that affect the loading. */
-};
-
-/* 32-bit section header. */
-
-struct mach_o_section_32
-{
- unsigned char sectname[16]; /* Section name. */
- unsigned char segname[16]; /* Segment that the section belongs to. */
- unsigned char addr[4]; /* Address of this section in memory. */
- unsigned char size[4]; /* Size in bytes of this section. */
- unsigned char offset[4]; /* File offset of this section. */
- unsigned char align[4]; /* log2 of this section's alignment. */
- unsigned char reloff[4]; /* File offset of this section's relocs. */
- unsigned char nreloc[4]; /* Number of relocs for this section. */
- unsigned char flags[4]; /* Section flags/attributes. */
- unsigned char reserved1[4];
- unsigned char reserved2[4];
-};
-
-/* 64-bit section header. */
-
-struct mach_o_section_64
-{
- unsigned char sectname[16]; /* Section name. */
- unsigned char segname[16]; /* Segment that the section belongs to. */
- unsigned char addr[8]; /* Address of this section in memory. */
- unsigned char size[8]; /* Size in bytes of this section. */
- unsigned char offset[4]; /* File offset of this section. */
- unsigned char align[4]; /* log2 of this section's alignment. */
- unsigned char reloff[4]; /* File offset of this section's relocs. */
- unsigned char nreloc[4]; /* Number of relocs for this section. */
- unsigned char flags[4]; /* Section flags/attributes. */
- unsigned char reserved1[4];
- unsigned char reserved2[4];
- unsigned char reserved3[4];
-};
-
-/* Flags for Mach-O sections. */
-
-#define MACH_O_S_ATTR_DEBUG 0x02000000
-
-/* The length of a segment or section name. */
-
-#define MACH_O_NAME_LEN (16)
-
-/* A GNU specific extension for long section names. */
-
-#define GNU_SECTION_NAMES "__section_names"
-
-/* A GNU-specific extension to wrap multiple sections using three
- mach-o sections within a given segment. The section '__wrapper_sects'
- is subdivided according to the index '__wrapper_index' and each sub
- sect is named according to the names supplied in '__wrapper_names'. */
-
-#define GNU_WRAPPER_SECTS "__wrapper_sects"
-#define GNU_WRAPPER_INDEX "__wrapper_index"
-#define GNU_WRAPPER_NAMES "__wrapper_names"
-
-/* Private data for an simple_object_read. */
-
-struct simple_object_mach_o_read
-{
- /* User specified segment name. */
- char *segment_name;
- /* Magic number. */
- unsigned int magic;
- /* Whether this file is big-endian. */
- int is_big_endian;
- /* CPU type from header. */
- unsigned int cputype;
- /* CPU subtype from header. */
- unsigned int cpusubtype;
- /* Number of commands, from header. */
- unsigned int ncmds;
- /* Flags from header. */
- unsigned int flags;
- /* Reserved field from header, only used on 64-bit. */
- unsigned int reserved;
-};
-
-/* Private data for an simple_object_attributes. */
-
-struct simple_object_mach_o_attributes
-{
- /* Magic number. */
- unsigned int magic;
- /* Whether this file is big-endian. */
- int is_big_endian;
- /* CPU type from header. */
- unsigned int cputype;
- /* CPU subtype from header. */
- unsigned int cpusubtype;
- /* Flags from header. */
- unsigned int flags;
- /* Reserved field from header, only used on 64-bit. */
- unsigned int reserved;
-};
-
-/* See if we have a Mach-O MH_OBJECT file:
-
- A standard MH_OBJECT (from as) will have three load commands:
- 0 - LC_SEGMENT/LC_SEGMENT64
- 1 - LC_SYMTAB
- 2 - LC_DYSYMTAB
-
- The LC_SEGMENT/LC_SEGMENT64 will introduce a single anonymous segment
- containing all the sections.
-
- Files written by simple-object will have only the segment command
- (no symbol tables). */
-
-static void *
-simple_object_mach_o_match (
- unsigned char header[SIMPLE_OBJECT_MATCH_HEADER_LEN],
- int descriptor,
- off_t offset,
- const char *segment_name,
- const char **errmsg,
- int *err)
-{
- unsigned int magic;
- int is_big_endian;
- unsigned int (*fetch_32) (const unsigned char *);
- unsigned int filetype;
- struct simple_object_mach_o_read *omr;
- unsigned char buf[sizeof (struct mach_o_header_64)];
- unsigned char *b;
-
- magic = simple_object_fetch_big_32 (header);
- if (magic == MACH_O_MH_MAGIC || magic == MACH_O_MH_MAGIC_64)
- is_big_endian = 1;
- else
- {
- magic = simple_object_fetch_little_32 (header);
- if (magic == MACH_O_MH_MAGIC || magic == MACH_O_MH_MAGIC_64)
- is_big_endian = 0;
- else
- {
- *errmsg = NULL;
- *err = 0;
- return NULL;
- }
- }
-
-#ifndef UNSIGNED_64BIT_TYPE
- if (magic == MACH_O_MH_MAGIC_64)
- {
- *errmsg = "64-bit Mach-O objects not supported";
- *err = 0;
- return NULL;
- }
-#endif
-
- /* We require the user to provide a segment name. This is
- unfortunate but I don't see any good choices here. */
-
- if (segment_name == NULL)
- {
- *errmsg = "Mach-O file found but no segment name specified";
- *err = 0;
- return NULL;
- }
-
- if (strlen (segment_name) > MACH_O_NAME_LEN)
- {
- *errmsg = "Mach-O segment name too long";
- *err = 0;
- return NULL;
- }
-
- /* The 32-bit and 64-bit headers are similar enough that we can use
- the same code. */
-
- fetch_32 = (is_big_endian
- ? simple_object_fetch_big_32
- : simple_object_fetch_little_32);
-
- if (!simple_object_internal_read (descriptor, offset, buf,
- (magic == MACH_O_MH_MAGIC
- ? sizeof (struct mach_o_header_32)
- : sizeof (struct mach_o_header_64)),
- errmsg, err))
- return NULL;
-
- b = &buf[0];
-
- filetype = (*fetch_32) (b + offsetof (struct mach_o_header_32, filetype));
- if (filetype != MACH_O_MH_OBJECT)
- {
- *errmsg = "Mach-O file is not object file";
- *err = 0;
- return NULL;
- }
-
- omr = XNEW (struct simple_object_mach_o_read);
- omr->segment_name = xstrdup (segment_name);
- omr->magic = magic;
- omr->is_big_endian = is_big_endian;
- omr->cputype = (*fetch_32) (b + offsetof (struct mach_o_header_32, cputype));
- omr->cpusubtype = (*fetch_32) (b
- + offsetof (struct mach_o_header_32,
- cpusubtype));
- omr->ncmds = (*fetch_32) (b + offsetof (struct mach_o_header_32, ncmds));
- omr->flags = (*fetch_32) (b + offsetof (struct mach_o_header_32, flags));
- if (magic == MACH_O_MH_MAGIC)
- omr->reserved = 0;
- else
- omr->reserved = (*fetch_32) (b
- + offsetof (struct mach_o_header_64,
- reserved));
-
- return (void *) omr;
-}
-
-/* Get the file offset and size from a section header. */
-
-static void
-simple_object_mach_o_section_info (int is_big_endian, int is_32,
- const unsigned char *sechdr, off_t *offset,
- size_t *size)
-{
- unsigned int (*fetch_32) (const unsigned char *);
- ulong_type (*fetch_64) (const unsigned char *);
-
- fetch_32 = (is_big_endian
- ? simple_object_fetch_big_32
- : simple_object_fetch_little_32);
-
- fetch_64 = NULL;
-#ifdef UNSIGNED_64BIT_TYPE
- fetch_64 = (is_big_endian
- ? simple_object_fetch_big_64
- : simple_object_fetch_little_64);
-#endif
-
- if (is_32)
- {
- *offset = fetch_32 (sechdr
- + offsetof (struct mach_o_section_32, offset));
- *size = fetch_32 (sechdr
- + offsetof (struct mach_o_section_32, size));
- }
- else
- {
- *offset = fetch_32 (sechdr
- + offsetof (struct mach_o_section_64, offset));
- *size = fetch_64 (sechdr
- + offsetof (struct mach_o_section_64, size));
- }
-}
-
-/* Handle a segment in a Mach-O Object file.
-
- This will callback to the function pfn for each "section found" the meaning
- of which depends on gnu extensions to mach-o:
-
- If we find mach-o sections (with the segment name as specified) which also
- contain: a 'sects' wrapper, an index, and a name table, we expand this into
- as many sections as are specified in the index. In this case, there will
- be a callback for each of these.
-
- We will also allow an extension that permits long names (more than 16
- characters) to be used with mach-o. In this case, the section name has
- a specific format embedding an index into a name table, and the file must
- contain such name table.
-
- Return 1 if we should continue, 0 if the caller should return. */
-
-#define SOMO_SECTS_PRESENT 0x01
-#define SOMO_INDEX_PRESENT 0x02
-#define SOMO_NAMES_PRESENT 0x04
-#define SOMO_LONGN_PRESENT 0x08
-#define SOMO_WRAPPING (SOMO_SECTS_PRESENT | SOMO_INDEX_PRESENT \
- | SOMO_NAMES_PRESENT)
-
-static int
-simple_object_mach_o_segment (simple_object_read *sobj, off_t offset,
- const unsigned char *segbuf,
- int (*pfn) (void *, const char *, off_t offset,
- off_t length),
- void *data,
- const char **errmsg, int *err)
-{
- struct simple_object_mach_o_read *omr =
- (struct simple_object_mach_o_read *) sobj->data;
- unsigned int (*fetch_32) (const unsigned char *);
- int is_32;
- size_t seghdrsize;
- size_t sechdrsize;
- size_t segname_offset;
- size_t sectname_offset;
- unsigned int nsects;
- unsigned char *secdata;
- unsigned int i;
- unsigned int gnu_sections_found;
- unsigned int strtab_index;
- unsigned int index_index;
- unsigned int nametab_index;
- unsigned int sections_index;
- char *strtab;
- char *nametab;
- unsigned char *index;
- size_t strtab_size;
- size_t nametab_size;
- size_t index_size;
- unsigned int n_wrapped_sects;
- size_t wrapper_sect_size;
- off_t wrapper_sect_offset;
-
- fetch_32 = (omr->is_big_endian
- ? simple_object_fetch_big_32
- : simple_object_fetch_little_32);
-
- is_32 = omr->magic == MACH_O_MH_MAGIC;
-
- if (is_32)
- {
- seghdrsize = sizeof (struct mach_o_segment_command_32);
- sechdrsize = sizeof (struct mach_o_section_32);
- segname_offset = offsetof (struct mach_o_section_32, segname);
- sectname_offset = offsetof (struct mach_o_section_32, sectname);
- nsects = (*fetch_32) (segbuf
- + offsetof (struct mach_o_segment_command_32,
- nsects));
- }
- else
- {
- seghdrsize = sizeof (struct mach_o_segment_command_64);
- sechdrsize = sizeof (struct mach_o_section_64);
- segname_offset = offsetof (struct mach_o_section_64, segname);
- sectname_offset = offsetof (struct mach_o_section_64, sectname);
- nsects = (*fetch_32) (segbuf
- + offsetof (struct mach_o_segment_command_64,
- nsects));
- }
-
- /* Fetch the section headers from the segment command. */
-
- secdata = XNEWVEC (unsigned char, nsects * sechdrsize);
- if (!simple_object_internal_read (sobj->descriptor, offset + seghdrsize,
- secdata, nsects * sechdrsize, errmsg, err))
- {
- XDELETEVEC (secdata);
- return 0;
- }
-
- /* Scan for special sections that signal GNU extensions to the format. */
-
- gnu_sections_found = 0;
- index_index = nsects;
- sections_index = nsects;
- strtab_index = nsects;
- nametab_index = nsects;
- for (i = 0; i < nsects; ++i)
- {
- size_t nameoff;
-
- nameoff = i * sechdrsize + segname_offset;
- if (strcmp ((char *) secdata + nameoff, omr->segment_name) != 0)
- continue;
-
- nameoff = i * sechdrsize + sectname_offset;
- if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_NAMES) == 0)
- {
- nametab_index = i;
- gnu_sections_found |= SOMO_NAMES_PRESENT;
- }
- else if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_INDEX) == 0)
- {
- index_index = i;
- gnu_sections_found |= SOMO_INDEX_PRESENT;
- }
- else if (strcmp ((char *) secdata + nameoff, GNU_WRAPPER_SECTS) == 0)
- {
- sections_index = i;
- gnu_sections_found |= SOMO_SECTS_PRESENT;
- }
- else if (strcmp ((char *) secdata + nameoff, GNU_SECTION_NAMES) == 0)
- {
- strtab_index = i;
- gnu_sections_found |= SOMO_LONGN_PRESENT;
- }
- }
-
- /* If any of the special wrapper section components is present, then
- they all should be. */
-
- if ((gnu_sections_found & SOMO_WRAPPING) != 0)
- {
- off_t nametab_offset;
- off_t index_offset;
-
- if ((gnu_sections_found & SOMO_WRAPPING) != SOMO_WRAPPING)
- {
- *errmsg = "GNU Mach-o section wrapper: required section missing";
- *err = 0; /* No useful errno. */
- XDELETEVEC (secdata);
- return 0;
- }
-
- /* Fetch the name table. */
-
- simple_object_mach_o_section_info (omr->is_big_endian, is_32,
- secdata + nametab_index * sechdrsize,
- &nametab_offset, &nametab_size);
- nametab = XNEWVEC (char, nametab_size);
- if (!simple_object_internal_read (sobj->descriptor,
- sobj->offset + nametab_offset,
- (unsigned char *) nametab, nametab_size,
- errmsg, err))
- {
- XDELETEVEC (nametab);
- XDELETEVEC (secdata);
- return 0;
- }
-
- /* Fetch the index. */
-
- simple_object_mach_o_section_info (omr->is_big_endian, is_32,
- secdata + index_index * sechdrsize,
- &index_offset, &index_size);
- index = XNEWVEC (unsigned char, index_size);
- if (!simple_object_internal_read (sobj->descriptor,
- sobj->offset + index_offset,
- index, index_size,
- errmsg, err))
- {
- XDELETEVEC (index);
- XDELETEVEC (nametab);
- XDELETEVEC (secdata);
- return 0;
- }
-
- /* The index contains 4 unsigned ints per sub-section:
- sub-section offset/length, sub-section name/length.
- We fix this for both 32 and 64 bit mach-o for now, since
- other fields limit the maximum size of an object to 4G. */
- n_wrapped_sects = index_size / 16;
-
- /* Get the parameters for the wrapper too. */
- simple_object_mach_o_section_info (omr->is_big_endian, is_32,
- secdata + sections_index * sechdrsize,
- &wrapper_sect_offset,
- &wrapper_sect_size);
- }
- else
- {
- index = NULL;
- index_size = 0;
- nametab = NULL;
- nametab_size = 0;
- n_wrapped_sects = 0;
- }
-
- /* If we have a long names section, fetch it. */
-
- if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0)
- {
- off_t strtab_offset;
-
- simple_object_mach_o_section_info (omr->is_big_endian, is_32,
- secdata + strtab_index * sechdrsize,
- &strtab_offset, &strtab_size);
- strtab = XNEWVEC (char, strtab_size);
- if (!simple_object_internal_read (sobj->descriptor,
- sobj->offset + strtab_offset,
- (unsigned char *) strtab, strtab_size,
- errmsg, err))
- {
- XDELETEVEC (strtab);
- XDELETEVEC (index);
- XDELETEVEC (nametab);
- XDELETEVEC (secdata);
- return 0;
- }
- }
- else
- {
- strtab = NULL;
- strtab_size = 0;
- strtab_index = nsects;
- }
-
- /* Process the sections. */
-
- for (i = 0; i < nsects; ++i)
- {
- const unsigned char *sechdr;
- char namebuf[MACH_O_NAME_LEN * 2 + 2];
- char *name;
- off_t secoffset;
- size_t secsize;
- int l;
-
- sechdr = secdata + i * sechdrsize;
-
- /* We've already processed the long section names. */
-
- if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0
- && i == strtab_index)
- continue;
-
- /* We only act on the segment named. */
-
- if (strcmp ((char *) sechdr + segname_offset, omr->segment_name) != 0)
- continue;
-
- /* Process sections associated with the wrapper. */
-
- if ((gnu_sections_found & SOMO_WRAPPING) != 0)
- {
- if (i == nametab_index || i == index_index)
- continue;
-
- if (i == sections_index)
- {
- unsigned int j;
- for (j = 0; j < n_wrapped_sects; ++j)
- {
- unsigned int subsect_offset, subsect_length, name_offset;
- subsect_offset = (*fetch_32) (index + 16 * j);
- subsect_length = (*fetch_32) (index + 16 * j + 4);
- name_offset = (*fetch_32) (index + 16 * j + 8);
- /* We don't need the name_length yet. */
-
- secoffset = wrapper_sect_offset + subsect_offset;
- secsize = subsect_length;
- name = nametab + name_offset;
-
- if (!(*pfn) (data, name, secoffset, secsize))
- {
- *errmsg = NULL;
- *err = 0;
- XDELETEVEC (index);
- XDELETEVEC (nametab);
- XDELETEVEC (strtab);
- XDELETEVEC (secdata);
- return 0;
- }
- }
- continue;
- }
- }
-
- if ((gnu_sections_found & SOMO_LONGN_PRESENT) != 0)
- {
- memcpy (namebuf, sechdr + sectname_offset, MACH_O_NAME_LEN);
- namebuf[MACH_O_NAME_LEN] = '\0';
-
- name = &namebuf[0];
- if (strtab != NULL && name[0] == '_' && name[1] == '_')
- {
- unsigned long stringoffset;
-
- if (sscanf (name + 2, "%08lX", &stringoffset) == 1)
- {
- if (stringoffset >= strtab_size)
- {
- *errmsg = "section name offset out of range";
- *err = 0;
- XDELETEVEC (index);
- XDELETEVEC (nametab);
- XDELETEVEC (strtab);
- XDELETEVEC (secdata);
- return 0;
- }
-
- name = strtab + stringoffset;
- }
- }
- }
- else
- {
- /* Otherwise, make a name like __segment,__section as per the
- convention in mach-o asm. */
- name = &namebuf[0];
- memset (namebuf, 0, MACH_O_NAME_LEN * 2 + 2);
- memcpy (namebuf, (char *) sechdr + segname_offset, MACH_O_NAME_LEN);
- l = strlen (namebuf);
- namebuf[l] = ',';
- memcpy (namebuf + l + 1, (char *) sechdr + sectname_offset,
- MACH_O_NAME_LEN);
- }
-
- simple_object_mach_o_section_info (omr->is_big_endian, is_32, sechdr,
- &secoffset, &secsize);
-
- if (!(*pfn) (data, name, secoffset, secsize))
- {
- *errmsg = NULL;
- *err = 0;
- XDELETEVEC (index);
- XDELETEVEC (nametab);
- XDELETEVEC (strtab);
- XDELETEVEC (secdata);
- return 0;
- }
- }
-
- XDELETEVEC (index);
- XDELETEVEC (nametab);
- XDELETEVEC (strtab);
- XDELETEVEC (secdata);
-
- return 1;
-}
-
-/* Find all sections in a Mach-O file. */
-
-static const char *
-simple_object_mach_o_find_sections (simple_object_read *sobj,
- int (*pfn) (void *, const char *,
- off_t offset, off_t length),
- void *data,
- int *err)
-{
- struct simple_object_mach_o_read *omr =
- (struct simple_object_mach_o_read *) sobj->data;
- off_t offset;
- size_t seghdrsize;
- unsigned int (*fetch_32) (const unsigned char *);
- const char *errmsg;
- unsigned int i;
-
- if (omr->magic == MACH_O_MH_MAGIC)
- {
- offset = sizeof (struct mach_o_header_32);
- seghdrsize = sizeof (struct mach_o_segment_command_32);
- }
- else
- {
- offset = sizeof (struct mach_o_header_64);
- seghdrsize = sizeof (struct mach_o_segment_command_64);
- }
-
- fetch_32 = (omr->is_big_endian
- ? simple_object_fetch_big_32
- : simple_object_fetch_little_32);
-
- for (i = 0; i < omr->ncmds; ++i)
- {
- unsigned char loadbuf[sizeof (struct mach_o_load_command)];
- unsigned int cmd;
- unsigned int cmdsize;
-
- if (!simple_object_internal_read (sobj->descriptor,
- sobj->offset + offset,
- loadbuf,
- sizeof (struct mach_o_load_command),
- &errmsg, err))
- return errmsg;
-
- cmd = (*fetch_32) (loadbuf + offsetof (struct mach_o_load_command, cmd));
- cmdsize = (*fetch_32) (loadbuf
- + offsetof (struct mach_o_load_command, cmdsize));
-
- if (cmd == MACH_O_LC_SEGMENT || cmd == MACH_O_LC_SEGMENT_64)
- {
- unsigned char segbuf[sizeof (struct mach_o_segment_command_64)];
- int r;
-
- if (!simple_object_internal_read (sobj->descriptor,
- sobj->offset + offset,
- segbuf, seghdrsize, &errmsg, err))
- return errmsg;
-
- r = simple_object_mach_o_segment (sobj, offset, segbuf, pfn,
- data, &errmsg, err);
- if (!r)
- return errmsg;
- }
-
- offset += cmdsize;
- }
-
- return NULL;
-}
-
-/* Fetch the attributes for an simple_object_read. */
-
-static void *
-simple_object_mach_o_fetch_attributes (simple_object_read *sobj,
- const char **errmsg ATTRIBUTE_UNUSED,
- int *err ATTRIBUTE_UNUSED)
-{
- struct simple_object_mach_o_read *omr =
- (struct simple_object_mach_o_read *) sobj->data;
- struct simple_object_mach_o_attributes *ret;
-
- ret = XNEW (struct simple_object_mach_o_attributes);
- ret->magic = omr->magic;
- ret->is_big_endian = omr->is_big_endian;
- ret->cputype = omr->cputype;
- ret->cpusubtype = omr->cpusubtype;
- ret->flags = omr->flags;
- ret->reserved = omr->reserved;
- return ret;
-}
-
-/* Release the private data for an simple_object_read. */
-
-static void
-simple_object_mach_o_release_read (void *data)
-{
- struct simple_object_mach_o_read *omr =
- (struct simple_object_mach_o_read *) data;
-
- free (omr->segment_name);
- XDELETE (omr);
-}
-
-/* Compare two attributes structures. */
-
-static const char *
-simple_object_mach_o_attributes_merge (void *todata, void *fromdata, int *err)
-{
- struct simple_object_mach_o_attributes *to =
- (struct simple_object_mach_o_attributes *) todata;
- struct simple_object_mach_o_attributes *from =
- (struct simple_object_mach_o_attributes *) fromdata;
-
- if (to->magic != from->magic
- || to->is_big_endian != from->is_big_endian
- || to->cputype != from->cputype)
- {
- *err = 0;
- return "Mach-O object format mismatch";
- }
- return NULL;
-}
-
-/* Release the private data for an attributes structure. */
-
-static void
-simple_object_mach_o_release_attributes (void *data)
-{
- XDELETE (data);
-}
-
-/* Prepare to write out a file. */
-
-static void *
-simple_object_mach_o_start_write (void *attributes_data,
- const char **errmsg ATTRIBUTE_UNUSED,
- int *err ATTRIBUTE_UNUSED)
-{
- struct simple_object_mach_o_attributes *attrs =
- (struct simple_object_mach_o_attributes *) attributes_data;
- struct simple_object_mach_o_attributes *ret;
-
- /* We're just going to record the attributes, but we need to make a
- copy because the user may delete them. */
- ret = XNEW (struct simple_object_mach_o_attributes);
- *ret = *attrs;
- return ret;
-}
-
-/* Write out the header of a Mach-O file. */
-
-static int
-simple_object_mach_o_write_header (simple_object_write *sobj, int descriptor,
- size_t nsects, const char **errmsg,
- int *err)
-{
- struct simple_object_mach_o_attributes *attrs =
- (struct simple_object_mach_o_attributes *) sobj->data;
- void (*set_32) (unsigned char *, unsigned int);
- unsigned char hdrbuf[sizeof (struct mach_o_header_64)];
- unsigned char *hdr;
- size_t wrsize;
-
- set_32 = (attrs->is_big_endian
- ? simple_object_set_big_32
- : simple_object_set_little_32);
-
- memset (hdrbuf, 0, sizeof hdrbuf);
-
- /* The 32-bit and 64-bit headers start out the same. */
-
- hdr = &hdrbuf[0];
- set_32 (hdr + offsetof (struct mach_o_header_32, magic), attrs->magic);
- set_32 (hdr + offsetof (struct mach_o_header_32, cputype), attrs->cputype);
- set_32 (hdr + offsetof (struct mach_o_header_32, cpusubtype),
- attrs->cpusubtype);
- set_32 (hdr + offsetof (struct mach_o_header_32, filetype), MACH_O_MH_OBJECT);
- set_32 (hdr + offsetof (struct mach_o_header_32, ncmds), 1);
- set_32 (hdr + offsetof (struct mach_o_header_32, flags), attrs->flags);
- if (attrs->magic == MACH_O_MH_MAGIC)
- {
- wrsize = sizeof (struct mach_o_header_32);
- set_32 (hdr + offsetof (struct mach_o_header_32, sizeofcmds),
- (sizeof (struct mach_o_segment_command_32)
- + nsects * sizeof (struct mach_o_section_32)));
- }
- else
- {
- set_32 (hdr + offsetof (struct mach_o_header_64, sizeofcmds),
- (sizeof (struct mach_o_segment_command_64)
- + nsects * sizeof (struct mach_o_section_64)));
- set_32 (hdr + offsetof (struct mach_o_header_64, reserved),
- attrs->reserved);
- wrsize = sizeof (struct mach_o_header_64);
- }
-
- return simple_object_internal_write (descriptor, 0, hdrbuf, wrsize,
- errmsg, err);
-}
-
-/* Write a Mach-O section header. */
-
-static int
-simple_object_mach_o_write_section_header (simple_object_write *sobj,
- int descriptor,
- size_t sechdr_offset,
- const char *name, const char *segn,
- size_t secaddr, size_t secsize,
- size_t offset, unsigned int align,
- const char **errmsg, int *err)
-{
- struct simple_object_mach_o_attributes *attrs =
- (struct simple_object_mach_o_attributes *) sobj->data;
- void (*set_32) (unsigned char *, unsigned int);
- unsigned char hdrbuf[sizeof (struct mach_o_section_64)];
- unsigned char *hdr;
- size_t sechdrsize;
-
- set_32 = (attrs->is_big_endian
- ? simple_object_set_big_32
- : simple_object_set_little_32);
-
- memset (hdrbuf, 0, sizeof hdrbuf);
-
- hdr = &hdrbuf[0];
- if (attrs->magic == MACH_O_MH_MAGIC)
- {
- strncpy ((char *) hdr + offsetof (struct mach_o_section_32, sectname),
- name, MACH_O_NAME_LEN);
- strncpy ((char *) hdr + offsetof (struct mach_o_section_32, segname),
- segn, MACH_O_NAME_LEN);
- set_32 (hdr + offsetof (struct mach_o_section_32, addr), secaddr);
- set_32 (hdr + offsetof (struct mach_o_section_32, size), secsize);
- set_32 (hdr + offsetof (struct mach_o_section_32, offset), offset);
- set_32 (hdr + offsetof (struct mach_o_section_32, align), align);
- /* reloff left as zero. */
- /* nreloc left as zero. */
- set_32 (hdr + offsetof (struct mach_o_section_32, flags),
- MACH_O_S_ATTR_DEBUG);
- /* reserved1 left as zero. */
- /* reserved2 left as zero. */
- sechdrsize = sizeof (struct mach_o_section_32);
- }
- else
- {
-#ifdef UNSIGNED_64BIT_TYPE
- void (*set_64) (unsigned char *, ulong_type);
-
- set_64 = (attrs->is_big_endian
- ? simple_object_set_big_64
- : simple_object_set_little_64);
-
- strncpy ((char *) hdr + offsetof (struct mach_o_section_64, sectname),
- name, MACH_O_NAME_LEN);
- strncpy ((char *) hdr + offsetof (struct mach_o_section_64, segname),
- segn, MACH_O_NAME_LEN);
- set_64 (hdr + offsetof (struct mach_o_section_64, addr), secaddr);
- set_64 (hdr + offsetof (struct mach_o_section_64, size), secsize);
- set_32 (hdr + offsetof (struct mach_o_section_64, offset), offset);
- set_32 (hdr + offsetof (struct mach_o_section_64, align), align);
- /* reloff left as zero. */
- /* nreloc left as zero. */
- set_32 (hdr + offsetof (struct mach_o_section_64, flags),
- MACH_O_S_ATTR_DEBUG);
- /* reserved1 left as zero. */
- /* reserved2 left as zero. */
- /* reserved3 left as zero. */
-#endif
- sechdrsize = sizeof (struct mach_o_section_64);
- }
-
- return simple_object_internal_write (descriptor, sechdr_offset, hdr,
- sechdrsize, errmsg, err);
-}
-
-/* Write out the single (anonymous) segment containing the sections of a Mach-O
- Object file.
-
- As a GNU extension to mach-o, when the caller specifies a segment name in
- sobj->segment_name, all the sections passed will be output under a single
- mach-o section header. The caller's sections are indexed within this
- 'wrapper' section by a table stored in a second mach-o section. Finally,
- arbitrary length section names are permitted by the extension and these are
- stored in a table in a third mach-o section.
-
- Note that this is only likely to make any sense for the __GNU_LTO segment
- at present.
-
- If the wrapper extension is not in force, we assume that the section name
- is in the form __SEGMENT_NAME,__section_name as per Mach-O asm. */
-
-static int
-simple_object_mach_o_write_segment (simple_object_write *sobj, int descriptor,
- size_t *nsects, const char **errmsg,
- int *err)
-{
- struct simple_object_mach_o_attributes *attrs =
- (struct simple_object_mach_o_attributes *) sobj->data;
- void (*set_32) (unsigned char *, unsigned int);
- size_t hdrsize;
- size_t seghdrsize;
- size_t sechdrsize;
- size_t cmdsize;
- size_t offset;
- size_t sechdr_offset;
- size_t secaddr;
- unsigned int name_offset;
- simple_object_write_section *section;
- unsigned char hdrbuf[sizeof (struct mach_o_segment_command_64)];
- unsigned char *hdr;
- size_t nsects_in;
- unsigned int *index;
- char *snames;
- unsigned int sect;
-
- set_32 = (attrs->is_big_endian
- ? simple_object_set_big_32
- : simple_object_set_little_32);
-
- /* Write out the sections first. */
-
- if (attrs->magic == MACH_O_MH_MAGIC)
- {
- hdrsize = sizeof (struct mach_o_header_32);
- seghdrsize = sizeof (struct mach_o_segment_command_32);
- sechdrsize = sizeof (struct mach_o_section_32);
- }
- else
- {
- hdrsize = sizeof (struct mach_o_header_64);
- seghdrsize = sizeof (struct mach_o_segment_command_64);
- sechdrsize = sizeof (struct mach_o_section_64);
- }
-
- name_offset = 0;
- *nsects = nsects_in = 0;
-
- /* Count the number of sections we start with. */
-
- for (section = sobj->sections; section != NULL; section = section->next)
- nsects_in++;
-
- if (sobj->segment_name != NULL)
- {
- /* We will only write 3 sections: wrapped data, index and names. */
-
- *nsects = 3;
-
- /* The index has four entries per wrapped section:
- Section Offset, length, Name offset, length.
- Where the offsets are based at the start of the wrapper and name
- sections respectively.
- The values are stored as 32 bit int for both 32 and 64 bit mach-o
- since the size of a mach-o MH_OBJECT cannot exceed 4G owing to
- other constraints. */
-
- index = XNEWVEC (unsigned int, nsects_in * 4);
-
- /* We now need to figure out the size of the names section. This just
- stores the names as null-terminated c strings, packed without any
- alignment padding. */
-
- for (section = sobj->sections, sect = 0; section != NULL;
- section = section->next, sect++)
- {
- index[sect*4+2] = name_offset;
- index[sect*4+3] = strlen (section->name) + 1;
- name_offset += strlen (section->name) + 1;
- }
- snames = XNEWVEC (char, name_offset);
- }
- else
- {
- *nsects = nsects_in;
- index = NULL;
- snames = NULL;
- }
-
- sechdr_offset = hdrsize + seghdrsize;
- cmdsize = seghdrsize + *nsects * sechdrsize;
- offset = hdrsize + cmdsize;
- secaddr = 0;
-
- for (section = sobj->sections, sect = 0;
- section != NULL; section = section->next, sect++)
- {
- size_t mask;
- size_t new_offset;
- size_t secsize;
- struct simple_object_write_section_buffer *buffer;
-
- mask = (1U << section->align) - 1;
- new_offset = offset + mask;
- new_offset &= ~ mask;
- while (new_offset > offset)
- {
- unsigned char zeroes[16];
- size_t write;
-
- memset (zeroes, 0, sizeof zeroes);
- write = new_offset - offset;
- if (write > sizeof zeroes)
- write = sizeof zeroes;
- if (!simple_object_internal_write (descriptor, offset, zeroes, write,
- errmsg, err))
- return 0;
- offset += write;
- }
-
- secsize = 0;
- for (buffer = section->buffers; buffer != NULL; buffer = buffer->next)
- {
- if (!simple_object_internal_write (descriptor, offset + secsize,
- ((const unsigned char *)
- buffer->buffer),
- buffer->size, errmsg, err))
- return 0;
- secsize += buffer->size;
- }
-
- if (sobj->segment_name != NULL)
- {
- index[sect*4+0] = (unsigned int) offset;
- index[sect*4+1] = secsize;
- /* Stash the section name in our table. */
- memcpy (snames + index[sect * 4 + 2], section->name,
- index[sect * 4 + 3]);
- }
- else
- {
- char namebuf[MACH_O_NAME_LEN + 1];
- char segnbuf[MACH_O_NAME_LEN + 1];
- char *comma;
-
- /* Try to extract segment,section from the input name. */
-
- memset (namebuf, 0, sizeof namebuf);
- memset (segnbuf, 0, sizeof segnbuf);
- comma = strchr (section->name, ',');
- if (comma != NULL)
- {
- int len = comma - section->name;
- len = len > MACH_O_NAME_LEN ? MACH_O_NAME_LEN : len;
- strncpy (namebuf, section->name, len);
- strncpy (segnbuf, comma + 1, MACH_O_NAME_LEN);
- }
- else /* just try to copy the name, leave segment blank. */
- strncpy (namebuf, section->name, MACH_O_NAME_LEN);
-
- if (!simple_object_mach_o_write_section_header (sobj, descriptor,
- sechdr_offset,
- namebuf, segnbuf,
- secaddr, secsize,
- offset,
- section->align,
- errmsg, err))
- return 0;
- sechdr_offset += sechdrsize;
- }
-
- offset += secsize;
- secaddr += secsize;
- }
-
- if (sobj->segment_name != NULL)
- {
- size_t secsize;
- unsigned int i;
-
- /* Write the section header for the wrapper. */
- /* Account for any initial aligment - which becomes the alignment for this
- created section. */
-
- secsize = (offset - index[0]);
- if (!simple_object_mach_o_write_section_header (sobj, descriptor,
- sechdr_offset,
- GNU_WRAPPER_SECTS,
- sobj->segment_name,
- 0 /*secaddr*/,
- secsize, index[0],
- sobj->sections->align,
- errmsg, err))
- return 0;
-
- /* Subtract the wrapper section start from the begining of each sub
- section. */
-
- for (i = 1; i < nsects_in; ++i)
- index[4 * i] -= index[0];
- index[0] = 0;
-
- sechdr_offset += sechdrsize;
-
- /* Write out the section names.
- ... the header ...
- name_offset contains the length of the section. It is not aligned. */
-
- if (!simple_object_mach_o_write_section_header (sobj, descriptor,
- sechdr_offset,
- GNU_WRAPPER_NAMES,
- sobj->segment_name,
- 0 /*secaddr*/,
- name_offset,
- offset,
- 0, errmsg, err))
- return 0;
-
- /* ... and the content.. */
- if (!simple_object_internal_write (descriptor, offset,
- (const unsigned char *) snames,
- name_offset, errmsg, err))
- return 0;
-
- sechdr_offset += sechdrsize;
- secaddr += name_offset;
- offset += name_offset;
-
- /* Now do the index, we'll align this to 4 bytes although the read code
- will handle unaligned. */
-
- offset += 3;
- offset &= ~0x03;
- if (!simple_object_mach_o_write_section_header (sobj, descriptor,
- sechdr_offset,
- GNU_WRAPPER_INDEX,
- sobj->segment_name,
- 0 /*secaddr*/,
- nsects_in * 16,
- offset,
- 2, errmsg, err))
- return 0;
-
- /* ... and the content.. */
- if (!simple_object_internal_write (descriptor, offset,
- (const unsigned char *) index,
- nsects_in*16, errmsg, err))
- return 0;
-
- XDELETEVEC (index);
- XDELETEVEC (snames);
- }
-
- /* Write out the segment header. */
-
- memset (hdrbuf, 0, sizeof hdrbuf);
-
- hdr = &hdrbuf[0];
- if (attrs->magic == MACH_O_MH_MAGIC)
- {
- set_32 (hdr + offsetof (struct mach_o_segment_command_32, cmd),
- MACH_O_LC_SEGMENT);
- set_32 (hdr + offsetof (struct mach_o_segment_command_32, cmdsize),
- cmdsize);
- /* MH_OBJECTS have a single, anonymous, segment - so the segment name
- is left empty. */
- /* vmaddr left as zero. */
- /* vmsize left as zero. */
- set_32 (hdr + offsetof (struct mach_o_segment_command_32, fileoff),
- hdrsize + cmdsize);
- set_32 (hdr + offsetof (struct mach_o_segment_command_32, filesize),
- offset - (hdrsize + cmdsize));
- /* maxprot left as zero. */
- /* initprot left as zero. */
- set_32 (hdr + offsetof (struct mach_o_segment_command_32, nsects),
- *nsects);
- /* flags left as zero. */
- }
- else
- {
-#ifdef UNSIGNED_64BIT_TYPE
- void (*set_64) (unsigned char *, ulong_type);
-
- set_64 = (attrs->is_big_endian
- ? simple_object_set_big_64
- : simple_object_set_little_64);
-
- set_32 (hdr + offsetof (struct mach_o_segment_command_64, cmd),
- MACH_O_LC_SEGMENT);
- set_32 (hdr + offsetof (struct mach_o_segment_command_64, cmdsize),
- cmdsize);
- /* MH_OBJECTS have a single, anonymous, segment - so the segment name
- is left empty. */
- /* vmaddr left as zero. */
- /* vmsize left as zero. */
- set_64 (hdr + offsetof (struct mach_o_segment_command_64, fileoff),
- hdrsize + cmdsize);
- set_64 (hdr + offsetof (struct mach_o_segment_command_64, filesize),
- offset - (hdrsize + cmdsize));
- /* maxprot left as zero. */
- /* initprot left as zero. */
- set_32 (hdr + offsetof (struct mach_o_segment_command_64, nsects),
- *nsects);
- /* flags left as zero. */
-#endif
- }
-
- return simple_object_internal_write (descriptor, hdrsize, hdr, seghdrsize,
- errmsg, err);
-}
-
-/* Write out a complete Mach-O file. */
-
-static const char *
-simple_object_mach_o_write_to_file (simple_object_write *sobj, int descriptor,
- int *err)
-{
- size_t nsects = 0;
- const char *errmsg;
-
- if (!simple_object_mach_o_write_segment (sobj, descriptor, &nsects,
- &errmsg, err))
- return errmsg;
-
- if (!simple_object_mach_o_write_header (sobj, descriptor, nsects,
- &errmsg, err))
- return errmsg;
-
- return NULL;
-}
-
-/* Release the private data for an simple_object_write structure. */
-
-static void
-simple_object_mach_o_release_write (void *data)
-{
- XDELETE (data);
-}
-
-/* The Mach-O functions. */
-
-const struct simple_object_functions simple_object_mach_o_functions =
-{
- simple_object_mach_o_match,
- simple_object_mach_o_find_sections,
- simple_object_mach_o_fetch_attributes,
- simple_object_mach_o_release_read,
- simple_object_mach_o_attributes_merge,
- simple_object_mach_o_release_attributes,
- simple_object_mach_o_start_write,
- simple_object_mach_o_write_to_file,
- simple_object_mach_o_release_write
-};
diff --git a/gcc-4.7/libiberty/simple-object.c b/gcc-4.7/libiberty/simple-object.c
deleted file mode 100644
index d000cfc08..000000000
--- a/gcc-4.7/libiberty/simple-object.c
+++ /dev/null
@@ -1,422 +0,0 @@
-/* simple-object.c -- simple routines to read and write object files.
- Copyright 2010 Free Software Foundation, Inc.
- Written by Ian Lance Taylor, Google.
-
-This program is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option) any
-later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program; if not, write to the Free Software
-Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-#include "libiberty.h"
-#include "simple-object.h"
-
-#include <errno.h>
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifdef HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#endif
-
-#include "simple-object-common.h"
-
-/* The known object file formats. */
-
-static const struct simple_object_functions * const format_functions[] =
-{
- &simple_object_elf_functions,
- &simple_object_mach_o_functions,
- &simple_object_coff_functions
-};
-
-/* Read data from a file using the simple_object error reporting
- conventions. */
-
-int
-simple_object_internal_read (int descriptor, off_t offset,
- unsigned char *buffer, size_t size,
- const char **errmsg, int *err)
-{
- ssize_t got;
-
- if (lseek (descriptor, offset, SEEK_SET) < 0)
- {
- *errmsg = "lseek";
- *err = errno;
- return 0;
- }
-
- got = read (descriptor, buffer, size);
- if (got < 0)
- {
- *errmsg = "read";
- *err = errno;
- return 0;
- }
-
- if ((size_t) got < size)
- {
- *errmsg = "file too short";
- *err = 0;
- return 0;
- }
-
- return 1;
-}
-
-/* Write data to a file using the simple_object error reporting
- conventions. */
-
-int
-simple_object_internal_write (int descriptor, off_t offset,
- const unsigned char *buffer, size_t size,
- const char **errmsg, int *err)
-{
- ssize_t wrote;
-
- if (lseek (descriptor, offset, SEEK_SET) < 0)
- {
- *errmsg = "lseek";
- *err = errno;
- return 0;
- }
-
- wrote = write (descriptor, buffer, size);
- if (wrote < 0)
- {
- *errmsg = "write";
- *err = errno;
- return 0;
- }
-
- if ((size_t) wrote < size)
- {
- *errmsg = "short write";
- *err = 0;
- return 0;
- }
-
- return 1;
-}
-
-/* Open for read. */
-
-simple_object_read *
-simple_object_start_read (int descriptor, off_t offset,
- const char *segment_name, const char **errmsg,
- int *err)
-{
- unsigned char header[SIMPLE_OBJECT_MATCH_HEADER_LEN];
- size_t len, i;
-
- if (!simple_object_internal_read (descriptor, offset, header,
- SIMPLE_OBJECT_MATCH_HEADER_LEN,
- errmsg, err))
- return NULL;
-
- len = sizeof (format_functions) / sizeof (format_functions[0]);
- for (i = 0; i < len; ++i)
- {
- void *data;
-
- data = format_functions[i]->match (header, descriptor, offset,
- segment_name, errmsg, err);
- if (data != NULL)
- {
- simple_object_read *ret;
-
- ret = XNEW (simple_object_read);
- ret->descriptor = descriptor;
- ret->offset = offset;
- ret->functions = format_functions[i];
- ret->data = data;
- return ret;
- }
- }
-
- *errmsg = "file not recognized";
- *err = 0;
- return NULL;
-}
-
-/* Find all sections. */
-
-const char *
-simple_object_find_sections (simple_object_read *sobj,
- int (*pfn) (void *, const char *, off_t, off_t),
- void *data,
- int *err)
-{
- return sobj->functions->find_sections (sobj, pfn, data, err);
-}
-
-/* Internal data passed to find_one_section. */
-
-struct find_one_section_data
-{
- /* The section we are looking for. */
- const char *name;
- /* Where to store the section offset. */
- off_t *offset;
- /* Where to store the section length. */
- off_t *length;
- /* Set if the name is found. */
- int found;
-};
-
-/* Internal function passed to find_sections. */
-
-static int
-find_one_section (void *data, const char *name, off_t offset, off_t length)
-{
- struct find_one_section_data *fosd = (struct find_one_section_data *) data;
-
- if (strcmp (name, fosd->name) != 0)
- return 1;
-
- *fosd->offset = offset;
- *fosd->length = length;
- fosd->found = 1;
-
- /* Stop iteration. */
- return 0;
-}
-
-/* Find a section. */
-
-int
-simple_object_find_section (simple_object_read *sobj, const char *name,
- off_t *offset, off_t *length,
- const char **errmsg, int *err)
-{
- struct find_one_section_data fosd;
-
- fosd.name = name;
- fosd.offset = offset;
- fosd.length = length;
- fosd.found = 0;
-
- *errmsg = simple_object_find_sections (sobj, find_one_section,
- (void *) &fosd, err);
- if (*errmsg != NULL)
- return 0;
- if (!fosd.found)
- return 0;
- return 1;
-}
-
-/* Fetch attributes. */
-
-simple_object_attributes *
-simple_object_fetch_attributes (simple_object_read *sobj, const char **errmsg,
- int *err)
-{
- void *data;
- simple_object_attributes *ret;
-
- data = sobj->functions->fetch_attributes (sobj, errmsg, err);
- if (data == NULL)
- return NULL;
- ret = XNEW (simple_object_attributes);
- ret->functions = sobj->functions;
- ret->data = data;
- return ret;
-}
-
-/* Release an simple_object_read. */
-
-void
-simple_object_release_read (simple_object_read *sobj)
-{
- sobj->functions->release_read (sobj->data);
- XDELETE (sobj);
-}
-
-/* Merge attributes. */
-
-const char *
-simple_object_attributes_merge (simple_object_attributes *to,
- simple_object_attributes *from,
- int *err)
-{
- if (to->functions != from->functions)
- {
- *err = 0;
- return "different object file format";
- }
- return to->functions->attributes_merge (to->data, from->data, err);
-}
-
-/* Release an attributes structure. */
-
-void
-simple_object_release_attributes (simple_object_attributes *attrs)
-{
- attrs->functions->release_attributes (attrs->data);
- XDELETE (attrs);
-}
-
-/* Start creating an object file. */
-
-simple_object_write *
-simple_object_start_write (simple_object_attributes *attrs,
- const char *segment_name, const char **errmsg,
- int *err)
-{
- void *data;
- simple_object_write *ret;
-
- data = attrs->functions->start_write (attrs->data, errmsg, err);
- if (data == NULL)
- return NULL;
- ret = XNEW (simple_object_write);
- ret->functions = attrs->functions;
- ret->segment_name = xstrdup (segment_name);
- ret->sections = NULL;
- ret->last_section = NULL;
- ret->data = data;
- return ret;
-}
-
-/* Start creating a section. */
-
-simple_object_write_section *
-simple_object_write_create_section (simple_object_write *sobj, const char *name,
- unsigned int align,
- const char **errmsg ATTRIBUTE_UNUSED,
- int *err ATTRIBUTE_UNUSED)
-{
- simple_object_write_section *ret;
-
- ret = XNEW (simple_object_write_section);
- ret->next = NULL;
- ret->name = xstrdup (name);
- ret->align = align;
- ret->buffers = NULL;
- ret->last_buffer = NULL;
-
- if (sobj->last_section == NULL)
- {
- sobj->sections = ret;
- sobj->last_section = ret;
- }
- else
- {
- sobj->last_section->next = ret;
- sobj->last_section = ret;
- }
-
- return ret;
-}
-
-/* Add data to a section. */
-
-const char *
-simple_object_write_add_data (simple_object_write *sobj ATTRIBUTE_UNUSED,
- simple_object_write_section *section,
- const void *buffer,
- size_t size, int copy,
- int *err ATTRIBUTE_UNUSED)
-{
- struct simple_object_write_section_buffer *wsb;
-
- wsb = XNEW (struct simple_object_write_section_buffer);
- wsb->next = NULL;
- wsb->size = size;
-
- if (!copy)
- {
- wsb->buffer = buffer;
- wsb->free_buffer = NULL;
- }
- else
- {
- wsb->free_buffer = (void *) XNEWVEC (char, size);
- memcpy (wsb->free_buffer, buffer, size);
- wsb->buffer = wsb->free_buffer;
- }
-
- if (section->last_buffer == NULL)
- {
- section->buffers = wsb;
- section->last_buffer = wsb;
- }
- else
- {
- section->last_buffer->next = wsb;
- section->last_buffer = wsb;
- }
-
- return NULL;
-}
-
-/* Write the complete object file. */
-
-const char *
-simple_object_write_to_file (simple_object_write *sobj, int descriptor,
- int *err)
-{
- return sobj->functions->write_to_file (sobj, descriptor, err);
-}
-
-/* Release an simple_object_write. */
-
-void
-simple_object_release_write (simple_object_write *sobj)
-{
- simple_object_write_section *section;
-
- free (sobj->segment_name);
-
- section = sobj->sections;
- while (section != NULL)
- {
- struct simple_object_write_section_buffer *buffer;
- simple_object_write_section *next_section;
-
- buffer = section->buffers;
- while (buffer != NULL)
- {
- struct simple_object_write_section_buffer *next_buffer;
-
- if (buffer->free_buffer != NULL)
- XDELETEVEC (buffer->free_buffer);
- next_buffer = buffer->next;
- XDELETE (buffer);
- buffer = next_buffer;
- }
-
- next_section = section->next;
- free (section->name);
- XDELETE (section);
- section = next_section;
- }
-
- sobj->functions->release_write (sobj->data);
- XDELETE (sobj);
-}
diff --git a/gcc-4.7/libiberty/simple-object.txh b/gcc-4.7/libiberty/simple-object.txh
deleted file mode 100644
index 34639f10a..000000000
--- a/gcc-4.7/libiberty/simple-object.txh
+++ /dev/null
@@ -1,189 +0,0 @@
-@c -*- mode: texinfo -*-
-@deftypefn Extension {simple_object_read *} simple_object_open_read @
- (int @var{descriptor}, off_t @var{offset}, const char *{segment_name}, @
- const char **@var{errmsg}, int *@var{err})
-
-Opens an object file for reading. Creates and returns an
-@code{simple_object_read} pointer which may be passed to other
-functions to extract data from the object file.
-
-@var{descriptor} holds a file descriptor which permits reading.
-
-@var{offset} is the offset into the file; this will be @code{0} in the
-normal case, but may be a different value when reading an object file
-in an archive file.
-
-@var{segment_name} is only used with the Mach-O file format used on
-Darwin aka Mac OS X. It is required on that platform, and means to
-only look at sections within the segment with that name. The
-parameter is ignored on other systems.
-
-If an error occurs, this functions returns @code{NULL} and sets
-@code{*@var{errmsg}} to an error string and sets @code{*@var{err}} to
-an errno value or @code{0} if there is no relevant errno.
-
-@end deftypefn
-
-@deftypefn Extension {const char *} simple_object_find_sections @
- (simple_object_read *@var{simple_object}, int (*@var{pfn}) (void *@var{data}, @
- const char *@var{name}, off_t @var{offset}, off_t @var{length}), @
- void *@var{data}, int *@var{err})
-
-This function calls @var{pfn} for each section in @var{simple_object}.
-It calls @var{pfn} with the section name, the offset within the file
-of the section contents, and the length of the section contents. The
-offset within the file is relative to the offset passed to
-@code{simple_object_open_read}. The @var{data} argument to this
-function is passed along to @var{pfn}.
-
-If @var{pfn} returns @code{0}, the loop over the sections stops and
-@code{simple_object_find_sections} returns. If @var{pfn} returns some
-other value, the loop continues.
-
-On success @code{simple_object_find_sections} returns. On error it
-returns an error string, and sets @code{*@var{err}} to an errno value
-or @code{0} if there is no relevant errno.
-
-@end deftypefn
-
-@deftypefn Extension {int} simple_object_find_section @
- (simple_object_read *@var{simple_object} off_t *@var{offset}, @
- off_t *@var{length}, const char **@var{errmsg}, int *@var{err})
-
-Look for the section @var{name} in @var{simple_object}. This returns
-information for the first section with that name.
-
-If found, return 1 and set @code{*@var{offset}} to the offset in the
-file of the section contents and set @code{*@var{length}} to the
-length of the section contents. The value in @code{*@var{offset}}
-will be relative to the offset passed to
-@code{simple_object_open_read}.
-
-If the section is not found, and no error occurs,
-@code{simple_object_find_section} returns @code{0} and set
-@code{*@var{errmsg}} to @code{NULL}.
-
-If an error occurs, @code{simple_object_find_section} returns
-@code{0}, sets @code{*@var{errmsg}} to an error message, and sets
-@code{*@var{err}} to an errno value or @code{0} if there is no
-relevant errno.
-
-@end deftypefn
-
-@deftypefn Extension {void} simple_object_release_read @
- (simple_object_read *@var{simple_object})
-
-Release all resources associated with @var{simple_object}. This does
-not close the file descriptor.
-
-@end deftypefn
-
-@deftypefn Extension {simple_object_attributes *} simple_object_fetch_attributes @
- (simple_object_read *@var{simple_object}, const char **@var{errmsg}, int *@var{err})
-
-Fetch the attributes of @var{simple_object}. The attributes are
-internal information such as the format of the object file, or the
-architecture it was compiled for. This information will persist until
-@code{simple_object_attributes_release} is called, even if
-@var{simple_object} itself is released.
-
-On error this returns @code{NULL}, sets @code{*@var{errmsg}} to an
-error message, and sets @code{*@var{err}} to an errno value or
-@code{0} if there is no relevant errno.
-
-@end deftypefn
-
-@deftypefn Extension {const char *} simple_object_attributes_compare @
- (simple_object_attributes *@var{attrs1}, simple_object_attributes *@var{attrs2}, @
- int *@var{err})
-
-Compare @var{attrs1} and @var{attrs2}. If they could be linked
-together without error, return @code{NULL}. Otherwise, return an
-error message and set @code{*@var{err}} to an errno value or @code{0}
-if there is no relevant errno.
-
-@end deftypefn
-
-@deftypefn Extension {void} simple_object_release_attributes @
- (simple_object_attributes *@var{attrs})
-
-Release all resources associated with @var{attrs}.
-
-@end deftypefn
-
-@deftypefn Extension {simple_object_write *} simple_object_start_write @
- (simple_object_attributes @var{attrs}, const char *@var{segment_name}, @
- const char **@var{errmsg}, int *@var{err})
-
-Start creating a new object file using the object file format
-described in @var{attrs}. You must fetch attribute information from
-an existing object file before you can create a new one. There is
-currently no support for creating an object file de novo.
-
-@var{segment_name} is only used with Mach-O as found on Darwin aka Mac
-OS X. The parameter is required on that target. It means that all
-sections are created within the named segment. It is ignored for
-other object file formats.
-
-On error @code{simple_object_start_write} returns @code{NULL}, sets
-@code{*@var{ERRMSG}} to an error message, and sets @code{*@var{err}}
-to an errno value or @code{0} if there is no relevant errno.
-
-@end deftypefn
-
-@deftypefn Extension {simple_object_write_section *} simple_object_write_create_section @
- (simple_object_write *@var{simple_object}, const char *@var{name}, @
- unsigned int @var{align}, const char **@var{errmsg}, int *@var{err})
-
-Add a section to @var{simple_object}. @var{name} is the name of the
-new section. @var{align} is the required alignment expressed as the
-number of required low-order 0 bits (e.g., 2 for alignment to a 32-bit
-boundary).
-
-The section is created as containing data, readable, not writable, not
-executable, not loaded at runtime. The section is not written to the
-file until @code{simple_object_write_to_file} is called.
-
-On error this returns @code{NULL}, sets @code{*@var{errmsg}} to an
-error message, and sets @code{*@var{err}} to an errno value or
-@code{0} if there is no relevant errno.
-
-@end deftypefn
-
-@deftypefn Extension {const char *} simple_object_write_add_data @
- (simple_object_write *@var{simple_object}, @
- simple_object_write_section *@var{section}, const void *@var{buffer}, @
- size_t @var{size}, int @var{copy}, int *@var{err})
-
-Add data @var{buffer}/@var{size} to @var{section} in
-@var{simple_object}. If @var{copy} is non-zero, the data will be
-copied into memory if necessary. If @var{copy} is zero, @var{buffer}
-must persist until @code{simple_object_write_to_file} is called. is
-released.
-
-On success this returns @code{NULL}. On error this returns an error
-message, and sets @code{*@var{err}} to an errno value or 0 if there is
-no relevant erro.
-
-@end deftypefn
-
-@deftypefn Extension {const char *} simple_object_write_to_file @
- (simple_object_write *@var{simple_object}, int @var{descriptor}, int *@var{err})
-
-Write the complete object file to @var{descriptor}, an open file
-descriptor. This writes out all the data accumulated by calls to
-@code{simple_object_write_create_section} and
-@var{simple_object_write_add_data}.
-
-This returns @code{NULL} on success. On error this returns an error
-message and sets @code{*@var{err}} to an errno value or @code{0} if
-there is no relevant errno.
-
-@end deftypefn
-
-@deftypefn Extension {void} simple_object_release_write @
- (simple_object_write *@var{simple_object})
-
-Release all resources associated with @var{simple_object}.
-
-@end deftypefn
diff --git a/gcc-4.7/libiberty/snprintf.c b/gcc-4.7/libiberty/snprintf.c
deleted file mode 100644
index 1e3b03888..000000000
--- a/gcc-4.7/libiberty/snprintf.c
+++ /dev/null
@@ -1,63 +0,0 @@
-/* Implement the snprintf function.
- Copyright (C) 2003, 2011 Free Software Foundation, Inc.
- Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
-
-This file is part of the libiberty library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
-
-@deftypefn Supplemental int snprintf (char *@var{buf}, size_t @var{n}, @
- const char *@var{format}, ...)
-
-This function is similar to @code{sprintf}, but it will write to
-@var{buf} at most @code{@var{n}-1} bytes of text, followed by a
-terminating null byte, for a total of @var{n} bytes.
-On error the return value is -1, otherwise it returns the number of
-bytes, not including the terminating null byte, that would have been
-written had @var{n} been sufficiently large, regardless of the actual
-value of @var{n}. Note some pre-C99 system libraries do not implement
-this correctly so users cannot generally rely on the return value if
-the system version of this function is used.
-
-@end deftypefn
-
-*/
-
-#include "ansidecl.h"
-
-#include <stdarg.h>
-#include <stddef.h>
-
-int vsnprintf (char *, size_t, const char *, va_list);
-
-int
-snprintf (char *s, size_t n, const char *format, ...)
-{
- int result;
- VA_OPEN (ap, format);
- VA_FIXEDARG (ap, char *, s);
- VA_FIXEDARG (ap, size_t, n);
- VA_FIXEDARG (ap, const char *, format);
- result = vsnprintf (s, n, format, ap);
- VA_CLOSE (ap);
- return result;
-}
diff --git a/gcc-4.7/libiberty/sort.c b/gcc-4.7/libiberty/sort.c
deleted file mode 100644
index 3738dd733..000000000
--- a/gcc-4.7/libiberty/sort.c
+++ /dev/null
@@ -1,186 +0,0 @@
-/* Sorting algorithms.
- Copyright (C) 2000 Free Software Foundation, Inc.
- Contributed by Mark Mitchell <mark@codesourcery.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, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "libiberty.h"
-#include "sort.h"
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifndef UCHAR_MAX
-#define UCHAR_MAX ((unsigned char)(-1))
-#endif
-
-/* POINTERS and WORK are both arrays of N pointers. When this
- function returns POINTERS will be sorted in ascending order. */
-
-void sort_pointers (size_t n, void **pointers, void **work)
-{
- /* The type of a single digit. This can be any unsigned integral
- type. When changing this, DIGIT_MAX should be changed as
- well. */
- typedef unsigned char digit_t;
-
- /* The maximum value a single digit can have. */
-#define DIGIT_MAX (UCHAR_MAX + 1)
-
- /* The Ith entry is the number of elements in *POINTERSP that have I
- in the digit on which we are currently sorting. */
- unsigned int count[DIGIT_MAX];
- /* Nonzero if we are running on a big-endian machine. */
- int big_endian_p;
- size_t i;
- size_t j;
-
- /* The algorithm used here is radix sort which takes time linear in
- the number of elements in the array. */
-
- /* The algorithm here depends on being able to swap the two arrays
- an even number of times. */
- if ((sizeof (void *) / sizeof (digit_t)) % 2 != 0)
- abort ();
-
- /* Figure out the endianness of the machine. */
- for (i = 0, j = 0; i < sizeof (size_t); ++i)
- {
- j *= (UCHAR_MAX + 1);
- j += i;
- }
- big_endian_p = (((char *)&j)[0] == 0);
-
- /* Move through the pointer values from least significant to most
- significant digits. */
- for (i = 0; i < sizeof (void *) / sizeof (digit_t); ++i)
- {
- digit_t *digit;
- digit_t *bias;
- digit_t *top;
- unsigned int *countp;
- void **pointerp;
-
- /* The offset from the start of the pointer will depend on the
- endianness of the machine. */
- if (big_endian_p)
- j = sizeof (void *) / sizeof (digit_t) - i;
- else
- j = i;
-
- /* Now, perform a stable sort on this digit. We use counting
- sort. */
- memset (count, 0, DIGIT_MAX * sizeof (unsigned int));
-
- /* Compute the address of the appropriate digit in the first and
- one-past-the-end elements of the array. On a little-endian
- machine, the least-significant digit is closest to the front. */
- bias = ((digit_t *) pointers) + j;
- top = ((digit_t *) (pointers + n)) + j;
-
- /* Count how many there are of each value. At the end of this
- loop, COUNT[K] will contain the number of pointers whose Ith
- digit is K. */
- for (digit = bias;
- digit < top;
- digit += sizeof (void *) / sizeof (digit_t))
- ++count[*digit];
-
- /* Now, make COUNT[K] contain the number of pointers whose Ith
- digit is less than or equal to K. */
- for (countp = count + 1; countp < count + DIGIT_MAX; ++countp)
- *countp += countp[-1];
-
- /* Now, drop the pointers into their correct locations. */
- for (pointerp = pointers + n - 1; pointerp >= pointers; --pointerp)
- work[--count[((digit_t *) pointerp)[j]]] = *pointerp;
-
- /* Swap WORK and POINTERS so that POINTERS contains the sorted
- array. */
- pointerp = pointers;
- pointers = work;
- work = pointerp;
- }
-}
-
-/* Everything below here is a unit test for the routines in this
- file. */
-
-#ifdef UNIT_TEST
-
-#include <stdio.h>
-
-void *xmalloc (size_t n)
-{
- return malloc (n);
-}
-
-int main (int argc, char **argv)
-{
- int k;
- int result;
- size_t i;
- void **pointers;
- void **work;
-
- if (argc > 1)
- k = atoi (argv[1]);
- else
- k = 10;
-
- pointers = XNEWVEC (void*, k);
- work = XNEWVEC (void*, k);
-
- for (i = 0; i < k; ++i)
- {
- pointers[i] = (void *) random ();
- printf ("%x\n", pointers[i]);
- }
-
- sort_pointers (k, pointers, work);
-
- printf ("\nSorted\n\n");
-
- result = 0;
-
- for (i = 0; i < k; ++i)
- {
- printf ("%x\n", pointers[i]);
- if (i > 0 && (char*) pointers[i] < (char*) pointers[i - 1])
- result = 1;
- }
-
- free (pointers);
- free (work);
-
- return result;
-}
-
-#endif
diff --git a/gcc-4.7/libiberty/spaces.c b/gcc-4.7/libiberty/spaces.c
deleted file mode 100644
index 69d7a2d3f..000000000
--- a/gcc-4.7/libiberty/spaces.c
+++ /dev/null
@@ -1,69 +0,0 @@
-/* Allocate memory region filled with spaces.
- Copyright (C) 1991 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Extension char* spaces (int @var{count})
-
-Returns a pointer to a memory region filled with the specified
-number of spaces and null terminated. The returned pointer is
-valid until at least the next call.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-
-#if VMS
-#include <stdlib.h>
-#include <unixlib.h>
-#else
-/* For systems with larger pointers than ints, these must be declared. */
-extern PTR malloc (size_t);
-extern void free (PTR);
-#endif
-
-const char *
-spaces (int count)
-{
- register char *t;
- static char *buf;
- static int maxsize;
-
- if (count > maxsize)
- {
- free (buf);
- buf = (char *) malloc (count + 1);
- if (buf == (char *) 0)
- return 0;
- for (t = buf + count ; t != buf ; )
- {
- *--t = ' ';
- }
- maxsize = count;
- buf[count] = '\0';
- }
- return (const char *) (buf + maxsize - count);
-}
-
diff --git a/gcc-4.7/libiberty/splay-tree.c b/gcc-4.7/libiberty/splay-tree.c
deleted file mode 100644
index 12bfa8bbd..000000000
--- a/gcc-4.7/libiberty/splay-tree.c
+++ /dev/null
@@ -1,593 +0,0 @@
-/* A splay-tree datatype.
- Copyright (C) 1998, 1999, 2000, 2001, 2009,
- 2010, 2011 Free Software Foundation, Inc.
- Contributed by Mark Mitchell (mark@markmitchell.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, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/* For an easily readable description of splay-trees, see:
-
- Lewis, Harry R. and Denenberg, Larry. Data Structures and Their
- Algorithms. Harper-Collins, Inc. 1991. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include <stdio.h>
-
-#include "libiberty.h"
-#include "splay-tree.h"
-
-static void splay_tree_delete_helper (splay_tree, splay_tree_node);
-static inline void rotate_left (splay_tree_node *,
- splay_tree_node, splay_tree_node);
-static inline void rotate_right (splay_tree_node *,
- splay_tree_node, splay_tree_node);
-static void splay_tree_splay (splay_tree, splay_tree_key);
-static int splay_tree_foreach_helper (splay_tree_node,
- splay_tree_foreach_fn, void*);
-
-/* Deallocate NODE (a member of SP), and all its sub-trees. */
-
-static void
-splay_tree_delete_helper (splay_tree sp, splay_tree_node node)
-{
- splay_tree_node pending = 0;
- splay_tree_node active = 0;
-
- if (!node)
- return;
-
-#define KDEL(x) if (sp->delete_key) (*sp->delete_key)(x);
-#define VDEL(x) if (sp->delete_value) (*sp->delete_value)(x);
-
- KDEL (node->key);
- VDEL (node->value);
-
- /* We use the "key" field to hold the "next" pointer. */
- node->key = (splay_tree_key)pending;
- pending = (splay_tree_node)node;
-
- /* Now, keep processing the pending list until there aren't any
- more. This is a little more complicated than just recursing, but
- it doesn't toast the stack for large trees. */
-
- while (pending)
- {
- active = pending;
- pending = 0;
- while (active)
- {
- splay_tree_node temp;
-
- /* active points to a node which has its key and value
- deallocated, we just need to process left and right. */
-
- if (active->left)
- {
- KDEL (active->left->key);
- VDEL (active->left->value);
- active->left->key = (splay_tree_key)pending;
- pending = (splay_tree_node)(active->left);
- }
- if (active->right)
- {
- KDEL (active->right->key);
- VDEL (active->right->value);
- active->right->key = (splay_tree_key)pending;
- pending = (splay_tree_node)(active->right);
- }
-
- temp = active;
- active = (splay_tree_node)(temp->key);
- (*sp->deallocate) ((char*) temp, sp->allocate_data);
- }
- }
-#undef KDEL
-#undef VDEL
-}
-
-/* Rotate the edge joining the left child N with its parent P. PP is the
- grandparents' pointer to P. */
-
-static inline void
-rotate_left (splay_tree_node *pp, splay_tree_node p, splay_tree_node n)
-{
- splay_tree_node tmp;
- tmp = n->right;
- n->right = p;
- p->left = tmp;
- *pp = n;
-}
-
-/* Rotate the edge joining the right child N with its parent P. PP is the
- grandparents' pointer to P. */
-
-static inline void
-rotate_right (splay_tree_node *pp, splay_tree_node p, splay_tree_node n)
-{
- splay_tree_node tmp;
- tmp = n->left;
- n->left = p;
- p->right = tmp;
- *pp = n;
-}
-
-/* Bottom up splay of key. */
-
-static void
-splay_tree_splay (splay_tree sp, splay_tree_key key)
-{
- if (sp->root == 0)
- return;
-
- do {
- int cmp1, cmp2;
- splay_tree_node n, c;
-
- n = sp->root;
- cmp1 = (*sp->comp) (key, n->key);
-
- /* Found. */
- if (cmp1 == 0)
- return;
-
- /* Left or right? If no child, then we're done. */
- if (cmp1 < 0)
- c = n->left;
- else
- c = n->right;
- if (!c)
- return;
-
- /* Next one left or right? If found or no child, we're done
- after one rotation. */
- cmp2 = (*sp->comp) (key, c->key);
- if (cmp2 == 0
- || (cmp2 < 0 && !c->left)
- || (cmp2 > 0 && !c->right))
- {
- if (cmp1 < 0)
- rotate_left (&sp->root, n, c);
- else
- rotate_right (&sp->root, n, c);
- return;
- }
-
- /* Now we have the four cases of double-rotation. */
- if (cmp1 < 0 && cmp2 < 0)
- {
- rotate_left (&n->left, c, c->left);
- rotate_left (&sp->root, n, n->left);
- }
- else if (cmp1 > 0 && cmp2 > 0)
- {
- rotate_right (&n->right, c, c->right);
- rotate_right (&sp->root, n, n->right);
- }
- else if (cmp1 < 0 && cmp2 > 0)
- {
- rotate_right (&n->left, c, c->right);
- rotate_left (&sp->root, n, n->left);
- }
- else if (cmp1 > 0 && cmp2 < 0)
- {
- rotate_left (&n->right, c, c->left);
- rotate_right (&sp->root, n, n->right);
- }
- } while (1);
-}
-
-/* Call FN, passing it the DATA, for every node below NODE, all of
- which are from SP, following an in-order traversal. If FN every
- returns a non-zero value, the iteration ceases immediately, and the
- value is returned. Otherwise, this function returns 0. */
-
-static int
-splay_tree_foreach_helper (splay_tree_node node,
- splay_tree_foreach_fn fn, void *data)
-{
- int val;
- splay_tree_node *stack;
- int stack_ptr, stack_size;
-
- /* A non-recursive implementation is used to avoid filling the stack
- for large trees. Splay trees are worst case O(n) in the depth of
- the tree. */
-
-#define INITIAL_STACK_SIZE 100
- stack_size = INITIAL_STACK_SIZE;
- stack_ptr = 0;
- stack = XNEWVEC (splay_tree_node, stack_size);
- val = 0;
-
- for (;;)
- {
- while (node != NULL)
- {
- if (stack_ptr == stack_size)
- {
- stack_size *= 2;
- stack = XRESIZEVEC (splay_tree_node, stack, stack_size);
- }
- stack[stack_ptr++] = node;
- node = node->left;
- }
-
- if (stack_ptr == 0)
- break;
-
- node = stack[--stack_ptr];
-
- val = (*fn) (node, data);
- if (val)
- break;
-
- node = node->right;
- }
-
- XDELETEVEC (stack);
- return val;
-}
-
-/* An allocator and deallocator based on xmalloc. */
-static void *
-splay_tree_xmalloc_allocate (int size, void *data ATTRIBUTE_UNUSED)
-{
- return (void *) xmalloc (size);
-}
-
-static void
-splay_tree_xmalloc_deallocate (void *object, void *data ATTRIBUTE_UNUSED)
-{
- free (object);
-}
-
-
-/* Allocate a new splay tree, using COMPARE_FN to compare nodes,
- DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate
- values. Use xmalloc to allocate the splay tree structure, and any
- nodes added. */
-
-splay_tree
-splay_tree_new (splay_tree_compare_fn compare_fn,
- splay_tree_delete_key_fn delete_key_fn,
- splay_tree_delete_value_fn delete_value_fn)
-{
- return (splay_tree_new_with_allocator
- (compare_fn, delete_key_fn, delete_value_fn,
- splay_tree_xmalloc_allocate, splay_tree_xmalloc_deallocate, 0));
-}
-
-
-/* Allocate a new splay tree, using COMPARE_FN to compare nodes,
- DELETE_KEY_FN to deallocate keys, and DELETE_VALUE_FN to deallocate
- values. */
-
-splay_tree
-splay_tree_new_with_allocator (splay_tree_compare_fn compare_fn,
- splay_tree_delete_key_fn delete_key_fn,
- splay_tree_delete_value_fn delete_value_fn,
- splay_tree_allocate_fn allocate_fn,
- splay_tree_deallocate_fn deallocate_fn,
- void *allocate_data)
-{
- return
- splay_tree_new_typed_alloc (compare_fn, delete_key_fn, delete_value_fn,
- allocate_fn, allocate_fn, deallocate_fn,
- allocate_data);
-}
-
-/*
-
-@deftypefn Supplemental splay_tree splay_tree_new_with_typed_alloc @
-(splay_tree_compare_fn @var{compare_fn}, @
-splay_tree_delete_key_fn @var{delete_key_fn}, @
-splay_tree_delete_value_fn @var{delete_value_fn}, @
-splay_tree_allocate_fn @var{tree_allocate_fn}, @
-splay_tree_allocate_fn @var{node_allocate_fn}, @
-splay_tree_deallocate_fn @var{deallocate_fn}, @
-void * @var{allocate_data})
-
-This function creates a splay tree that uses two different allocators
-@var{tree_allocate_fn} and @var{node_allocate_fn} to use for allocating the
-tree itself and its nodes respectively. This is useful when variables of
-different types need to be allocated with different allocators.
-
-The splay tree will use @var{compare_fn} to compare nodes,
-@var{delete_key_fn} to deallocate keys, and @var{delete_value_fn} to
-deallocate values.
-
-@end deftypefn
-
-*/
-
-splay_tree
-splay_tree_new_typed_alloc (splay_tree_compare_fn compare_fn,
- splay_tree_delete_key_fn delete_key_fn,
- splay_tree_delete_value_fn delete_value_fn,
- splay_tree_allocate_fn tree_allocate_fn,
- splay_tree_allocate_fn node_allocate_fn,
- splay_tree_deallocate_fn deallocate_fn,
- void * allocate_data)
-{
- splay_tree sp = (splay_tree) (*tree_allocate_fn)
- (sizeof (struct splay_tree_s), allocate_data);
-
- sp->root = 0;
- sp->comp = compare_fn;
- sp->delete_key = delete_key_fn;
- sp->delete_value = delete_value_fn;
- sp->allocate = node_allocate_fn;
- sp->deallocate = deallocate_fn;
- sp->allocate_data = allocate_data;
-
- return sp;
-}
-
-/* Deallocate SP. */
-
-void
-splay_tree_delete (splay_tree sp)
-{
- splay_tree_delete_helper (sp, sp->root);
- (*sp->deallocate) ((char*) sp, sp->allocate_data);
-}
-
-/* Insert a new node (associating KEY with DATA) into SP. If a
- previous node with the indicated KEY exists, its data is replaced
- with the new value. Returns the new node. */
-
-splay_tree_node
-splay_tree_insert (splay_tree sp, splay_tree_key key, splay_tree_value value)
-{
- int comparison = 0;
-
- splay_tree_splay (sp, key);
-
- if (sp->root)
- comparison = (*sp->comp)(sp->root->key, key);
-
- if (sp->root && comparison == 0)
- {
- /* If the root of the tree already has the indicated KEY, just
- replace the value with VALUE. */
- if (sp->delete_value)
- (*sp->delete_value)(sp->root->value);
- sp->root->value = value;
- }
- else
- {
- /* Create a new node, and insert it at the root. */
- splay_tree_node node;
-
- node = ((splay_tree_node)
- (*sp->allocate) (sizeof (struct splay_tree_node_s),
- sp->allocate_data));
- node->key = key;
- node->value = value;
-
- if (!sp->root)
- node->left = node->right = 0;
- else if (comparison < 0)
- {
- node->left = sp->root;
- node->right = node->left->right;
- node->left->right = 0;
- }
- else
- {
- node->right = sp->root;
- node->left = node->right->left;
- node->right->left = 0;
- }
-
- sp->root = node;
- }
-
- return sp->root;
-}
-
-/* Remove KEY from SP. It is not an error if it did not exist. */
-
-void
-splay_tree_remove (splay_tree sp, splay_tree_key key)
-{
- splay_tree_splay (sp, key);
-
- if (sp->root && (*sp->comp) (sp->root->key, key) == 0)
- {
- splay_tree_node left, right;
-
- left = sp->root->left;
- right = sp->root->right;
-
- /* Delete the root node itself. */
- if (sp->delete_value)
- (*sp->delete_value) (sp->root->value);
- (*sp->deallocate) (sp->root, sp->allocate_data);
-
- /* One of the children is now the root. Doesn't matter much
- which, so long as we preserve the properties of the tree. */
- if (left)
- {
- sp->root = left;
-
- /* If there was a right child as well, hang it off the
- right-most leaf of the left child. */
- if (right)
- {
- while (left->right)
- left = left->right;
- left->right = right;
- }
- }
- else
- sp->root = right;
- }
-}
-
-/* Lookup KEY in SP, returning VALUE if present, and NULL
- otherwise. */
-
-splay_tree_node
-splay_tree_lookup (splay_tree sp, splay_tree_key key)
-{
- splay_tree_splay (sp, key);
-
- if (sp->root && (*sp->comp)(sp->root->key, key) == 0)
- return sp->root;
- else
- return 0;
-}
-
-/* Return the node in SP with the greatest key. */
-
-splay_tree_node
-splay_tree_max (splay_tree sp)
-{
- splay_tree_node n = sp->root;
-
- if (!n)
- return NULL;
-
- while (n->right)
- n = n->right;
-
- return n;
-}
-
-/* Return the node in SP with the smallest key. */
-
-splay_tree_node
-splay_tree_min (splay_tree sp)
-{
- splay_tree_node n = sp->root;
-
- if (!n)
- return NULL;
-
- while (n->left)
- n = n->left;
-
- return n;
-}
-
-/* Return the immediate predecessor KEY, or NULL if there is no
- predecessor. KEY need not be present in the tree. */
-
-splay_tree_node
-splay_tree_predecessor (splay_tree sp, splay_tree_key key)
-{
- int comparison;
- splay_tree_node node;
-
- /* If the tree is empty, there is certainly no predecessor. */
- if (!sp->root)
- return NULL;
-
- /* Splay the tree around KEY. That will leave either the KEY
- itself, its predecessor, or its successor at the root. */
- splay_tree_splay (sp, key);
- comparison = (*sp->comp)(sp->root->key, key);
-
- /* If the predecessor is at the root, just return it. */
- if (comparison < 0)
- return sp->root;
-
- /* Otherwise, find the rightmost element of the left subtree. */
- node = sp->root->left;
- if (node)
- while (node->right)
- node = node->right;
-
- return node;
-}
-
-/* Return the immediate successor KEY, or NULL if there is no
- successor. KEY need not be present in the tree. */
-
-splay_tree_node
-splay_tree_successor (splay_tree sp, splay_tree_key key)
-{
- int comparison;
- splay_tree_node node;
-
- /* If the tree is empty, there is certainly no successor. */
- if (!sp->root)
- return NULL;
-
- /* Splay the tree around KEY. That will leave either the KEY
- itself, its predecessor, or its successor at the root. */
- splay_tree_splay (sp, key);
- comparison = (*sp->comp)(sp->root->key, key);
-
- /* If the successor is at the root, just return it. */
- if (comparison > 0)
- return sp->root;
-
- /* Otherwise, find the leftmost element of the right subtree. */
- node = sp->root->right;
- if (node)
- while (node->left)
- node = node->left;
-
- return node;
-}
-
-/* Call FN, passing it the DATA, for every node in SP, following an
- in-order traversal. If FN every returns a non-zero value, the
- iteration ceases immediately, and the value is returned.
- Otherwise, this function returns 0. */
-
-int
-splay_tree_foreach (splay_tree sp, splay_tree_foreach_fn fn, void *data)
-{
- return splay_tree_foreach_helper (sp->root, fn, data);
-}
-
-/* Splay-tree comparison function, treating the keys as ints. */
-
-int
-splay_tree_compare_ints (splay_tree_key k1, splay_tree_key k2)
-{
- if ((int) k1 < (int) k2)
- return -1;
- else if ((int) k1 > (int) k2)
- return 1;
- else
- return 0;
-}
-
-/* Splay-tree comparison function, treating the keys as pointers. */
-
-int
-splay_tree_compare_pointers (splay_tree_key k1, splay_tree_key k2)
-{
- if ((char*) k1 < (char*) k2)
- return -1;
- else if ((char*) k1 > (char*) k2)
- return 1;
- else
- return 0;
-}
diff --git a/gcc-4.7/libiberty/stack-limit.c b/gcc-4.7/libiberty/stack-limit.c
deleted file mode 100644
index e64cac28d..000000000
--- a/gcc-4.7/libiberty/stack-limit.c
+++ /dev/null
@@ -1,62 +0,0 @@
-/* Increase stack size limit if possible.
- Copyright (C) 2011 Free Software Foundation, Inc.
-
-This file is part of the libiberty library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
-
-@deftypefn Extension void stack_limit_increase (unsigned long @var{pref})
-
-Attempt to increase stack size limit to @var{pref} bytes if possible.
-
-@end deftypefn
-
-*/
-
-#include "config.h"
-
-#ifdef HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-
-void
-stack_limit_increase (unsigned long pref)
-{
-#if defined(HAVE_SETRLIMIT) && defined(HAVE_GETRLIMIT) \
- && defined(RLIMIT_STACK) && defined(RLIM_INFINITY)
- struct rlimit rlim;
- if (getrlimit (RLIMIT_STACK, &rlim) == 0
- && rlim.rlim_cur != RLIM_INFINITY
- && rlim.rlim_cur < pref
- && (rlim.rlim_max == RLIM_INFINITY || rlim.rlim_cur < rlim.rlim_max))
- {
- rlim.rlim_cur = pref;
- if (rlim.rlim_max != RLIM_INFINITY && rlim.rlim_cur > rlim.rlim_max)
- rlim.rlim_cur = rlim.rlim_max;
- setrlimit (RLIMIT_STACK, &rlim);
- }
-#endif
-}
diff --git a/gcc-4.7/libiberty/stpcpy.c b/gcc-4.7/libiberty/stpcpy.c
deleted file mode 100644
index 57b32d1c8..000000000
--- a/gcc-4.7/libiberty/stpcpy.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* Implement the stpcpy function.
- Copyright (C) 2003 Free Software Foundation, Inc.
- Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Supplemental char* stpcpy (char *@var{dst}, const char *@var{src})
-
-Copies the string @var{src} into @var{dst}. Returns a pointer to
-@var{dst} + strlen(@var{src}).
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-extern size_t strlen (const char *);
-extern PTR memcpy (PTR, const PTR, size_t);
-
-char *
-stpcpy (char *dst, const char *src)
-{
- const size_t len = strlen (src);
- return (char *) memcpy (dst, src, len + 1) + len;
-}
diff --git a/gcc-4.7/libiberty/stpncpy.c b/gcc-4.7/libiberty/stpncpy.c
deleted file mode 100644
index 83d54e60c..000000000
--- a/gcc-4.7/libiberty/stpncpy.c
+++ /dev/null
@@ -1,48 +0,0 @@
-/* Implement the stpncpy function.
- Copyright (C) 2003, 2011 Free Software Foundation, Inc.
- Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Supplemental char* stpncpy (char *@var{dst}, const char *@var{src}, @
- size_t @var{len})
-
-Copies the string @var{src} into @var{dst}, copying exactly @var{len}
-and padding with zeros if necessary. If @var{len} < strlen(@var{src})
-then return @var{dst} + @var{len}, otherwise returns @var{dst} +
-strlen(@var{src}).
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-extern size_t strlen (const char *);
-extern char *strncpy (char *, const char *, size_t);
-
-char *
-stpncpy (char *dst, const char *src, size_t len)
-{
- size_t n = strlen (src);
- if (n > len)
- n = len;
- return strncpy (dst, src, len) + n;
-}
diff --git a/gcc-4.7/libiberty/strcasecmp.c b/gcc-4.7/libiberty/strcasecmp.c
deleted file mode 100644
index 131d81c2c..000000000
--- a/gcc-4.7/libiberty/strcasecmp.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (c) 1987 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of California at Berkeley. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific written prior permission. This software
- * is provided ``as is'' without express or implied warranty.
- */
-
-/*
-
-@deftypefn Supplemental int strcasecmp (const char *@var{s1}, const char *@var{s2})
-
-A case-insensitive @code{strcmp}.
-
-@end deftypefn
-
-*/
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87";
-#endif /* LIBC_SCCS and not lint */
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-/*
- * This array is designed for mapping upper and lower case letter
- * together for a case independent comparison. The mappings are
- * based upon ascii character sequences.
- */
-typedef unsigned char uc;
-static const unsigned char charmap[] = {
- (uc)'\000',(uc)'\001',(uc)'\002',(uc)'\003',(uc)'\004',(uc)'\005',(uc)'\006',(uc)'\007',
- (uc)'\010',(uc)'\011',(uc)'\012',(uc)'\013',(uc)'\014',(uc)'\015',(uc)'\016',(uc)'\017',
- (uc)'\020',(uc)'\021',(uc)'\022',(uc)'\023',(uc)'\024',(uc)'\025',(uc)'\026',(uc)'\027',
- (uc)'\030',(uc)'\031',(uc)'\032',(uc)'\033',(uc)'\034',(uc)'\035',(uc)'\036',(uc)'\037',
- (uc)'\040',(uc)'\041',(uc)'\042',(uc)'\043',(uc)'\044',(uc)'\045',(uc)'\046',(uc)'\047',
- (uc)'\050',(uc)'\051',(uc)'\052',(uc)'\053',(uc)'\054',(uc)'\055',(uc)'\056',(uc)'\057',
- (uc)'\060',(uc)'\061',(uc)'\062',(uc)'\063',(uc)'\064',(uc)'\065',(uc)'\066',(uc)'\067',
- (uc)'\070',(uc)'\071',(uc)'\072',(uc)'\073',(uc)'\074',(uc)'\075',(uc)'\076',(uc)'\077',
- (uc)'\100',(uc)'\141',(uc)'\142',(uc)'\143',(uc)'\144',(uc)'\145',(uc)'\146',(uc)'\147',
- (uc)'\150',(uc)'\151',(uc)'\152',(uc)'\153',(uc)'\154',(uc)'\155',(uc)'\156',(uc)'\157',
- (uc)'\160',(uc)'\161',(uc)'\162',(uc)'\163',(uc)'\164',(uc)'\165',(uc)'\166',(uc)'\167',
- (uc)'\170',(uc)'\171',(uc)'\172',(uc)'\133',(uc)'\134',(uc)'\135',(uc)'\136',(uc)'\137',
- (uc)'\140',(uc)'\141',(uc)'\142',(uc)'\143',(uc)'\144',(uc)'\145',(uc)'\146',(uc)'\147',
- (uc)'\150',(uc)'\151',(uc)'\152',(uc)'\153',(uc)'\154',(uc)'\155',(uc)'\156',(uc)'\157',
- (uc)'\160',(uc)'\161',(uc)'\162',(uc)'\163',(uc)'\164',(uc)'\165',(uc)'\166',(uc)'\167',
- (uc)'\170',(uc)'\171',(uc)'\172',(uc)'\173',(uc)'\174',(uc)'\175',(uc)'\176',(uc)'\177',
- (uc)'\200',(uc)'\201',(uc)'\202',(uc)'\203',(uc)'\204',(uc)'\205',(uc)'\206',(uc)'\207',
- (uc)'\210',(uc)'\211',(uc)'\212',(uc)'\213',(uc)'\214',(uc)'\215',(uc)'\216',(uc)'\217',
- (uc)'\220',(uc)'\221',(uc)'\222',(uc)'\223',(uc)'\224',(uc)'\225',(uc)'\226',(uc)'\227',
- (uc)'\230',(uc)'\231',(uc)'\232',(uc)'\233',(uc)'\234',(uc)'\235',(uc)'\236',(uc)'\237',
- (uc)'\240',(uc)'\241',(uc)'\242',(uc)'\243',(uc)'\244',(uc)'\245',(uc)'\246',(uc)'\247',
- (uc)'\250',(uc)'\251',(uc)'\252',(uc)'\253',(uc)'\254',(uc)'\255',(uc)'\256',(uc)'\257',
- (uc)'\260',(uc)'\261',(uc)'\262',(uc)'\263',(uc)'\264',(uc)'\265',(uc)'\266',(uc)'\267',
- (uc)'\270',(uc)'\271',(uc)'\272',(uc)'\273',(uc)'\274',(uc)'\275',(uc)'\276',(uc)'\277',
- (uc)'\300',(uc)'\341',(uc)'\342',(uc)'\343',(uc)'\344',(uc)'\345',(uc)'\346',(uc)'\347',
- (uc)'\350',(uc)'\351',(uc)'\352',(uc)'\353',(uc)'\354',(uc)'\355',(uc)'\356',(uc)'\357',
- (uc)'\360',(uc)'\361',(uc)'\362',(uc)'\363',(uc)'\364',(uc)'\365',(uc)'\366',(uc)'\367',
- (uc)'\370',(uc)'\371',(uc)'\372',(uc)'\333',(uc)'\334',(uc)'\335',(uc)'\336',(uc)'\337',
- (uc)'\340',(uc)'\341',(uc)'\342',(uc)'\343',(uc)'\344',(uc)'\345',(uc)'\346',(uc)'\347',
- (uc)'\350',(uc)'\351',(uc)'\352',(uc)'\353',(uc)'\354',(uc)'\355',(uc)'\356',(uc)'\357',
- (uc)'\360',(uc)'\361',(uc)'\362',(uc)'\363',(uc)'\364',(uc)'\365',(uc)'\366',(uc)'\367',
- (uc)'\370',(uc)'\371',(uc)'\372',(uc)'\373',(uc)'\374',(uc)'\375',(uc)'\376',(uc)'\377',
-};
-
-int
-strcasecmp(const char *s1, const char *s2)
-{
- register unsigned char u1, u2;
-
- for (;;) {
- u1 = (unsigned char) *s1++;
- u2 = (unsigned char) *s2++;
- if (charmap[u1] != charmap[u2]) {
- return charmap[u1] - charmap[u2];
- }
- if (u1 == '\0') {
- return 0;
- }
- }
-}
-
diff --git a/gcc-4.7/libiberty/strchr.c b/gcc-4.7/libiberty/strchr.c
deleted file mode 100644
index 935805ef4..000000000
--- a/gcc-4.7/libiberty/strchr.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Portable version of strchr()
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental char* strchr (const char *@var{s}, int @var{c})
-
-Returns a pointer to the first occurrence of the character @var{c} in
-the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the
-null character, the results are undefined.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-
-char *
-strchr (register const char *s, int c)
-{
- do {
- if (*s == c)
- {
- return (char*)s;
- }
- } while (*s++);
- return (0);
-}
diff --git a/gcc-4.7/libiberty/strdup.c b/gcc-4.7/libiberty/strdup.c
deleted file mode 100644
index 78c2093b6..000000000
--- a/gcc-4.7/libiberty/strdup.c
+++ /dev/null
@@ -1,27 +0,0 @@
-/*
-
-@deftypefn Supplemental char* strdup (const char *@var{s})
-
-Returns a pointer to a copy of @var{s} in memory obtained from
-@code{malloc}, or @code{NULL} if insufficient memory was available.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-extern size_t strlen (const char*);
-extern PTR malloc (size_t);
-extern PTR memcpy (PTR, const PTR, size_t);
-
-char *
-strdup(const char *s)
-{
- size_t len = strlen (s) + 1;
- char *result = (char*) malloc (len);
- if (result == (char*) 0)
- return (char*) 0;
- return (char*) memcpy (result, s, len);
-}
diff --git a/gcc-4.7/libiberty/strerror.c b/gcc-4.7/libiberty/strerror.c
deleted file mode 100644
index 0efadc3d6..000000000
--- a/gcc-4.7/libiberty/strerror.c
+++ /dev/null
@@ -1,809 +0,0 @@
-/* Extended support for using errno values.
- Written by Fred Fish. fnf@cygnus.com
- This file is in the public domain. --Per Bothner. */
-
-#include "config.h"
-
-#ifdef HAVE_SYS_ERRLIST
-/* Note that errno.h (not sure what OS) or stdio.h (BSD 4.4, at least)
- might declare sys_errlist in a way that the compiler might consider
- incompatible with our later declaration, perhaps by using const
- attributes. So we hide the declaration in errno.h (if any) using a
- macro. */
-#define sys_nerr sys_nerr__
-#define sys_errlist sys_errlist__
-#endif
-
-#include "ansidecl.h"
-#include "libiberty.h"
-
-#include <stdio.h>
-#include <errno.h>
-
-#ifdef HAVE_SYS_ERRLIST
-#undef sys_nerr
-#undef sys_errlist
-#endif
-
-/* Routines imported from standard C runtime libraries. */
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#else
-extern PTR malloc ();
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-extern PTR memset ();
-#endif
-
-#ifndef MAX
-# define MAX(a,b) ((a) > (b) ? (a) : (b))
-#endif
-
-static void init_error_tables (void);
-
-/* Translation table for errno values. See intro(2) in most UNIX systems
- Programmers Reference Manuals.
-
- Note that this table is generally only accessed when it is used at runtime
- to initialize errno name and message tables that are indexed by errno
- value.
-
- Not all of these errnos will exist on all systems. This table is the only
- thing that should have to be updated as new error numbers are introduced.
- It's sort of ugly, but at least its portable. */
-
-struct error_info
-{
- const int value; /* The numeric value from <errno.h> */
- const char *const name; /* The equivalent symbolic value */
-#ifndef HAVE_SYS_ERRLIST
- const char *const msg; /* Short message about this value */
-#endif
-};
-
-#ifndef HAVE_SYS_ERRLIST
-# define ENTRY(value, name, msg) {value, name, msg}
-#else
-# define ENTRY(value, name, msg) {value, name}
-#endif
-
-static const struct error_info error_table[] =
-{
-#if defined (EPERM)
- ENTRY(EPERM, "EPERM", "Not owner"),
-#endif
-#if defined (ENOENT)
- ENTRY(ENOENT, "ENOENT", "No such file or directory"),
-#endif
-#if defined (ESRCH)
- ENTRY(ESRCH, "ESRCH", "No such process"),
-#endif
-#if defined (EINTR)
- ENTRY(EINTR, "EINTR", "Interrupted system call"),
-#endif
-#if defined (EIO)
- ENTRY(EIO, "EIO", "I/O error"),
-#endif
-#if defined (ENXIO)
- ENTRY(ENXIO, "ENXIO", "No such device or address"),
-#endif
-#if defined (E2BIG)
- ENTRY(E2BIG, "E2BIG", "Arg list too long"),
-#endif
-#if defined (ENOEXEC)
- ENTRY(ENOEXEC, "ENOEXEC", "Exec format error"),
-#endif
-#if defined (EBADF)
- ENTRY(EBADF, "EBADF", "Bad file number"),
-#endif
-#if defined (ECHILD)
- ENTRY(ECHILD, "ECHILD", "No child processes"),
-#endif
-#if defined (EWOULDBLOCK) /* Put before EAGAIN, sometimes aliased */
- ENTRY(EWOULDBLOCK, "EWOULDBLOCK", "Operation would block"),
-#endif
-#if defined (EAGAIN)
- ENTRY(EAGAIN, "EAGAIN", "No more processes"),
-#endif
-#if defined (ENOMEM)
- ENTRY(ENOMEM, "ENOMEM", "Not enough space"),
-#endif
-#if defined (EACCES)
- ENTRY(EACCES, "EACCES", "Permission denied"),
-#endif
-#if defined (EFAULT)
- ENTRY(EFAULT, "EFAULT", "Bad address"),
-#endif
-#if defined (ENOTBLK)
- ENTRY(ENOTBLK, "ENOTBLK", "Block device required"),
-#endif
-#if defined (EBUSY)
- ENTRY(EBUSY, "EBUSY", "Device busy"),
-#endif
-#if defined (EEXIST)
- ENTRY(EEXIST, "EEXIST", "File exists"),
-#endif
-#if defined (EXDEV)
- ENTRY(EXDEV, "EXDEV", "Cross-device link"),
-#endif
-#if defined (ENODEV)
- ENTRY(ENODEV, "ENODEV", "No such device"),
-#endif
-#if defined (ENOTDIR)
- ENTRY(ENOTDIR, "ENOTDIR", "Not a directory"),
-#endif
-#if defined (EISDIR)
- ENTRY(EISDIR, "EISDIR", "Is a directory"),
-#endif
-#if defined (EINVAL)
- ENTRY(EINVAL, "EINVAL", "Invalid argument"),
-#endif
-#if defined (ENFILE)
- ENTRY(ENFILE, "ENFILE", "File table overflow"),
-#endif
-#if defined (EMFILE)
- ENTRY(EMFILE, "EMFILE", "Too many open files"),
-#endif
-#if defined (ENOTTY)
- ENTRY(ENOTTY, "ENOTTY", "Not a typewriter"),
-#endif
-#if defined (ETXTBSY)
- ENTRY(ETXTBSY, "ETXTBSY", "Text file busy"),
-#endif
-#if defined (EFBIG)
- ENTRY(EFBIG, "EFBIG", "File too large"),
-#endif
-#if defined (ENOSPC)
- ENTRY(ENOSPC, "ENOSPC", "No space left on device"),
-#endif
-#if defined (ESPIPE)
- ENTRY(ESPIPE, "ESPIPE", "Illegal seek"),
-#endif
-#if defined (EROFS)
- ENTRY(EROFS, "EROFS", "Read-only file system"),
-#endif
-#if defined (EMLINK)
- ENTRY(EMLINK, "EMLINK", "Too many links"),
-#endif
-#if defined (EPIPE)
- ENTRY(EPIPE, "EPIPE", "Broken pipe"),
-#endif
-#if defined (EDOM)
- ENTRY(EDOM, "EDOM", "Math argument out of domain of func"),
-#endif
-#if defined (ERANGE)
- ENTRY(ERANGE, "ERANGE", "Math result not representable"),
-#endif
-#if defined (ENOMSG)
- ENTRY(ENOMSG, "ENOMSG", "No message of desired type"),
-#endif
-#if defined (EIDRM)
- ENTRY(EIDRM, "EIDRM", "Identifier removed"),
-#endif
-#if defined (ECHRNG)
- ENTRY(ECHRNG, "ECHRNG", "Channel number out of range"),
-#endif
-#if defined (EL2NSYNC)
- ENTRY(EL2NSYNC, "EL2NSYNC", "Level 2 not synchronized"),
-#endif
-#if defined (EL3HLT)
- ENTRY(EL3HLT, "EL3HLT", "Level 3 halted"),
-#endif
-#if defined (EL3RST)
- ENTRY(EL3RST, "EL3RST", "Level 3 reset"),
-#endif
-#if defined (ELNRNG)
- ENTRY(ELNRNG, "ELNRNG", "Link number out of range"),
-#endif
-#if defined (EUNATCH)
- ENTRY(EUNATCH, "EUNATCH", "Protocol driver not attached"),
-#endif
-#if defined (ENOCSI)
- ENTRY(ENOCSI, "ENOCSI", "No CSI structure available"),
-#endif
-#if defined (EL2HLT)
- ENTRY(EL2HLT, "EL2HLT", "Level 2 halted"),
-#endif
-#if defined (EDEADLK)
- ENTRY(EDEADLK, "EDEADLK", "Deadlock condition"),
-#endif
-#if defined (ENOLCK)
- ENTRY(ENOLCK, "ENOLCK", "No record locks available"),
-#endif
-#if defined (EBADE)
- ENTRY(EBADE, "EBADE", "Invalid exchange"),
-#endif
-#if defined (EBADR)
- ENTRY(EBADR, "EBADR", "Invalid request descriptor"),
-#endif
-#if defined (EXFULL)
- ENTRY(EXFULL, "EXFULL", "Exchange full"),
-#endif
-#if defined (ENOANO)
- ENTRY(ENOANO, "ENOANO", "No anode"),
-#endif
-#if defined (EBADRQC)
- ENTRY(EBADRQC, "EBADRQC", "Invalid request code"),
-#endif
-#if defined (EBADSLT)
- ENTRY(EBADSLT, "EBADSLT", "Invalid slot"),
-#endif
-#if defined (EDEADLOCK)
- ENTRY(EDEADLOCK, "EDEADLOCK", "File locking deadlock error"),
-#endif
-#if defined (EBFONT)
- ENTRY(EBFONT, "EBFONT", "Bad font file format"),
-#endif
-#if defined (ENOSTR)
- ENTRY(ENOSTR, "ENOSTR", "Device not a stream"),
-#endif
-#if defined (ENODATA)
- ENTRY(ENODATA, "ENODATA", "No data available"),
-#endif
-#if defined (ETIME)
- ENTRY(ETIME, "ETIME", "Timer expired"),
-#endif
-#if defined (ENOSR)
- ENTRY(ENOSR, "ENOSR", "Out of streams resources"),
-#endif
-#if defined (ENONET)
- ENTRY(ENONET, "ENONET", "Machine is not on the network"),
-#endif
-#if defined (ENOPKG)
- ENTRY(ENOPKG, "ENOPKG", "Package not installed"),
-#endif
-#if defined (EREMOTE)
- ENTRY(EREMOTE, "EREMOTE", "Object is remote"),
-#endif
-#if defined (ENOLINK)
- ENTRY(ENOLINK, "ENOLINK", "Link has been severed"),
-#endif
-#if defined (EADV)
- ENTRY(EADV, "EADV", "Advertise error"),
-#endif
-#if defined (ESRMNT)
- ENTRY(ESRMNT, "ESRMNT", "Srmount error"),
-#endif
-#if defined (ECOMM)
- ENTRY(ECOMM, "ECOMM", "Communication error on send"),
-#endif
-#if defined (EPROTO)
- ENTRY(EPROTO, "EPROTO", "Protocol error"),
-#endif
-#if defined (EMULTIHOP)
- ENTRY(EMULTIHOP, "EMULTIHOP", "Multihop attempted"),
-#endif
-#if defined (EDOTDOT)
- ENTRY(EDOTDOT, "EDOTDOT", "RFS specific error"),
-#endif
-#if defined (EBADMSG)
- ENTRY(EBADMSG, "EBADMSG", "Not a data message"),
-#endif
-#if defined (ENAMETOOLONG)
- ENTRY(ENAMETOOLONG, "ENAMETOOLONG", "File name too long"),
-#endif
-#if defined (EOVERFLOW)
- ENTRY(EOVERFLOW, "EOVERFLOW", "Value too large for defined data type"),
-#endif
-#if defined (ENOTUNIQ)
- ENTRY(ENOTUNIQ, "ENOTUNIQ", "Name not unique on network"),
-#endif
-#if defined (EBADFD)
- ENTRY(EBADFD, "EBADFD", "File descriptor in bad state"),
-#endif
-#if defined (EREMCHG)
- ENTRY(EREMCHG, "EREMCHG", "Remote address changed"),
-#endif
-#if defined (ELIBACC)
- ENTRY(ELIBACC, "ELIBACC", "Can not access a needed shared library"),
-#endif
-#if defined (ELIBBAD)
- ENTRY(ELIBBAD, "ELIBBAD", "Accessing a corrupted shared library"),
-#endif
-#if defined (ELIBSCN)
- ENTRY(ELIBSCN, "ELIBSCN", ".lib section in a.out corrupted"),
-#endif
-#if defined (ELIBMAX)
- ENTRY(ELIBMAX, "ELIBMAX", "Attempting to link in too many shared libraries"),
-#endif
-#if defined (ELIBEXEC)
- ENTRY(ELIBEXEC, "ELIBEXEC", "Cannot exec a shared library directly"),
-#endif
-#if defined (EILSEQ)
- ENTRY(EILSEQ, "EILSEQ", "Illegal byte sequence"),
-#endif
-#if defined (ENOSYS)
- ENTRY(ENOSYS, "ENOSYS", "Operation not applicable"),
-#endif
-#if defined (ELOOP)
- ENTRY(ELOOP, "ELOOP", "Too many symbolic links encountered"),
-#endif
-#if defined (ERESTART)
- ENTRY(ERESTART, "ERESTART", "Interrupted system call should be restarted"),
-#endif
-#if defined (ESTRPIPE)
- ENTRY(ESTRPIPE, "ESTRPIPE", "Streams pipe error"),
-#endif
-#if defined (ENOTEMPTY)
- ENTRY(ENOTEMPTY, "ENOTEMPTY", "Directory not empty"),
-#endif
-#if defined (EUSERS)
- ENTRY(EUSERS, "EUSERS", "Too many users"),
-#endif
-#if defined (ENOTSOCK)
- ENTRY(ENOTSOCK, "ENOTSOCK", "Socket operation on non-socket"),
-#endif
-#if defined (EDESTADDRREQ)
- ENTRY(EDESTADDRREQ, "EDESTADDRREQ", "Destination address required"),
-#endif
-#if defined (EMSGSIZE)
- ENTRY(EMSGSIZE, "EMSGSIZE", "Message too long"),
-#endif
-#if defined (EPROTOTYPE)
- ENTRY(EPROTOTYPE, "EPROTOTYPE", "Protocol wrong type for socket"),
-#endif
-#if defined (ENOPROTOOPT)
- ENTRY(ENOPROTOOPT, "ENOPROTOOPT", "Protocol not available"),
-#endif
-#if defined (EPROTONOSUPPORT)
- ENTRY(EPROTONOSUPPORT, "EPROTONOSUPPORT", "Protocol not supported"),
-#endif
-#if defined (ESOCKTNOSUPPORT)
- ENTRY(ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT", "Socket type not supported"),
-#endif
-#if defined (EOPNOTSUPP)
- ENTRY(EOPNOTSUPP, "EOPNOTSUPP", "Operation not supported on transport endpoint"),
-#endif
-#if defined (EPFNOSUPPORT)
- ENTRY(EPFNOSUPPORT, "EPFNOSUPPORT", "Protocol family not supported"),
-#endif
-#if defined (EAFNOSUPPORT)
- ENTRY(EAFNOSUPPORT, "EAFNOSUPPORT", "Address family not supported by protocol"),
-#endif
-#if defined (EADDRINUSE)
- ENTRY(EADDRINUSE, "EADDRINUSE", "Address already in use"),
-#endif
-#if defined (EADDRNOTAVAIL)
- ENTRY(EADDRNOTAVAIL, "EADDRNOTAVAIL","Cannot assign requested address"),
-#endif
-#if defined (ENETDOWN)
- ENTRY(ENETDOWN, "ENETDOWN", "Network is down"),
-#endif
-#if defined (ENETUNREACH)
- ENTRY(ENETUNREACH, "ENETUNREACH", "Network is unreachable"),
-#endif
-#if defined (ENETRESET)
- ENTRY(ENETRESET, "ENETRESET", "Network dropped connection because of reset"),
-#endif
-#if defined (ECONNABORTED)
- ENTRY(ECONNABORTED, "ECONNABORTED", "Software caused connection abort"),
-#endif
-#if defined (ECONNRESET)
- ENTRY(ECONNRESET, "ECONNRESET", "Connection reset by peer"),
-#endif
-#if defined (ENOBUFS)
- ENTRY(ENOBUFS, "ENOBUFS", "No buffer space available"),
-#endif
-#if defined (EISCONN)
- ENTRY(EISCONN, "EISCONN", "Transport endpoint is already connected"),
-#endif
-#if defined (ENOTCONN)
- ENTRY(ENOTCONN, "ENOTCONN", "Transport endpoint is not connected"),
-#endif
-#if defined (ESHUTDOWN)
- ENTRY(ESHUTDOWN, "ESHUTDOWN", "Cannot send after transport endpoint shutdown"),
-#endif
-#if defined (ETOOMANYREFS)
- ENTRY(ETOOMANYREFS, "ETOOMANYREFS", "Too many references: cannot splice"),
-#endif
-#if defined (ETIMEDOUT)
- ENTRY(ETIMEDOUT, "ETIMEDOUT", "Connection timed out"),
-#endif
-#if defined (ECONNREFUSED)
- ENTRY(ECONNREFUSED, "ECONNREFUSED", "Connection refused"),
-#endif
-#if defined (EHOSTDOWN)
- ENTRY(EHOSTDOWN, "EHOSTDOWN", "Host is down"),
-#endif
-#if defined (EHOSTUNREACH)
- ENTRY(EHOSTUNREACH, "EHOSTUNREACH", "No route to host"),
-#endif
-#if defined (EALREADY)
- ENTRY(EALREADY, "EALREADY", "Operation already in progress"),
-#endif
-#if defined (EINPROGRESS)
- ENTRY(EINPROGRESS, "EINPROGRESS", "Operation now in progress"),
-#endif
-#if defined (ESTALE)
- ENTRY(ESTALE, "ESTALE", "Stale NFS file handle"),
-#endif
-#if defined (EUCLEAN)
- ENTRY(EUCLEAN, "EUCLEAN", "Structure needs cleaning"),
-#endif
-#if defined (ENOTNAM)
- ENTRY(ENOTNAM, "ENOTNAM", "Not a XENIX named type file"),
-#endif
-#if defined (ENAVAIL)
- ENTRY(ENAVAIL, "ENAVAIL", "No XENIX semaphores available"),
-#endif
-#if defined (EISNAM)
- ENTRY(EISNAM, "EISNAM", "Is a named type file"),
-#endif
-#if defined (EREMOTEIO)
- ENTRY(EREMOTEIO, "EREMOTEIO", "Remote I/O error"),
-#endif
- ENTRY(0, NULL, NULL)
-};
-
-#ifdef EVMSERR
-/* This is not in the table, because the numeric value of EVMSERR (32767)
- lies outside the range of sys_errlist[]. */
-static struct { int value; const char *name, *msg; }
- evmserr = { EVMSERR, "EVMSERR", "VMS-specific error" };
-#endif
-
-/* Translation table allocated and initialized at runtime. Indexed by the
- errno value to find the equivalent symbolic value. */
-
-static const char **error_names;
-static int num_error_names = 0;
-
-/* Translation table allocated and initialized at runtime, if it does not
- already exist in the host environment. Indexed by the errno value to find
- the descriptive string.
-
- We don't export it for use in other modules because even though it has the
- same name, it differs from other implementations in that it is dynamically
- initialized rather than statically initialized. */
-
-#ifndef HAVE_SYS_ERRLIST
-
-#define sys_nerr sys_nerr__
-#define sys_errlist sys_errlist__
-static int sys_nerr;
-static const char **sys_errlist;
-
-#else
-
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-#endif
-
-/*
-
-NAME
-
- init_error_tables -- initialize the name and message tables
-
-SYNOPSIS
-
- static void init_error_tables ();
-
-DESCRIPTION
-
- Using the error_table, which is initialized at compile time, generate
- the error_names and the sys_errlist (if needed) tables, which are
- indexed at runtime by a specific errno value.
-
-BUGS
-
- The initialization of the tables may fail under low memory conditions,
- in which case we don't do anything particularly useful, but we don't
- bomb either. Who knows, it might succeed at a later point if we free
- some memory in the meantime. In any case, the other routines know
- how to deal with lack of a table after trying to initialize it. This
- may or may not be considered to be a bug, that we don't specifically
- warn about this particular failure mode.
-
-*/
-
-static void
-init_error_tables (void)
-{
- const struct error_info *eip;
- int nbytes;
-
- /* If we haven't already scanned the error_table once to find the maximum
- errno value, then go find it now. */
-
- if (num_error_names == 0)
- {
- for (eip = error_table; eip -> name != NULL; eip++)
- {
- if (eip -> value >= num_error_names)
- {
- num_error_names = eip -> value + 1;
- }
- }
- }
-
- /* Now attempt to allocate the error_names table, zero it out, and then
- initialize it from the statically initialized error_table. */
-
- if (error_names == NULL)
- {
- nbytes = num_error_names * sizeof (char *);
- if ((error_names = (const char **) malloc (nbytes)) != NULL)
- {
- memset (error_names, 0, nbytes);
- for (eip = error_table; eip -> name != NULL; eip++)
- {
- error_names[eip -> value] = eip -> name;
- }
- }
- }
-
-#ifndef HAVE_SYS_ERRLIST
-
- /* Now attempt to allocate the sys_errlist table, zero it out, and then
- initialize it from the statically initialized error_table. */
-
- if (sys_errlist == NULL)
- {
- nbytes = num_error_names * sizeof (char *);
- if ((sys_errlist = (const char **) malloc (nbytes)) != NULL)
- {
- memset (sys_errlist, 0, nbytes);
- sys_nerr = num_error_names;
- for (eip = error_table; eip -> name != NULL; eip++)
- {
- sys_errlist[eip -> value] = eip -> msg;
- }
- }
- }
-
-#endif
-
-}
-
-/*
-
-
-@deftypefn Extension int errno_max (void)
-
-Returns the maximum @code{errno} value for which a corresponding
-symbolic name or message is available. Note that in the case where we
-use the @code{sys_errlist} supplied by the system, it is possible for
-there to be more symbolic names than messages, or vice versa. In
-fact, the manual page for @code{perror(3C)} explicitly warns that one
-should check the size of the table (@code{sys_nerr}) before indexing
-it, since new error codes may be added to the system before they are
-added to the table. Thus @code{sys_nerr} might be smaller than value
-implied by the largest @code{errno} value defined in @code{<errno.h>}.
-
-We return the maximum value that can be used to obtain a meaningful
-symbolic name or message.
-
-@end deftypefn
-
-*/
-
-int
-errno_max (void)
-{
- int maxsize;
-
- if (error_names == NULL)
- {
- init_error_tables ();
- }
- maxsize = MAX (sys_nerr, num_error_names);
- return (maxsize - 1);
-}
-
-#ifndef HAVE_STRERROR
-
-/*
-
-@deftypefn Supplemental char* strerror (int @var{errnoval})
-
-Maps an @code{errno} number to an error message string, the contents
-of which are implementation defined. On systems which have the
-external variables @code{sys_nerr} and @code{sys_errlist}, these
-strings will be the same as the ones used by @code{perror}.
-
-If the supplied error number is within the valid range of indices for
-the @code{sys_errlist}, but no message is available for the particular
-error number, then returns the string @samp{Error @var{num}}, where
-@var{num} is the error number.
-
-If the supplied error number is not a valid index into
-@code{sys_errlist}, returns @code{NULL}.
-
-The returned string is only guaranteed to be valid only until the
-next call to @code{strerror}.
-
-@end deftypefn
-
-*/
-
-char *
-strerror (int errnoval)
-{
- const char *msg;
- static char buf[32];
-
-#ifndef HAVE_SYS_ERRLIST
-
- if (error_names == NULL)
- {
- init_error_tables ();
- }
-
-#endif
-
- if ((errnoval < 0) || (errnoval >= sys_nerr))
- {
-#ifdef EVMSERR
- if (errnoval == evmserr.value)
- msg = evmserr.msg;
- else
-#endif
- /* Out of range, just return NULL */
- msg = NULL;
- }
- else if ((sys_errlist == NULL) || (sys_errlist[errnoval] == NULL))
- {
- /* In range, but no sys_errlist or no entry at this index. */
- sprintf (buf, "Error %d", errnoval);
- msg = buf;
- }
- else
- {
- /* In range, and a valid message. Just return the message. */
- msg = (char *) sys_errlist[errnoval];
- }
-
- return (msg);
-}
-
-#endif /* ! HAVE_STRERROR */
-
-
-/*
-
-@deftypefn Replacement {const char*} strerrno (int @var{errnum})
-
-Given an error number returned from a system call (typically returned
-in @code{errno}), returns a pointer to a string containing the
-symbolic name of that error number, as found in @code{<errno.h>}.
-
-If the supplied error number is within the valid range of indices for
-symbolic names, but no name is available for the particular error
-number, then returns the string @samp{Error @var{num}}, where @var{num}
-is the error number.
-
-If the supplied error number is not within the range of valid
-indices, then returns @code{NULL}.
-
-The contents of the location pointed to are only guaranteed to be
-valid until the next call to @code{strerrno}.
-
-@end deftypefn
-
-*/
-
-const char *
-strerrno (int errnoval)
-{
- const char *name;
- static char buf[32];
-
- if (error_names == NULL)
- {
- init_error_tables ();
- }
-
- if ((errnoval < 0) || (errnoval >= num_error_names))
- {
-#ifdef EVMSERR
- if (errnoval == evmserr.value)
- name = evmserr.name;
- else
-#endif
- /* Out of range, just return NULL */
- name = NULL;
- }
- else if ((error_names == NULL) || (error_names[errnoval] == NULL))
- {
- /* In range, but no error_names or no entry at this index. */
- sprintf (buf, "Error %d", errnoval);
- name = (const char *) buf;
- }
- else
- {
- /* In range, and a valid name. Just return the name. */
- name = error_names[errnoval];
- }
-
- return (name);
-}
-
-/*
-
-@deftypefn Extension int strtoerrno (const char *@var{name})
-
-Given the symbolic name of a error number (e.g., @code{EACCES}), map it
-to an errno value. If no translation is found, returns 0.
-
-@end deftypefn
-
-*/
-
-int
-strtoerrno (const char *name)
-{
- int errnoval = 0;
-
- if (name != NULL)
- {
- if (error_names == NULL)
- {
- init_error_tables ();
- }
- for (errnoval = 0; errnoval < num_error_names; errnoval++)
- {
- if ((error_names[errnoval] != NULL) &&
- (strcmp (name, error_names[errnoval]) == 0))
- {
- break;
- }
- }
- if (errnoval == num_error_names)
- {
-#ifdef EVMSERR
- if (strcmp (name, evmserr.name) == 0)
- errnoval = evmserr.value;
- else
-#endif
- errnoval = 0;
- }
- }
- return (errnoval);
-}
-
-
-/* A simple little main that does nothing but print all the errno translations
- if MAIN is defined and this file is compiled and linked. */
-
-#ifdef MAIN
-
-#include <stdio.h>
-
-int
-main (void)
-{
- int errn;
- int errnmax;
- const char *name;
- const char *msg;
- char *strerror ();
-
- errnmax = errno_max ();
- printf ("%d entries in names table.\n", num_error_names);
- printf ("%d entries in messages table.\n", sys_nerr);
- printf ("%d is max useful index.\n", errnmax);
-
- /* Keep printing values until we get to the end of *both* tables, not
- *either* table. Note that knowing the maximum useful index does *not*
- relieve us of the responsibility of testing the return pointer for
- NULL. */
-
- for (errn = 0; errn <= errnmax; errn++)
- {
- name = strerrno (errn);
- name = (name == NULL) ? "<NULL>" : name;
- msg = strerror (errn);
- msg = (msg == NULL) ? "<NULL>" : msg;
- printf ("%-4d%-18s%s\n", errn, name, msg);
- }
-
- return 0;
-}
-
-#endif
diff --git a/gcc-4.7/libiberty/strncasecmp.c b/gcc-4.7/libiberty/strncasecmp.c
deleted file mode 100644
index 47700dde5..000000000
--- a/gcc-4.7/libiberty/strncasecmp.c
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- * Copyright (c) 1987 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms are permitted
- * provided that this notice is preserved and that due credit is given
- * to the University of California at Berkeley. The name of the University
- * may not be used to endorse or promote products derived from this
- * software without specific written prior permission. This software
- * is provided ``as is'' without express or implied warranty.
- */
-
-/*
-
-@deftypefn Supplemental int strncasecmp (const char *@var{s1}, const char *@var{s2})
-
-A case-insensitive @code{strncmp}.
-
-@end deftypefn
-
-*/
-
-#if defined(LIBC_SCCS) && !defined(lint)
-static char sccsid[] = "@(#)strcasecmp.c 5.5 (Berkeley) 11/24/87";
-#endif /* LIBC_SCCS and not lint */
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-/*
- * This array is designed for mapping upper and lower case letter
- * together for a case independent comparison. The mappings are
- * based upon ascii character sequences.
- */
-static const unsigned char charmap[] = {
- '\000', '\001', '\002', '\003', '\004', '\005', '\006', '\007',
- '\010', '\011', '\012', '\013', '\014', '\015', '\016', '\017',
- '\020', '\021', '\022', '\023', '\024', '\025', '\026', '\027',
- '\030', '\031', '\032', '\033', '\034', '\035', '\036', '\037',
- '\040', '\041', '\042', '\043', '\044', '\045', '\046', '\047',
- '\050', '\051', '\052', '\053', '\054', '\055', '\056', '\057',
- '\060', '\061', '\062', '\063', '\064', '\065', '\066', '\067',
- '\070', '\071', '\072', '\073', '\074', '\075', '\076', '\077',
- '\100', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\133', '\134', '\135', '\136', '\137',
- '\140', '\141', '\142', '\143', '\144', '\145', '\146', '\147',
- '\150', '\151', '\152', '\153', '\154', '\155', '\156', '\157',
- '\160', '\161', '\162', '\163', '\164', '\165', '\166', '\167',
- '\170', '\171', '\172', '\173', '\174', '\175', '\176', '\177',
- '\200', '\201', '\202', '\203', '\204', '\205', '\206', '\207',
- '\210', '\211', '\212', '\213', '\214', '\215', '\216', '\217',
- '\220', '\221', '\222', '\223', '\224', '\225', '\226', '\227',
- '\230', '\231', '\232', '\233', '\234', '\235', '\236', '\237',
- '\240', '\241', '\242', '\243', '\244', '\245', '\246', '\247',
- '\250', '\251', '\252', '\253', '\254', '\255', '\256', '\257',
- '\260', '\261', '\262', '\263', '\264', '\265', '\266', '\267',
- '\270', '\271', '\272', '\273', '\274', '\275', '\276', '\277',
- '\300', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\333', '\334', '\335', '\336', '\337',
- '\340', '\341', '\342', '\343', '\344', '\345', '\346', '\347',
- '\350', '\351', '\352', '\353', '\354', '\355', '\356', '\357',
- '\360', '\361', '\362', '\363', '\364', '\365', '\366', '\367',
- '\370', '\371', '\372', '\373', '\374', '\375', '\376', '\377',
-};
-
-int
-strncasecmp(const char *s1, const char *s2, register size_t n)
-{
- register unsigned char u1, u2;
-
- for (; n != 0; --n) {
- u1 = (unsigned char) *s1++;
- u2 = (unsigned char) *s2++;
- if (charmap[u1] != charmap[u2]) {
- return charmap[u1] - charmap[u2];
- }
- if (u1 == '\0') {
- return 0;
- }
- }
- return 0;
-}
diff --git a/gcc-4.7/libiberty/strncmp.c b/gcc-4.7/libiberty/strncmp.c
deleted file mode 100644
index 23f6df617..000000000
--- a/gcc-4.7/libiberty/strncmp.c
+++ /dev/null
@@ -1,34 +0,0 @@
-/* strncmp -- compare two strings, stop after n bytes.
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental int strncmp (const char *@var{s1}, @
- const char *@var{s2}, size_t @var{n})
-
-Compares the first @var{n} bytes of two strings, returning a value as
-@code{strcmp}.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stddef.h>
-
-int
-strncmp(const char *s1, const char *s2, register size_t n)
-{
- register unsigned char u1, u2;
-
- while (n-- > 0)
- {
- u1 = (unsigned char) *s1++;
- u2 = (unsigned char) *s2++;
- if (u1 != u2)
- return u1 - u2;
- if (u1 == '\0')
- return 0;
- }
- return 0;
-}
diff --git a/gcc-4.7/libiberty/strndup.c b/gcc-4.7/libiberty/strndup.c
deleted file mode 100644
index 9e9b4e299..000000000
--- a/gcc-4.7/libiberty/strndup.c
+++ /dev/null
@@ -1,55 +0,0 @@
-/* Implement the strndup function.
- Copyright (C) 2005 Free Software Foundation, Inc.
- Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Extension char* strndup (const char *@var{s}, size_t @var{n})
-
-Returns a pointer to a copy of @var{s} with at most @var{n} characters
-in memory obtained from @code{malloc}, or @code{NULL} if insufficient
-memory was available. The result is always NUL terminated.
-
-@end deftypefn
-
-*/
-
-#include "ansidecl.h"
-#include <stddef.h>
-
-extern size_t strlen (const char*);
-extern PTR malloc (size_t);
-extern PTR memcpy (PTR, const PTR, size_t);
-
-char *
-strndup (const char *s, size_t n)
-{
- char *result;
- size_t len = strlen (s);
-
- if (n < len)
- len = n;
-
- result = (char *) malloc (len + 1);
- if (!result)
- return 0;
-
- result[len] = '\0';
- return (char *) memcpy (result, s, len);
-}
diff --git a/gcc-4.7/libiberty/strrchr.c b/gcc-4.7/libiberty/strrchr.c
deleted file mode 100644
index 5cf7c14d8..000000000
--- a/gcc-4.7/libiberty/strrchr.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Portable version of strrchr().
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental char* strrchr (const char *@var{s}, int @var{c})
-
-Returns a pointer to the last occurrence of the character @var{c} in
-the string @var{s}, or @code{NULL} if not found. If @var{c} is itself the
-null character, the results are undefined.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-
-char *
-strrchr (register const char *s, int c)
-{
- char *rtnval = 0;
-
- do {
- if (*s == c)
- rtnval = (char*) s;
- } while (*s++);
- return (rtnval);
-}
diff --git a/gcc-4.7/libiberty/strsignal.c b/gcc-4.7/libiberty/strsignal.c
deleted file mode 100644
index 666b1b4f1..000000000
--- a/gcc-4.7/libiberty/strsignal.c
+++ /dev/null
@@ -1,610 +0,0 @@
-/* Extended support for using signal values.
- Written by Fred Fish. fnf@cygnus.com
- This file is in the public domain. */
-
-#include "config.h"
-#include "ansidecl.h"
-#include "libiberty.h"
-
-/* We need to declare sys_siglist, because even if the system provides
- it we can't assume that it is declared in <signal.h> (for example,
- SunOS provides sys_siglist, but it does not declare it in any
- header file). However, we can't declare sys_siglist portably,
- because on some systems it is declared with const and on some
- systems it is declared without const. If we were using autoconf,
- we could work out the right declaration. Until, then we just
- ignore any declaration in the system header files, and always
- declare it ourselves. With luck, this will always work. */
-#define sys_siglist no_such_symbol
-#define sys_nsig sys_nsig__no_such_symbol
-
-#include <stdio.h>
-#include <signal.h>
-
-/* Routines imported from standard C runtime libraries. */
-
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#else
-extern PTR malloc ();
-#endif
-
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-extern PTR memset ();
-#endif
-
-/* Undefine the macro we used to hide the definition of sys_siglist
- found in the system header files. */
-#undef sys_siglist
-#undef sys_nsig
-
-#ifndef NULL
-# define NULL (void *) 0
-#endif
-
-#ifndef MAX
-# define MAX(a,b) ((a) > (b) ? (a) : (b))
-#endif
-
-static void init_signal_tables (void);
-
-/* Translation table for signal values.
-
- Note that this table is generally only accessed when it is used at runtime
- to initialize signal name and message tables that are indexed by signal
- value.
-
- Not all of these signals will exist on all systems. This table is the only
- thing that should have to be updated as new signal numbers are introduced.
- It's sort of ugly, but at least its portable. */
-
-struct signal_info
-{
- const int value; /* The numeric value from <signal.h> */
- const char *const name; /* The equivalent symbolic value */
-#ifndef HAVE_SYS_SIGLIST
- const char *const msg; /* Short message about this value */
-#endif
-};
-
-#ifndef HAVE_SYS_SIGLIST
-# define ENTRY(value, name, msg) {value, name, msg}
-#else
-# define ENTRY(value, name, msg) {value, name}
-#endif
-
-static const struct signal_info signal_table[] =
-{
-#if defined (SIGHUP)
- ENTRY(SIGHUP, "SIGHUP", "Hangup"),
-#endif
-#if defined (SIGINT)
- ENTRY(SIGINT, "SIGINT", "Interrupt"),
-#endif
-#if defined (SIGQUIT)
- ENTRY(SIGQUIT, "SIGQUIT", "Quit"),
-#endif
-#if defined (SIGILL)
- ENTRY(SIGILL, "SIGILL", "Illegal instruction"),
-#endif
-#if defined (SIGTRAP)
- ENTRY(SIGTRAP, "SIGTRAP", "Trace/breakpoint trap"),
-#endif
-/* Put SIGIOT before SIGABRT, so that if SIGIOT==SIGABRT then SIGABRT
- overrides SIGIOT. SIGABRT is in ANSI and POSIX.1, and SIGIOT isn't. */
-#if defined (SIGIOT)
- ENTRY(SIGIOT, "SIGIOT", "IOT trap"),
-#endif
-#if defined (SIGABRT)
- ENTRY(SIGABRT, "SIGABRT", "Aborted"),
-#endif
-#if defined (SIGEMT)
- ENTRY(SIGEMT, "SIGEMT", "Emulation trap"),
-#endif
-#if defined (SIGFPE)
- ENTRY(SIGFPE, "SIGFPE", "Arithmetic exception"),
-#endif
-#if defined (SIGKILL)
- ENTRY(SIGKILL, "SIGKILL", "Killed"),
-#endif
-#if defined (SIGBUS)
- ENTRY(SIGBUS, "SIGBUS", "Bus error"),
-#endif
-#if defined (SIGSEGV)
- ENTRY(SIGSEGV, "SIGSEGV", "Segmentation fault"),
-#endif
-#if defined (SIGSYS)
- ENTRY(SIGSYS, "SIGSYS", "Bad system call"),
-#endif
-#if defined (SIGPIPE)
- ENTRY(SIGPIPE, "SIGPIPE", "Broken pipe"),
-#endif
-#if defined (SIGALRM)
- ENTRY(SIGALRM, "SIGALRM", "Alarm clock"),
-#endif
-#if defined (SIGTERM)
- ENTRY(SIGTERM, "SIGTERM", "Terminated"),
-#endif
-#if defined (SIGUSR1)
- ENTRY(SIGUSR1, "SIGUSR1", "User defined signal 1"),
-#endif
-#if defined (SIGUSR2)
- ENTRY(SIGUSR2, "SIGUSR2", "User defined signal 2"),
-#endif
-/* Put SIGCLD before SIGCHLD, so that if SIGCLD==SIGCHLD then SIGCHLD
- overrides SIGCLD. SIGCHLD is in POXIX.1 */
-#if defined (SIGCLD)
- ENTRY(SIGCLD, "SIGCLD", "Child status changed"),
-#endif
-#if defined (SIGCHLD)
- ENTRY(SIGCHLD, "SIGCHLD", "Child status changed"),
-#endif
-#if defined (SIGPWR)
- ENTRY(SIGPWR, "SIGPWR", "Power fail/restart"),
-#endif
-#if defined (SIGWINCH)
- ENTRY(SIGWINCH, "SIGWINCH", "Window size changed"),
-#endif
-#if defined (SIGURG)
- ENTRY(SIGURG, "SIGURG", "Urgent I/O condition"),
-#endif
-#if defined (SIGIO)
- /* "I/O pending" has also been suggested, but is misleading since the
- signal only happens when the process has asked for it, not everytime
- I/O is pending. */
- ENTRY(SIGIO, "SIGIO", "I/O possible"),
-#endif
-#if defined (SIGPOLL)
- ENTRY(SIGPOLL, "SIGPOLL", "Pollable event occurred"),
-#endif
-#if defined (SIGSTOP)
- ENTRY(SIGSTOP, "SIGSTOP", "Stopped (signal)"),
-#endif
-#if defined (SIGTSTP)
- ENTRY(SIGTSTP, "SIGTSTP", "Stopped (user)"),
-#endif
-#if defined (SIGCONT)
- ENTRY(SIGCONT, "SIGCONT", "Continued"),
-#endif
-#if defined (SIGTTIN)
- ENTRY(SIGTTIN, "SIGTTIN", "Stopped (tty input)"),
-#endif
-#if defined (SIGTTOU)
- ENTRY(SIGTTOU, "SIGTTOU", "Stopped (tty output)"),
-#endif
-#if defined (SIGVTALRM)
- ENTRY(SIGVTALRM, "SIGVTALRM", "Virtual timer expired"),
-#endif
-#if defined (SIGPROF)
- ENTRY(SIGPROF, "SIGPROF", "Profiling timer expired"),
-#endif
-#if defined (SIGXCPU)
- ENTRY(SIGXCPU, "SIGXCPU", "CPU time limit exceeded"),
-#endif
-#if defined (SIGXFSZ)
- ENTRY(SIGXFSZ, "SIGXFSZ", "File size limit exceeded"),
-#endif
-#if defined (SIGWIND)
- ENTRY(SIGWIND, "SIGWIND", "SIGWIND"),
-#endif
-#if defined (SIGPHONE)
- ENTRY(SIGPHONE, "SIGPHONE", "SIGPHONE"),
-#endif
-#if defined (SIGLOST)
- ENTRY(SIGLOST, "SIGLOST", "Resource lost"),
-#endif
-#if defined (SIGWAITING)
- ENTRY(SIGWAITING, "SIGWAITING", "Process's LWPs are blocked"),
-#endif
-#if defined (SIGLWP)
- ENTRY(SIGLWP, "SIGLWP", "Signal LWP"),
-#endif
-#if defined (SIGDANGER)
- ENTRY(SIGDANGER, "SIGDANGER", "Swap space dangerously low"),
-#endif
-#if defined (SIGGRANT)
- ENTRY(SIGGRANT, "SIGGRANT", "Monitor mode granted"),
-#endif
-#if defined (SIGRETRACT)
- ENTRY(SIGRETRACT, "SIGRETRACT", "Need to relinguish monitor mode"),
-#endif
-#if defined (SIGMSG)
- ENTRY(SIGMSG, "SIGMSG", "Monitor mode data available"),
-#endif
-#if defined (SIGSOUND)
- ENTRY(SIGSOUND, "SIGSOUND", "Sound completed"),
-#endif
-#if defined (SIGSAK)
- ENTRY(SIGSAK, "SIGSAK", "Secure attention"),
-#endif
- ENTRY(0, NULL, NULL)
-};
-
-/* Translation table allocated and initialized at runtime. Indexed by the
- signal value to find the equivalent symbolic value. */
-
-static const char **signal_names;
-static int num_signal_names = 0;
-
-/* Translation table allocated and initialized at runtime, if it does not
- already exist in the host environment. Indexed by the signal value to find
- the descriptive string.
-
- We don't export it for use in other modules because even though it has the
- same name, it differs from other implementations in that it is dynamically
- initialized rather than statically initialized. */
-
-#ifndef HAVE_SYS_SIGLIST
-
-static int sys_nsig;
-static const char **sys_siglist;
-
-#else
-
-#ifdef NSIG
-static int sys_nsig = NSIG;
-#else
-#ifdef _NSIG
-static int sys_nsig = _NSIG;
-#endif
-#endif
-extern const char * const sys_siglist[];
-
-#endif
-
-
-/*
-
-NAME
-
- init_signal_tables -- initialize the name and message tables
-
-SYNOPSIS
-
- static void init_signal_tables ();
-
-DESCRIPTION
-
- Using the signal_table, which is initialized at compile time, generate
- the signal_names and the sys_siglist (if needed) tables, which are
- indexed at runtime by a specific signal value.
-
-BUGS
-
- The initialization of the tables may fail under low memory conditions,
- in which case we don't do anything particularly useful, but we don't
- bomb either. Who knows, it might succeed at a later point if we free
- some memory in the meantime. In any case, the other routines know
- how to deal with lack of a table after trying to initialize it. This
- may or may not be considered to be a bug, that we don't specifically
- warn about this particular failure mode.
-
-*/
-
-static void
-init_signal_tables (void)
-{
- const struct signal_info *eip;
- int nbytes;
-
- /* If we haven't already scanned the signal_table once to find the maximum
- signal value, then go find it now. */
-
- if (num_signal_names == 0)
- {
- for (eip = signal_table; eip -> name != NULL; eip++)
- {
- if (eip -> value >= num_signal_names)
- {
- num_signal_names = eip -> value + 1;
- }
- }
- }
-
- /* Now attempt to allocate the signal_names table, zero it out, and then
- initialize it from the statically initialized signal_table. */
-
- if (signal_names == NULL)
- {
- nbytes = num_signal_names * sizeof (char *);
- if ((signal_names = (const char **) malloc (nbytes)) != NULL)
- {
- memset (signal_names, 0, nbytes);
- for (eip = signal_table; eip -> name != NULL; eip++)
- {
- signal_names[eip -> value] = eip -> name;
- }
- }
- }
-
-#ifndef HAVE_SYS_SIGLIST
-
- /* Now attempt to allocate the sys_siglist table, zero it out, and then
- initialize it from the statically initialized signal_table. */
-
- if (sys_siglist == NULL)
- {
- nbytes = num_signal_names * sizeof (char *);
- if ((sys_siglist = (const char **) malloc (nbytes)) != NULL)
- {
- memset (sys_siglist, 0, nbytes);
- sys_nsig = num_signal_names;
- for (eip = signal_table; eip -> name != NULL; eip++)
- {
- sys_siglist[eip -> value] = eip -> msg;
- }
- }
- }
-
-#endif
-
-}
-
-
-/*
-
-@deftypefn Extension int signo_max (void)
-
-Returns the maximum signal value for which a corresponding symbolic
-name or message is available. Note that in the case where we use the
-@code{sys_siglist} supplied by the system, it is possible for there to
-be more symbolic names than messages, or vice versa. In fact, the
-manual page for @code{psignal(3b)} explicitly warns that one should
-check the size of the table (@code{NSIG}) before indexing it, since
-new signal codes may be added to the system before they are added to
-the table. Thus @code{NSIG} might be smaller than value implied by
-the largest signo value defined in @code{<signal.h>}.
-
-We return the maximum value that can be used to obtain a meaningful
-symbolic name or message.
-
-@end deftypefn
-
-*/
-
-int
-signo_max (void)
-{
- int maxsize;
-
- if (signal_names == NULL)
- {
- init_signal_tables ();
- }
- maxsize = MAX (sys_nsig, num_signal_names);
- return (maxsize - 1);
-}
-
-
-/*
-
-@deftypefn Supplemental {const char *} strsignal (int @var{signo})
-
-Maps an signal number to an signal message string, the contents of
-which are implementation defined. On systems which have the external
-variable @code{sys_siglist}, these strings will be the same as the
-ones used by @code{psignal()}.
-
-If the supplied signal number is within the valid range of indices for
-the @code{sys_siglist}, but no message is available for the particular
-signal number, then returns the string @samp{Signal @var{num}}, where
-@var{num} is the signal number.
-
-If the supplied signal number is not a valid index into
-@code{sys_siglist}, returns @code{NULL}.
-
-The returned string is only guaranteed to be valid only until the next
-call to @code{strsignal}.
-
-@end deftypefn
-
-*/
-
-#ifndef HAVE_STRSIGNAL
-
-char *
-strsignal (int signo)
-{
- char *msg;
- static char buf[32];
-
-#ifndef HAVE_SYS_SIGLIST
-
- if (signal_names == NULL)
- {
- init_signal_tables ();
- }
-
-#endif
-
- if ((signo < 0) || (signo >= sys_nsig))
- {
- /* Out of range, just return NULL */
- msg = NULL;
- }
- else if ((sys_siglist == NULL) || (sys_siglist[signo] == NULL))
- {
- /* In range, but no sys_siglist or no entry at this index. */
- sprintf (buf, "Signal %d", signo);
- msg = buf;
- }
- else
- {
- /* In range, and a valid message. Just return the message. We
- can safely cast away const, since POSIX says the user must
- not modify the result. */
- msg = (char *) sys_siglist[signo];
- }
-
- return (msg);
-}
-
-#endif /* ! HAVE_STRSIGNAL */
-
-/*
-
-@deftypefn Extension {const char*} strsigno (int @var{signo})
-
-Given an signal number, returns a pointer to a string containing the
-symbolic name of that signal number, as found in @code{<signal.h>}.
-
-If the supplied signal number is within the valid range of indices for
-symbolic names, but no name is available for the particular signal
-number, then returns the string @samp{Signal @var{num}}, where
-@var{num} is the signal number.
-
-If the supplied signal number is not within the range of valid
-indices, then returns @code{NULL}.
-
-The contents of the location pointed to are only guaranteed to be
-valid until the next call to @code{strsigno}.
-
-@end deftypefn
-
-*/
-
-const char *
-strsigno (int signo)
-{
- const char *name;
- static char buf[32];
-
- if (signal_names == NULL)
- {
- init_signal_tables ();
- }
-
- if ((signo < 0) || (signo >= num_signal_names))
- {
- /* Out of range, just return NULL */
- name = NULL;
- }
- else if ((signal_names == NULL) || (signal_names[signo] == NULL))
- {
- /* In range, but no signal_names or no entry at this index. */
- sprintf (buf, "Signal %d", signo);
- name = (const char *) buf;
- }
- else
- {
- /* In range, and a valid name. Just return the name. */
- name = signal_names[signo];
- }
-
- return (name);
-}
-
-
-/*
-
-@deftypefn Extension int strtosigno (const char *@var{name})
-
-Given the symbolic name of a signal, map it to a signal number. If no
-translation is found, returns 0.
-
-@end deftypefn
-
-*/
-
-int
-strtosigno (const char *name)
-{
- int signo = 0;
-
- if (name != NULL)
- {
- if (signal_names == NULL)
- {
- init_signal_tables ();
- }
- for (signo = 0; signo < num_signal_names; signo++)
- {
- if ((signal_names[signo] != NULL) &&
- (strcmp (name, signal_names[signo]) == 0))
- {
- break;
- }
- }
- if (signo == num_signal_names)
- {
- signo = 0;
- }
- }
- return (signo);
-}
-
-
-/*
-
-@deftypefn Supplemental void psignal (int @var{signo}, char *@var{message})
-
-Print @var{message} to the standard error, followed by a colon,
-followed by the description of the signal specified by @var{signo},
-followed by a newline.
-
-@end deftypefn
-
-*/
-
-#ifndef HAVE_PSIGNAL
-
-void
-psignal (int signo, char *message)
-{
- if (signal_names == NULL)
- {
- init_signal_tables ();
- }
- if ((signo <= 0) || (signo >= sys_nsig))
- {
- fprintf (stderr, "%s: unknown signal\n", message);
- }
- else
- {
- fprintf (stderr, "%s: %s\n", message, sys_siglist[signo]);
- }
-}
-
-#endif /* ! HAVE_PSIGNAL */
-
-
-/* A simple little main that does nothing but print all the signal translations
- if MAIN is defined and this file is compiled and linked. */
-
-#ifdef MAIN
-
-#include <stdio.h>
-
-int
-main (void)
-{
- int signo;
- int maxsigno;
- const char *name;
- const char *msg;
-
- maxsigno = signo_max ();
- printf ("%d entries in names table.\n", num_signal_names);
- printf ("%d entries in messages table.\n", sys_nsig);
- printf ("%d is max useful index.\n", maxsigno);
-
- /* Keep printing values until we get to the end of *both* tables, not
- *either* table. Note that knowing the maximum useful index does *not*
- relieve us of the responsibility of testing the return pointer for
- NULL. */
-
- for (signo = 0; signo <= maxsigno; signo++)
- {
- name = strsigno (signo);
- name = (name == NULL) ? "<NULL>" : name;
- msg = strsignal (signo);
- msg = (msg == NULL) ? "<NULL>" : msg;
- printf ("%-4d%-18s%s\n", signo, name, msg);
- }
-
- return 0;
-}
-
-#endif
diff --git a/gcc-4.7/libiberty/strstr.c b/gcc-4.7/libiberty/strstr.c
deleted file mode 100644
index 60902ea40..000000000
--- a/gcc-4.7/libiberty/strstr.c
+++ /dev/null
@@ -1,41 +0,0 @@
-/* Simple implementation of strstr for systems without it.
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental char* strstr (const char *@var{string}, const char *@var{sub})
-
-This function searches for the substring @var{sub} in the string
-@var{string}, not including the terminating null characters. A pointer
-to the first occurrence of @var{sub} is returned, or @code{NULL} if the
-substring is absent. If @var{sub} points to a string with zero
-length, the function returns @var{string}.
-
-@end deftypefn
-
-
-*/
-
-
-/* FIXME: The above description is ANSI compiliant. This routine has not
- been validated to comply with it. -fnf */
-
-#include <stddef.h>
-
-extern char *strchr (const char *, int);
-extern int strncmp (const void *, const void *, size_t);
-extern size_t strlen (const char *);
-
-char *
-strstr (const char *s1, const char *s2)
-{
- const char *p = s1;
- const size_t len = strlen (s2);
-
- for (; (p = strchr (p, *s2)) != 0; p++)
- {
- if (strncmp (p, s2, len) == 0)
- return (char *)p;
- }
- return (0);
-}
diff --git a/gcc-4.7/libiberty/strtod.c b/gcc-4.7/libiberty/strtod.c
deleted file mode 100644
index e4da2113f..000000000
--- a/gcc-4.7/libiberty/strtod.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/* Implementation of strtod for systems with atof.
- Copyright (C) 1991, 1995, 2002, 2011 Free Software Foundation, Inc.
-
-This file is part of the libiberty library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
-
-@deftypefn Supplemental double strtod (const char *@var{string}, @
- char **@var{endptr})
-
-This ISO C function converts the initial portion of @var{string} to a
-@code{double}. If @var{endptr} is not @code{NULL}, a pointer to the
-character after the last character used in the conversion is stored in
-the location referenced by @var{endptr}. If no conversion is
-performed, zero is returned and the value of @var{string} is stored in
-the location referenced by @var{endptr}.
-
-@end deftypefn
-
-*/
-
-#include "ansidecl.h"
-#include "safe-ctype.h"
-
-extern double atof (const char *);
-
-/* Disclaimer: this is currently just used by CHILL in GDB and therefore
- has not been tested well. It may have been tested for nothing except
- that it compiles. */
-
-double
-strtod (char *str, char **ptr)
-{
- char *p;
-
- if (ptr == (char **)0)
- return atof (str);
-
- p = str;
-
- while (ISSPACE (*p))
- ++p;
-
- if (*p == '+' || *p == '-')
- ++p;
-
- /* INF or INFINITY. */
- if ((p[0] == 'i' || p[0] == 'I')
- && (p[1] == 'n' || p[1] == 'N')
- && (p[2] == 'f' || p[2] == 'F'))
- {
- if ((p[3] == 'i' || p[3] == 'I')
- && (p[4] == 'n' || p[4] == 'N')
- && (p[5] == 'i' || p[5] == 'I')
- && (p[6] == 't' || p[6] == 'T')
- && (p[7] == 'y' || p[7] == 'Y'))
- {
- *ptr = p + 8;
- return atof (str);
- }
- else
- {
- *ptr = p + 3;
- return atof (str);
- }
- }
-
- /* NAN or NAN(foo). */
- if ((p[0] == 'n' || p[0] == 'N')
- && (p[1] == 'a' || p[1] == 'A')
- && (p[2] == 'n' || p[2] == 'N'))
- {
- p += 3;
- if (*p == '(')
- {
- ++p;
- while (*p != '\0' && *p != ')')
- ++p;
- if (*p == ')')
- ++p;
- }
- *ptr = p;
- return atof (str);
- }
-
- /* digits, with 0 or 1 periods in it. */
- if (ISDIGIT (*p) || *p == '.')
- {
- int got_dot = 0;
- while (ISDIGIT (*p) || (!got_dot && *p == '.'))
- {
- if (*p == '.')
- got_dot = 1;
- ++p;
- }
-
- /* Exponent. */
- if (*p == 'e' || *p == 'E')
- {
- int i;
- i = 1;
- if (p[i] == '+' || p[i] == '-')
- ++i;
- if (ISDIGIT (p[i]))
- {
- while (ISDIGIT (p[i]))
- ++i;
- *ptr = p + i;
- return atof (str);
- }
- }
- *ptr = p;
- return atof (str);
- }
- /* Didn't find any digits. Doesn't look like a number. */
- *ptr = str;
- return 0.0;
-}
diff --git a/gcc-4.7/libiberty/strtol.c b/gcc-4.7/libiberty/strtol.c
deleted file mode 100644
index bde5647c9..000000000
--- a/gcc-4.7/libiberty/strtol.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/*-
- * Copyright (c) 1990 The Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. [rescinded 22 July 1999]
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/*
-
-@deftypefn Supplemental {long int} strtol (const char *@var{string}, @
- char **@var{endptr}, int @var{base})
-@deftypefnx Supplemental {unsigned long int} strtoul (const char *@var{string}, @
- char **@var{endptr}, int @var{base})
-
-The @code{strtol} function converts the string in @var{string} to a
-long integer value according to the given @var{base}, which must be
-between 2 and 36 inclusive, or be the special value 0. If @var{base}
-is 0, @code{strtol} will look for the prefixes @code{0} and @code{0x}
-to indicate bases 8 and 16, respectively, else default to base 10.
-When the base is 16 (either explicitly or implicitly), a prefix of
-@code{0x} is allowed. The handling of @var{endptr} is as that of
-@code{strtod} above. The @code{strtoul} function is the same, except
-that the converted value is unsigned.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#include <errno.h>
-#ifdef NEED_DECLARATION_ERRNO
-extern int errno;
-#endif
-#include "safe-ctype.h"
-
-/* FIXME: It'd be nice to configure around these, but the include files are too
- painful. These macros should at least be more portable than hardwired hex
- constants. */
-
-#ifndef ULONG_MAX
-#define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF */
-#endif
-
-#ifndef LONG_MAX
-#define LONG_MAX ((long)(ULONG_MAX >> 1)) /* 0x7FFFFFFF */
-#endif
-
-#ifndef LONG_MIN
-#define LONG_MIN ((long)(~LONG_MAX)) /* 0x80000000 */
-#endif
-
-/*
- * Convert a string to a long integer.
- *
- * Ignores `locale' stuff. Assumes that the upper and lower case
- * alphabets and digits are each contiguous.
- */
-long
-strtol(const char *nptr, char **endptr, register int base)
-{
- register const char *s = nptr;
- register unsigned long acc;
- register int c;
- register unsigned long cutoff;
- register int neg = 0, any, cutlim;
-
- /*
- * Skip white space and pick up leading +/- sign if any.
- * If base is 0, allow 0x for hex and 0 for octal, else
- * assume decimal; if base is already 16, allow 0x.
- */
- do {
- c = *s++;
- } while (ISSPACE(c));
- if (c == '-') {
- neg = 1;
- c = *s++;
- } else if (c == '+')
- c = *s++;
- if ((base == 0 || base == 16) &&
- c == '0' && (*s == 'x' || *s == 'X')) {
- c = s[1];
- s += 2;
- base = 16;
- }
- if (base == 0)
- base = c == '0' ? 8 : 10;
-
- /*
- * Compute the cutoff value between legal numbers and illegal
- * numbers. That is the largest legal value, divided by the
- * base. An input number that is greater than this value, if
- * followed by a legal input character, is too big. One that
- * is equal to this value may be valid or not; the limit
- * between valid and invalid numbers is then based on the last
- * digit. For instance, if the range for longs is
- * [-2147483648..2147483647] and the input base is 10,
- * cutoff will be set to 214748364 and cutlim to either
- * 7 (neg==0) or 8 (neg==1), meaning that if we have accumulated
- * a value > 214748364, or equal but the next digit is > 7 (or 8),
- * the number is too big, and we will return a range error.
- *
- * Set any if any `digits' consumed; make it negative to indicate
- * overflow.
- */
- cutoff = neg ? -(unsigned long)LONG_MIN : LONG_MAX;
- cutlim = cutoff % (unsigned long)base;
- cutoff /= (unsigned long)base;
- for (acc = 0, any = 0;; c = *s++) {
- if (ISDIGIT(c))
- c -= '0';
- else if (ISALPHA(c))
- c -= ISUPPER(c) ? 'A' - 10 : 'a' - 10;
- else
- break;
- if (c >= base)
- break;
- if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
- any = -1;
- else {
- any = 1;
- acc *= base;
- acc += c;
- }
- }
- if (any < 0) {
- acc = neg ? LONG_MIN : LONG_MAX;
- errno = ERANGE;
- } else if (neg)
- acc = -acc;
- if (endptr != 0)
- *endptr = (char *) (any ? s - 1 : nptr);
- return (acc);
-}
diff --git a/gcc-4.7/libiberty/strtoul.c b/gcc-4.7/libiberty/strtoul.c
deleted file mode 100644
index ba8006353..000000000
--- a/gcc-4.7/libiberty/strtoul.c
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- * Copyright (c) 1990 Regents of the University of California.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. [rescinded 22 July 1999]
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#ifdef HAVE_LIMITS_H
-#include <limits.h>
-#endif
-#ifdef HAVE_SYS_PARAM_H
-#include <sys/param.h>
-#endif
-#include <errno.h>
-#ifdef NEED_DECLARATION_ERRNO
-extern int errno;
-#endif
-#if 0
-#include <stdlib.h>
-#endif
-#include "ansidecl.h"
-#include "safe-ctype.h"
-
-#ifndef ULONG_MAX
-#define ULONG_MAX ((unsigned long)(~0L)) /* 0xFFFFFFFF */
-#endif
-
-/*
- * Convert a string to an unsigned long integer.
- *
- * Ignores `locale' stuff. Assumes that the upper and lower case
- * alphabets and digits are each contiguous.
- */
-unsigned long
-strtoul(const char *nptr, char **endptr, register int base)
-{
- register const char *s = nptr;
- register unsigned long acc;
- register int c;
- register unsigned long cutoff;
- register int neg = 0, any, cutlim;
-
- /*
- * See strtol for comments as to the logic used.
- */
- do {
- c = *s++;
- } while (ISSPACE(c));
- if (c == '-') {
- neg = 1;
- c = *s++;
- } else if (c == '+')
- c = *s++;
- if ((base == 0 || base == 16) &&
- c == '0' && (*s == 'x' || *s == 'X')) {
- c = s[1];
- s += 2;
- base = 16;
- }
- if (base == 0)
- base = c == '0' ? 8 : 10;
- cutoff = (unsigned long)ULONG_MAX / (unsigned long)base;
- cutlim = (unsigned long)ULONG_MAX % (unsigned long)base;
- for (acc = 0, any = 0;; c = *s++) {
- if (ISDIGIT(c))
- c -= '0';
- else if (ISALPHA(c))
- c -= ISUPPER(c) ? 'A' - 10 : 'a' - 10;
- else
- break;
- if (c >= base)
- break;
- if (any < 0 || acc > cutoff || (acc == cutoff && c > cutlim))
- any = -1;
- else {
- any = 1;
- acc *= base;
- acc += c;
- }
- }
- if (any < 0) {
- acc = ULONG_MAX;
- errno = ERANGE;
- } else if (neg)
- acc = -acc;
- if (endptr != 0)
- *endptr = (char *) (any ? s - 1 : nptr);
- return (acc);
-}
diff --git a/gcc-4.7/libiberty/strverscmp.c b/gcc-4.7/libiberty/strverscmp.c
deleted file mode 100644
index 04e1e4ae9..000000000
--- a/gcc-4.7/libiberty/strverscmp.c
+++ /dev/null
@@ -1,157 +0,0 @@
-/* Compare strings while treating digits characters numerically.
- Copyright (C) 1997, 2002, 2005 Free Software Foundation, Inc.
- This file is part of the libiberty library.
- Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997.
-
- Libiberty is free software; you can redistribute it and/or
- modify it under the terms of the GNU Lesser General Public
- License as published by the Free Software Foundation; either
- version 2.1 of the License, or (at your option) any later version.
-
- Libiberty is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Lesser General Public License for more details.
-
- You should have received a copy of the GNU Lesser General Public
- License along with the GNU C Library; if not, write to the Free
- Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301 USA. */
-
-#include "libiberty.h"
-#include "safe-ctype.h"
-
-/*
-@deftypefun int strverscmp (const char *@var{s1}, const char *@var{s2})
-The @code{strverscmp} function compares the string @var{s1} against
-@var{s2}, considering them as holding indices/version numbers. Return
-value follows the same conventions as found in the @code{strverscmp}
-function. In fact, if @var{s1} and @var{s2} contain no digits,
-@code{strverscmp} behaves like @code{strcmp}.
-
-Basically, we compare strings normally (character by character), until
-we find a digit in each string - then we enter a special comparison
-mode, where each sequence of digits is taken as a whole. If we reach the
-end of these two parts without noticing a difference, we return to the
-standard comparison mode. There are two types of numeric parts:
-"integral" and "fractional" (those begin with a '0'). The types
-of the numeric parts affect the way we sort them:
-
-@itemize @bullet
-@item
-integral/integral: we compare values as you would expect.
-
-@item
-fractional/integral: the fractional part is less than the integral one.
-Again, no surprise.
-
-@item
-fractional/fractional: the things become a bit more complex.
-If the common prefix contains only leading zeroes, the longest part is less
-than the other one; else the comparison behaves normally.
-@end itemize
-
-@smallexample
-strverscmp ("no digit", "no digit")
- @result{} 0 // @r{same behavior as strcmp.}
-strverscmp ("item#99", "item#100")
- @result{} <0 // @r{same prefix, but 99 < 100.}
-strverscmp ("alpha1", "alpha001")
- @result{} >0 // @r{fractional part inferior to integral one.}
-strverscmp ("part1_f012", "part1_f01")
- @result{} >0 // @r{two fractional parts.}
-strverscmp ("foo.009", "foo.0")
- @result{} <0 // @r{idem, but with leading zeroes only.}
-@end smallexample
-
-This function is especially useful when dealing with filename sorting,
-because filenames frequently hold indices/version numbers.
-@end deftypefun
-
-*/
-
-/* states: S_N: normal, S_I: comparing integral part, S_F: comparing
- fractional parts, S_Z: idem but with leading Zeroes only */
-#define S_N 0x0
-#define S_I 0x4
-#define S_F 0x8
-#define S_Z 0xC
-
-/* result_type: CMP: return diff; LEN: compare using len_diff/diff */
-#define CMP 2
-#define LEN 3
-
-
-/* Compare S1 and S2 as strings holding indices/version numbers,
- returning less than, equal to or greater than zero if S1 is less than,
- equal to or greater than S2 (for more info, see the Glibc texinfo doc). */
-
-int
-strverscmp (const char *s1, const char *s2)
-{
- const unsigned char *p1 = (const unsigned char *) s1;
- const unsigned char *p2 = (const unsigned char *) s2;
- unsigned char c1, c2;
- int state;
- int diff;
-
- /* Symbol(s) 0 [1-9] others (padding)
- Transition (10) 0 (01) d (00) x (11) - */
- static const unsigned int next_state[] =
- {
- /* state x d 0 - */
- /* S_N */ S_N, S_I, S_Z, S_N,
- /* S_I */ S_N, S_I, S_I, S_I,
- /* S_F */ S_N, S_F, S_F, S_F,
- /* S_Z */ S_N, S_F, S_Z, S_Z
- };
-
- static const int result_type[] =
- {
- /* state x/x x/d x/0 x/- d/x d/d d/0 d/-
- 0/x 0/d 0/0 0/- -/x -/d -/0 -/- */
-
- /* S_N */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
- CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
- /* S_I */ CMP, -1, -1, CMP, +1, LEN, LEN, CMP,
- +1, LEN, LEN, CMP, CMP, CMP, CMP, CMP,
- /* S_F */ CMP, CMP, CMP, CMP, CMP, LEN, CMP, CMP,
- CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP,
- /* S_Z */ CMP, +1, +1, CMP, -1, CMP, CMP, CMP,
- -1, CMP, CMP, CMP
- };
-
- if (p1 == p2)
- return 0;
-
- c1 = *p1++;
- c2 = *p2++;
- /* Hint: '0' is a digit too. */
- state = S_N | ((c1 == '0') + (ISDIGIT (c1) != 0));
-
- while ((diff = c1 - c2) == 0 && c1 != '\0')
- {
- state = next_state[state];
- c1 = *p1++;
- c2 = *p2++;
- state |= (c1 == '0') + (ISDIGIT (c1) != 0);
- }
-
- state = result_type[state << 2 | (((c2 == '0') + (ISDIGIT (c2) != 0)))];
-
- switch (state)
- {
- case CMP:
- return diff;
-
- case LEN:
- while (ISDIGIT (*p1++))
- if (!ISDIGIT (*p2++))
- return 1;
-
- return ISDIGIT (*p2) ? -1 : diff;
-
- default:
- return state;
- }
-}
diff --git a/gcc-4.7/libiberty/testsuite/Makefile.in b/gcc-4.7/libiberty/testsuite/Makefile.in
deleted file mode 100644
index 69ac1f510..000000000
--- a/gcc-4.7/libiberty/testsuite/Makefile.in
+++ /dev/null
@@ -1,92 +0,0 @@
-#
-# Makefile
-# Copyright (C) 1999, 2002, 2006
-# Free Software Foundation
-#
-# This file is part of the libiberty library.
-# Libiberty is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Library General Public
-# License as published by the Free Software Foundation; either
-# version 2 of the License, or (at your option) any later version.
-#
-# Libiberty is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Library General Public License for more details.
-#
-# You should have received a copy of the GNU Library General Public
-# License along with libiberty; see the file COPYING.LIB. If not,
-# write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
-# Boston, MA 02110-1301, USA.
-#
-
-# This file was written by Tom Tromey <tromey@cygnus.com>.
-
-#
-# Makefile for libiberty/testsuite directory
-#
-
-srcdir = @srcdir@
-VPATH = @srcdir@
-
-SHELL = @SHELL@
-
-CC = @CC@
-CFLAGS = @CFLAGS@
-LIBCFLAGS = $(CFLAGS)
-
-# Multilib support variables.
-MULTISRCTOP =
-
-INCDIR=$(srcdir)/../$(MULTISRCTOP)../include
-
-all:
-
-# CHECK is set to "really_check" or the empty string by configure.
-check: @CHECK@
-
-really-check: check-cplus-dem check-pexecute check-expandargv
-
-# Run some tests of the demangler.
-check-cplus-dem: test-demangle $(srcdir)/demangle-expected
- ./test-demangle < $(srcdir)/demangle-expected
-
-# Check the pexecute code.
-check-pexecute: test-pexecute
- ./test-pexecute
-
-# Check the expandargv functionality
-check-expandargv: test-expandargv
- ./test-expandargv
-
-TEST_COMPILE = $(CC) @DEFS@ $(LIBCFLAGS) -I.. -I$(INCDIR) $(HDEFINES)
-test-demangle: $(srcdir)/test-demangle.c ../libiberty.a
- $(TEST_COMPILE) -o test-demangle \
- $(srcdir)/test-demangle.c ../libiberty.a
-
-test-pexecute: $(srcdir)/test-pexecute.c ../libiberty.a
- $(TEST_COMPILE) -DHAVE_CONFIG_H -I.. -o test-pexecute \
- $(srcdir)/test-pexecute.c ../libiberty.a
-
-test-expandargv: $(srcdir)/test-expandargv.c ../libiberty.a
- $(TEST_COMPILE) -DHAVE_CONFIG_H -I.. -o test-expandargv \
- $(srcdir)/test-expandargv.c ../libiberty.a
-
-# Standard (either GNU or Cygnus) rules we don't use.
-html install-html info install-info clean-info dvi pdf install-pdf \
-install etags tags installcheck:
-
-# The standard clean rules.
-mostlyclean:
- rm -f test-demangle
- rm -f test-pexecute
- rm -f test-expandargv
- rm -f core
-clean: mostlyclean
-distclean: clean
- rm -f Makefile
-maintainer-clean realclean: distclean
-
-Makefile: $(srcdir)/Makefile.in ../config.status
- CONFIG_FILES=testsuite/Makefile CONFIG_HEADERS= \
- cd .. && $(SHELL) ./config.status
diff --git a/gcc-4.7/libiberty/testsuite/demangle-expected b/gcc-4.7/libiberty/testsuite/demangle-expected
deleted file mode 100644
index d489692f0..000000000
--- a/gcc-4.7/libiberty/testsuite/demangle-expected
+++ /dev/null
@@ -1,4268 +0,0 @@
-# This file holds test cases for the demangler.
-# Each test case looks like this:
-# options
-# input to be demangled
-# expected output
-#
-# Supported options:
-# --format=<name> Sets the demangling style.
-# --no-params There are two lines of expected output; the first
-# is with DMGL_PARAMS, the second is without it.
-# --is-v3-ctor Calls is_gnu_v3_mangled_ctor on input; expected
-# output is an integer representing ctor_kind.
-# --is-v3-dtor Likewise, but for dtors.
-# --ret-postfix Passes the DMGL_RET_POSTFIX option
-#
-# For compatibility, just in case it matters, the options line may be
-# empty, to mean --format=auto. If it doesn't start with --, then it
-# may contain only a format name.
-#
-# A line starting with `#' is ignored.
-# However, blank lines in this file are NOT ignored.
-#
---format=gnu --no-params
-AddAlignment__9ivTSolverUiP12ivInteractorP7ivTGlue
-ivTSolver::AddAlignment(unsigned int, ivInteractor *, ivTGlue *)
-ivTSolver::AddAlignment
-#
---format=gnu --no-params
-ArrowheadIntersects__9ArrowLineP9ArrowheadR6BoxObjP7Graphic
-ArrowLine::ArrowheadIntersects(Arrowhead *, BoxObj &, Graphic *)
-ArrowLine::ArrowheadIntersects
-#
---format=gnu --no-params
-AtEnd__13ivRubberGroup
-ivRubberGroup::AtEnd(void)
-ivRubberGroup::AtEnd
-#
---format=gnu --no-params
-BgFilter__9ivTSolverP12ivInteractor
-ivTSolver::BgFilter(ivInteractor *)
-ivTSolver::BgFilter
-#
---format=gnu --no-params
-Check__6UArrayi
-UArray::Check(int)
-UArray::Check
-#
---format=gnu --no-params
-CoreConstDecls__8TextCodeR7ostream
-TextCode::CoreConstDecls(ostream &)
-TextCode::CoreConstDecls
-#
---format=gnu --no-params
-Detach__8StateVarP12StateVarView
-StateVar::Detach(StateVarView *)
-StateVar::Detach
-#
---format=gnu --no-params
-Done__9ComponentG8Iterator
-Component::Done(Iterator)
-Component::Done
-#
---format=gnu --no-params
-Effect__11RelateManipR7ivEvent
-RelateManip::Effect(ivEvent &)
-RelateManip::Effect
-#
---format=gnu --no-params
-FindFixed__FRP4CNetP4CNet
-FindFixed(CNet *&, CNet *)
-FindFixed
-#
---format=gnu --no-params
-Fix48_abort__FR8twolongs
-Fix48_abort(twolongs &)
-Fix48_abort
-#
---format=gnu --no-params
-GetBarInfo__15iv2_6_VScrollerP13ivPerspectiveRiT2
-iv2_6_VScroller::GetBarInfo(ivPerspective *, int &, int &)
-iv2_6_VScroller::GetBarInfo
-#
---format=gnu --no-params
-GetBgColor__C9ivPainter
-ivPainter::GetBgColor(void) const
-ivPainter::GetBgColor
-#
---format=gnu --no-params
-InsertBody__15H_PullrightMenuii
-H_PullrightMenu::InsertBody(int, int)
-H_PullrightMenu::InsertBody
-#
---format=gnu --no-params
-InsertCharacter__9TextManipc
-TextManip::InsertCharacter(char)
-TextManip::InsertCharacter
-#
---format=gnu --no-params
-InsertToplevel__7ivWorldP12ivInteractorT1
-ivWorld::InsertToplevel(ivInteractor *, ivInteractor *)
-ivWorld::InsertToplevel
-#
---format=gnu --no-params
-InsertToplevel__7ivWorldP12ivInteractorT1iiUi
-ivWorld::InsertToplevel(ivInteractor *, ivInteractor *, int, int, unsigned int)
-ivWorld::InsertToplevel
-#
---format=gnu --no-params
-IsAGroup__FP11GraphicViewP11GraphicComp
-IsAGroup(GraphicView *, GraphicComp *)
-IsAGroup
-#
---format=gnu --no-params
-IsA__10ButtonCodeUl
-ButtonCode::IsA(unsigned long)
-ButtonCode::IsA
-#
---format=gnu --no-params
-ReadName__FR7istreamPc
-ReadName(istream &, char *)
-ReadName
-#
---format=gnu --no-params
-Redraw__13StringBrowseriiii
-StringBrowser::Redraw(int, int, int, int)
-StringBrowser::Redraw
-#
---format=gnu --no-params
-Rotate__13ivTransformerf
-ivTransformer::Rotate(float)
-ivTransformer::Rotate
-#
---format=gnu --no-params
-Rotated__C13ivTransformerf
-ivTransformer::Rotated(float) const
-ivTransformer::Rotated
-#
---format=gnu --no-params
-Round__Ff
-Round(float)
-Round
-#
---format=gnu --no-params
-SetExport__16MemberSharedNameUi
-MemberSharedName::SetExport(unsigned int)
-MemberSharedName::SetExport
-#
---format=gnu --no-params
-Set__14ivControlState13ControlStatusUi
-ivControlState::Set(ControlStatus, unsigned int)
-ivControlState::Set
-#
---format=gnu --no-params
-Set__5DFacePcii
-DFace::Set(char *, int, int)
-DFace::Set
-#
---format=gnu --no-params
-VConvert__9ivTSolverP12ivInteractorRP8TElementT2
-ivTSolver::VConvert(ivInteractor *, TElement *&, TElement *&)
-ivTSolver::VConvert
-#
---format=gnu --no-params
-VConvert__9ivTSolverP7ivTGlueRP8TElement
-ivTSolver::VConvert(ivTGlue *, TElement *&)
-ivTSolver::VConvert
-#
---format=gnu --no-params
-VOrder__9ivTSolverUiRP12ivInteractorT2
-ivTSolver::VOrder(unsigned int, ivInteractor *&, ivInteractor *&)
-ivTSolver::VOrder
-#
---format=gnu --no-params
-_10PageButton$__both
-PageButton::__both
-PageButton::__both
-#
---format=gnu --no-params
-_3RNG$singleMantissa
-RNG::singleMantissa
-RNG::singleMantissa
-#
---format=gnu --no-params
-_5IComp$_release
-IComp::_release
-IComp::_release
-#
---format=gnu --no-params
-_$_10BitmapComp
-BitmapComp::~BitmapComp(void)
-BitmapComp::~BitmapComp
-#
---format=gnu --no-params
-_$_9__io_defs
-__io_defs::~__io_defs(void)
-__io_defs::~__io_defs
-#
---format=gnu --no-params
-_$_Q23foo3bar
-foo::bar::~bar(void)
-foo::bar::~bar
-#
---format=gnu --no-params
-_$_Q33foo3bar4bell
-foo::bar::bell::~bell(void)
-foo::bar::bell::~bell
-#
---format=gnu --no-params
-__10ivTelltaleiP7ivGlyph
-ivTelltale::ivTelltale(int, ivGlyph *)
-ivTelltale::ivTelltale
-#
---format=gnu --no-params
-__10ivViewportiP12ivInteractorUi
-ivViewport::ivViewport(int, ivInteractor *, unsigned int)
-ivViewport::ivViewport
-#
---format=gnu --no-params
-__10ostrstream
-ostrstream::ostrstream(void)
-ostrstream::ostrstream
-#
---format=gnu --no-params
-__10ostrstreamPcii
-ostrstream::ostrstream(char *, int, int)
-ostrstream::ostrstream
-#
---format=gnu --no-params
-__11BitmapTablei
-BitmapTable::BitmapTable(int)
-BitmapTable::BitmapTable
-#
---format=gnu --no-params
-__12ViewportCodeP12ViewportComp
-ViewportCode::ViewportCode(ViewportComp *)
-ViewportCode::ViewportCode
-#
---format=gnu --no-params
-__12iv2_6_Borderii
-iv2_6_Border::iv2_6_Border(int, int)
-iv2_6_Border::iv2_6_Border
-#
---format=gnu --no-params
-__12ivBreak_Listl
-ivBreak_List::ivBreak_List(long)
-ivBreak_List::ivBreak_List
-#
---format=gnu --no-params
-__14iv2_6_MenuItemiP12ivInteractor
-iv2_6_MenuItem::iv2_6_MenuItem(int, ivInteractor *)
-iv2_6_MenuItem::iv2_6_MenuItem
-#
---format=gnu --no-params
-__20DisplayList_IteratorR11DisplayList
-DisplayList_Iterator::DisplayList_Iterator(DisplayList &)
-DisplayList_Iterator::DisplayList_Iterator
-#
---format=gnu --no-params
-__3fooRT0
-foo::foo(foo &)
-foo::foo
-#
---format=gnu --no-params
-__3fooiN31
-foo::foo(int, int, int, int)
-foo::foo
-#
---format=gnu --no-params
-__3fooiRT0iT2iT2
-foo::foo(int, foo &, int, foo &, int, foo &)
-foo::foo
-#
---format=gnu --no-params
-__6KeyMapPT0
-KeyMap::KeyMap(KeyMap *)
-KeyMap::KeyMap
-#
---format=gnu --no-params
-__8ArrowCmdP6EditorUiUi
-ArrowCmd::ArrowCmd(Editor *, unsigned int, unsigned int)
-ArrowCmd::ArrowCmd
-#
---format=gnu --no-params
-__9F_EllipseiiiiP7Graphic
-F_Ellipse::F_Ellipse(int, int, int, int, Graphic *)
-F_Ellipse::F_Ellipse
-#
---format=gnu --no-params
-__9FrameDataP9FrameCompi
-FrameData::FrameData(FrameComp *, int)
-FrameData::FrameData
-#
---format=gnu --no-params
-__9HVGraphicP9CanvasVarP7Graphic
-HVGraphic::HVGraphic(CanvasVar *, Graphic *)
-HVGraphic::HVGraphic
-#
---format=gnu --no-params
-__Q23foo3bar
-foo::bar::bar(void)
-foo::bar::bar
-#
---format=gnu --no-params
-__Q33foo3bar4bell
-foo::bar::bell::bell(void)
-foo::bar::bell::bell
-#
---format=gnu --no-params
-__aa__3fooRT0
-foo::operator&&(foo &)
-foo::operator&&
-#
---format=gnu --no-params
-__aad__3fooRT0
-foo::operator&=(foo &)
-foo::operator&=
-#
---format=gnu --no-params
-__ad__3fooRT0
-foo::operator&(foo &)
-foo::operator&
-#
---format=gnu --no-params
-__adv__3fooRT0
-foo::operator/=(foo &)
-foo::operator/=
-#
---format=gnu --no-params
-__aer__3fooRT0
-foo::operator^=(foo &)
-foo::operator^=
-#
---format=gnu --no-params
-__als__3fooRT0
-foo::operator<<=(foo &)
-foo::operator<<=
-#
---format=gnu --no-params
-__amd__3fooRT0
-foo::operator%=(foo &)
-foo::operator%=
-#
---format=gnu --no-params
-__ami__3fooRT0
-foo::operator-=(foo &)
-foo::operator-=
-#
---format=gnu --no-params
-__aml__3FixRT0
-Fix::operator*=(Fix &)
-Fix::operator*=
-#
---format=gnu --no-params
-__aml__5Fix16i
-Fix16::operator*=(int)
-Fix16::operator*=
-#
---format=gnu --no-params
-__aml__5Fix32RT0
-Fix32::operator*=(Fix32 &)
-Fix32::operator*=
-#
---format=gnu --no-params
-__aor__3fooRT0
-foo::operator|=(foo &)
-foo::operator|=
-#
---format=gnu --no-params
-__apl__3fooRT0
-foo::operator+=(foo &)
-foo::operator+=
-#
---format=gnu --no-params
-__ars__3fooRT0
-foo::operator>>=(foo &)
-foo::operator>>=
-#
---format=gnu --no-params
-__as__3fooRT0
-foo::operator=(foo &)
-foo::operator=
-#
---format=gnu --no-params
-__cl__3fooRT0
-foo::operator()(foo &)
-foo::operator()
-#
---format=gnu --no-params
-__cl__6Normal
-Normal::operator()(void)
-Normal::operator()
-#
---format=gnu --no-params
-__cl__6Stringii
-String::operator()(int, int)
-String::operator()
-#
---format=gnu --no-params
-__cm__3fooRT0
-foo::operator, (foo &)
-foo::operator,
-#
---format=gnu --no-params
-__co__3foo
-foo::operator~(void)
-foo::operator~
-#
---format=gnu --no-params
-__dl__3fooPv
-foo::operator delete(void *)
-foo::operator delete
-#
---format=gnu --no-params
-__dv__3fooRT0
-foo::operator/(foo &)
-foo::operator/
-#
---format=gnu --no-params
-__eq__3fooRT0
-foo::operator==(foo &)
-foo::operator==
-#
---format=gnu --no-params
-__er__3fooRT0
-foo::operator^(foo &)
-foo::operator^
-#
---format=gnu --no-params
-__ge__3fooRT0
-foo::operator>=(foo &)
-foo::operator>=
-#
---format=gnu --no-params
-__gt__3fooRT0
-foo::operator>(foo &)
-foo::operator>
-#
---format=gnu --no-params
-__le__3fooRT0
-foo::operator<=(foo &)
-foo::operator<=
-#
---format=gnu --no-params
-__ls__3fooRT0
-foo::operator<<(foo &)
-foo::operator<<
-#
---format=gnu --no-params
-__ls__FR7ostreamPFR3ios_R3ios
-operator<<(ostream &, ios &(*)(ios &))
-operator<<
-#
---format=gnu --no-params
-__ls__FR7ostreamR3Fix
-operator<<(ostream &, Fix &)
-operator<<
-#
---format=gnu --no-params
-__lt__3fooRT0
-foo::operator<(foo &)
-foo::operator<
-#
---format=gnu --no-params
-__md__3fooRT0
-foo::operator%(foo &)
-foo::operator%
-#
---format=gnu --no-params
-__mi__3fooRT0
-foo::operator-(foo &)
-foo::operator-
-#
---format=gnu --no-params
-__ml__3fooRT0
-foo::operator*(foo &)
-foo::operator*
-#
---format=gnu --no-params
-__mm__3fooi
-foo::operator--(int)
-foo::operator--
-#
---format=gnu --no-params
-__ne__3fooRT0
-foo::operator!=(foo &)
-foo::operator!=
-#
---format=gnu --no-params
-__nt__3foo
-foo::operator!(void)
-foo::operator!
-#
---format=gnu --no-params
-__nw__3fooi
-foo::operator new(int)
-foo::operator new
-#
---format=gnu --no-params
-__oo__3fooRT0
-foo::operator||(foo &)
-foo::operator||
-#
---format=gnu --no-params
-__opPc__3foo
-foo::operator char *(void)
-foo::operator char *
-#
---format=gnu --no-params
-__opi__3foo
-foo::operator int(void)
-foo::operator int
-#
---format=gnu --no-params
-__or__3fooRT0
-foo::operator|(foo &)
-foo::operator|
-#
---format=gnu --no-params
-__pl__3fooRT0
-foo::operator+(foo &)
-foo::operator+
-#
---format=gnu --no-params
-__pp__3fooi
-foo::operator++(int)
-foo::operator++
-#
---format=gnu --no-params
-__rf__3foo
-foo::operator->(void)
-foo::operator->
-#
---format=gnu --no-params
-__rm__3fooRT0
-foo::operator->*(foo &)
-foo::operator->*
-#
---format=gnu --no-params
-__rs__3fooRT0
-foo::operator>>(foo &)
-foo::operator>>
-#
---format=gnu --no-params
-_new_Fix__FUs
-_new_Fix(unsigned short)
-_new_Fix
-#
---format=gnu --no-params
-_vt.foo
-foo virtual table
-foo virtual table
-#
---format=gnu --no-params
-_vt.foo.bar
-foo::bar virtual table
-foo::bar virtual table
-#
---format=gnu --no-params
-_vt$foo
-foo virtual table
-foo virtual table
-#
---format=gnu --no-params
-_vt$foo$bar
-foo::bar virtual table
-foo::bar virtual table
-#
---format=gnu --no-params
-append__7ivGlyphPT0
-ivGlyph::append(ivGlyph *)
-ivGlyph::append
-#
---format=gnu --no-params
-clearok__FP7_win_sti
-clearok(_win_st *, int)
-clearok
-#
---format=gnu --no-params
-complexfunc2__FPFPc_i
-complexfunc2(int (*)(char *))
-complexfunc2
-#
---format=gnu --no-params
-complexfunc3__FPFPFPl_s_i
-complexfunc3(int (*)(short (*)(long *)))
-complexfunc3
-#
---format=gnu --no-params
-complexfunc4__FPFPFPc_s_i
-complexfunc4(int (*)(short (*)(char *)))
-complexfunc4
-#
---format=gnu --no-params
-complexfunc5__FPFPc_PFl_i
-complexfunc5(int (*(*)(char *))(long))
-complexfunc5
-#
---format=gnu --no-params
-complexfunc6__FPFPi_PFl_i
-complexfunc6(int (*(*)(int *))(long))
-complexfunc6
-#
---format=gnu --no-params
-complexfunc7__FPFPFPc_i_PFl_i
-complexfunc7(int (*(*)(int (*)(char *)))(long))
-complexfunc7
-#
---format=gnu --no-params
-foo__FiN30
-foo(int, int, int, int)
-foo
-#
---format=gnu --no-params
-foo__FiR3fooiT1iT1
-foo(int, foo &, int, foo &, int, foo &)
-foo
-#
---format=gnu --no-params
-foo___3barl
-bar::foo_(long)
-bar::foo_
-#
---format=gnu --no-params
-insert__15ivClippingStacklRP8_XRegion
-ivClippingStack::insert(long, _XRegion *&)
-ivClippingStack::insert
-#
---format=gnu --no-params
-insert__16ChooserInfo_ListlR11ChooserInfo
-ChooserInfo_List::insert(long, ChooserInfo &)
-ChooserInfo_List::insert
-#
---format=gnu --no-params
-insert__17FontFamilyRepListlRP15ivFontFamilyRep
-FontFamilyRepList::insert(long, ivFontFamilyRep *&)
-FontFamilyRepList::insert
-#
---format=gnu --no-params
-leaveok__FP7_win_stc
-leaveok(_win_st *, char)
-leaveok
-#
---format=gnu --no-params
-left_mover__C7ivMFKitP12ivAdjustableP7ivStyle
-ivMFKit::left_mover(ivAdjustable *, ivStyle *) const
-ivMFKit::left_mover
-#
---format=gnu --no-params
-overload1arg__FSc
-overload1arg(signed char)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__FUc
-overload1arg(unsigned char)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__FUi
-overload1arg(unsigned int)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__FUl
-overload1arg(unsigned long)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__FUs
-overload1arg(unsigned short)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fc
-overload1arg(char)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fd
-overload1arg(double)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Ff
-overload1arg(float)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fi
-overload1arg(int)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fl
-overload1arg(long)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fs
-overload1arg(short)
-overload1arg
-#
---format=gnu --no-params
-overload1arg__Fv
-overload1arg(void)
-overload1arg
-#
---format=gnu --no-params
-overloadargs__Fi
-overloadargs(int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fii
-overloadargs(int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiii
-overloadargs(int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiii
-overloadargs(int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiii
-overloadargs(int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiii
-overloadargs(int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiiii
-overloadargs(int, int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiiiii
-overloadargs(int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiiiiii
-overloadargs(int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiiiiiii
-overloadargs(int, int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-overloadargs__Fiiiiiiiiiii
-overloadargs(int, int, int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=gnu --no-params
-poke__8ivRasterUlUlffff
-ivRaster::poke(unsigned long, unsigned long, float, float, float, float)
-ivRaster::poke
-#
---format=gnu --no-params
-polar__Fdd
-polar(double, double)
-polar
-#
---format=gnu --no-params
-scale__13ivTransformerff
-ivTransformer::scale(float, float)
-ivTransformer::scale
-#
---format=gnu --no-params
-sgetn__7filebufPci
-filebuf::sgetn(char *, int)
-filebuf::sgetn
-#
---format=gnu --no-params
-shift__FP5_FrepiT0
-shift(_Frep *, int, _Frep *)
-shift
-#
---format=gnu --no-params
-test__C6BitSeti
-BitSet::test(int) const
-BitSet::test
-#
---format=gnu --no-params
-test__C6BitSetii
-BitSet::test(int, int) const
-BitSet::test
-#
---format=gnu --no-params
-text_source__8Documentl
-Document::text_source(long)
-Document::text_source
-#
---format=gnu --no-params
-variance__6Erlangd
-Erlang::variance(double)
-Erlang::variance
-#
---format=gnu --no-params
-view__14DocumentViewerP8ItemViewP11TabularItem
-DocumentViewer::view(ItemView *, TabularItem *)
-DocumentViewer::view
-#
---format=gnu --no-params
-xy_extents__11ivExtensionffff
-ivExtension::xy_extents(float, float, float, float)
-ivExtension::xy_extents
-#
---format=gnu --no-params
-zero__8osMemoryPvUi
-osMemory::zero(void *, unsigned int)
-osMemory::zero
-#
---format=gnu --no-params
-_2T4$N
-T4::N
-T4::N
-#
---format=gnu --no-params
-_Q22T42t1$N
-T4::t1::N
-T4::t1::N
-#
---format=gnu --no-params
-get__2T1
-T1::get(void)
-T1::get
-#
---format=gnu --no-params
-get__Q22T11a
-T1::a::get(void)
-T1::a::get
-#
---format=gnu --no-params
-get__Q32T11a1b
-T1::a::b::get(void)
-T1::a::b::get
-#
---format=gnu --no-params
-get__Q42T11a1b1c
-T1::a::b::c::get(void)
-T1::a::b::c::get
-#
---format=gnu --no-params
-get__Q52T11a1b1c1d
-T1::a::b::c::d::get(void)
-T1::a::b::c::d::get
-#
---format=gnu --no-params
-put__2T1i
-T1::put(int)
-T1::put
-#
---format=gnu --no-params
-put__Q22T11ai
-T1::a::put(int)
-T1::a::put
-#
---format=gnu --no-params
-put__Q32T11a1bi
-T1::a::b::put(int)
-T1::a::b::put
-#
---format=gnu --no-params
-put__Q42T11a1b1ci
-T1::a::b::c::put(int)
-T1::a::b::c::put
-#
---format=gnu --no-params
-put__Q52T11a1b1c1di
-T1::a::b::c::d::put(int)
-T1::a::b::c::d::put
-#
---format=gnu --no-params
-bar__3fooPv
-foo::bar(void *)
-foo::bar
-#
---format=gnu --no-params
-bar__C3fooPv
-foo::bar(void *) const
-foo::bar
-#
---format=gnu --no-params
-__eq__3fooRT0
-foo::operator==(foo &)
-foo::operator==
-#
---format=gnu --no-params
-__eq__C3fooR3foo
-foo::operator==(foo &) const
-foo::operator==
-#
---format=gnu --no-params
-elem__t6vector1Zdi
-vector<double>::elem(int)
-vector<double>::elem
-#
---format=gnu --no-params
-elem__t6vector1Zii
-vector<int>::elem(int)
-vector<int>::elem
-#
---format=gnu --no-params
-__t6vector1Zdi
-vector<double>::vector(int)
-vector<double>::vector
-#
---format=gnu --no-params
-__t6vector1Zii
-vector<int>::vector(int)
-vector<int>::vector
-#
---format=gnu --no-params
-_$_t6vector1Zdi
-vector<double>::~vector(int)
-vector<double>::~vector
-#
---format=gnu --no-params
-_$_t6vector1Zii
-vector<int>::~vector(int)
-vector<int>::~vector
-#
---format=gnu --no-params
-__nw__t2T11ZcUi
-T1<char>::operator new(unsigned int)
-T1<char>::operator new
-#
---format=gnu --no-params
-__nw__t2T11Z1tUi
-T1<t>::operator new(unsigned int)
-T1<t>::operator new
-#
---format=gnu --no-params
-__dl__t2T11ZcPv
-T1<char>::operator delete(void *)
-T1<char>::operator delete
-#
---format=gnu --no-params
-__dl__t2T11Z1tPv
-T1<t>::operator delete(void *)
-T1<t>::operator delete
-#
---format=gnu --no-params
-__t2T11Zci
-T1<char>::T1(int)
-T1<char>::T1
-#
---format=gnu --no-params
-__t2T11Zc
-T1<char>::T1(void)
-T1<char>::T1
-#
---format=gnu --no-params
-__t2T11Z1ti
-T1<t>::T1(int)
-T1<t>::T1
-#
---format=gnu --no-params
-__t2T11Z1t
-T1<t>::T1(void)
-T1<t>::T1
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity3Pix
-List<VHDLEntity>::Pix::Pix(void)
-List<VHDLEntity>::Pix::Pix
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity3PixPQ2t4List1Z10VHDLEntity7element
-List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::element *)
-List<VHDLEntity>::Pix::Pix
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity3PixRCQ2t4List1Z10VHDLEntity3Pix
-List<VHDLEntity>::Pix::Pix(List<VHDLEntity>::Pix const &)
-List<VHDLEntity>::Pix::Pix
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity7elementRC10VHDLEntityPT0
-List<VHDLEntity>::element::element(VHDLEntity const &, List<VHDLEntity>::element *)
-List<VHDLEntity>::element::element
-#
---format=gnu --no-params
-__Q2t4List1Z10VHDLEntity7elementRCQ2t4List1Z10VHDLEntity7element
-List<VHDLEntity>::element::element(List<VHDLEntity>::element const &)
-List<VHDLEntity>::element::element
-#
---format=gnu --no-params
-__cl__C11VHDLLibraryGt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-VHDLLibrary::operator()(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >) const
-VHDLLibrary::operator()
-#
---format=gnu --no-params
-__cl__Ct4List1Z10VHDLEntityRCQ2t4List1Z10VHDLEntity3Pix
-List<VHDLEntity>::operator()(List<VHDLEntity>::Pix const &) const
-List<VHDLEntity>::operator()
-#
---format=gnu --no-params
-__ne__FPvRCQ2t4List1Z10VHDLEntity3Pix
-operator!=(void *, List<VHDLEntity>::Pix const &)
-operator!=
-#
---format=gnu --no-params
-__ne__FPvRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-operator!=(void *, PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &)
-operator!=
-#
---format=gnu --no-params
-__t4List1Z10VHDLEntityRCt4List1Z10VHDLEntity
-List<VHDLEntity>::List(List<VHDLEntity> const &)
-List<VHDLEntity>::List
-#
---format=gnu --no-params
-__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(void)
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX
-#
---format=gnu --no-params
-__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityP14VHDLLibraryRepGQ2t4List1Z10VHDLEntity3Pix
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(VHDLLibraryRep *, List<VHDLEntity>::Pix)
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX
-#
---format=gnu --no-params
-__t4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntityRCt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > const &)
-PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> >::PixX
-#
---format=gnu --no-params
-nextE__C11VHDLLibraryRt4PixX3Z11VHDLLibraryZ14VHDLLibraryRepZt4List1Z10VHDLEntity
-VHDLLibrary::nextE(PixX<VHDLLibrary, VHDLLibraryRep, List<VHDLEntity> > &) const
-VHDLLibrary::nextE
-#
---format=gnu --no-params
-next__Ct4List1Z10VHDLEntityRQ2t4List1Z10VHDLEntity3Pix
-List<VHDLEntity>::next(List<VHDLEntity>::Pix &) const
-List<VHDLEntity>::next
-#
---format=gnu --no-params
-_GLOBAL_$D$set
-global destructors keyed to set
-global destructors keyed to set
-#
---format=gnu --no-params
-_GLOBAL_$I$set
-global constructors keyed to set
-global constructors keyed to set
-#
---format=gnu --no-params
-__as__t5ListS1ZUiRCt5ListS1ZUi
-ListS<unsigned int>::operator=(ListS<unsigned int> const &)
-ListS<unsigned int>::operator=
-#
---format=gnu --no-params
-__cl__Ct5ListS1ZUiRCQ2t5ListS1ZUi3Vix
-ListS<unsigned int>::operator()(ListS<unsigned int>::Vix const &) const
-ListS<unsigned int>::operator()
-#
---format=gnu --no-params
-__cl__Ct5SetLS1ZUiRCQ2t5SetLS1ZUi3Vix
-SetLS<unsigned int>::operator()(SetLS<unsigned int>::Vix const &) const
-SetLS<unsigned int>::operator()
-#
---format=gnu --no-params
-__t10ListS_link1ZUiRCUiPT0
-ListS_link<unsigned int>::ListS_link(unsigned int const &, ListS_link<unsigned int> *)
-ListS_link<unsigned int>::ListS_link
-#
---format=gnu --no-params
-__t10ListS_link1ZUiRCt10ListS_link1ZUi
-ListS_link<unsigned int>::ListS_link(ListS_link<unsigned int> const &)
-ListS_link<unsigned int>::ListS_link
-#
---format=gnu --no-params
-__t5ListS1ZUiRCt5ListS1ZUi
-ListS<unsigned int>::ListS(ListS<unsigned int> const &)
-ListS<unsigned int>::ListS
-#
---format=gnu --no-params
-next__Ct5ListS1ZUiRQ2t5ListS1ZUi3Vix
-ListS<unsigned int>::next(ListS<unsigned int>::Vix &) const
-ListS<unsigned int>::next
-#
---format=gnu --no-params
-__ne__FPvRCQ2t5SetLS1ZUi3Vix
-operator!=(void *, SetLS<unsigned int>::Vix const &)
-operator!=
-#
---format=gnu --no-params
-__t8ListElem1Z5LabelRt4List1Z5Label
-ListElem<Label>::ListElem(List<Label> &)
-ListElem<Label>::ListElem
-#
---format=gnu --no-params
-__t8BDDHookV1ZPcRCPc
-BDDHookV<char *>::BDDHookV(char *const &)
-BDDHookV<char *>::BDDHookV
-#
---format=gnu --no-params
-_vt$t8BDDHookV1ZPc
-BDDHookV<char *> virtual table
-BDDHookV<char *> virtual table
-#
---format=gnu --no-params
-__ne__FPvRCQ211BDDFunction4VixB
-operator!=(void *, BDDFunction::VixB const &)
-operator!=
-#
---format=gnu --no-params
-__eq__FPvRCQ211BDDFunction4VixB
-operator==(void *, BDDFunction::VixB const &)
-operator==
-#
---format=gnu --no-params
-relativeId__CQ36T_phi210T_preserve8FPC_nextRCQ26T_phi210T_preserveRC10Parameters
-T_phi2::T_preserve::FPC_next::relativeId(T_phi2::T_preserve const &, Parameters const &) const
-T_phi2::T_preserve::FPC_next::relativeId
-#
---format=lucid --no-params
-WS__FR7istream
-WS(istream &)
-WS
-#
---format=lucid --no-params
-__aa__3fooFR3foo
-foo::operator&&(foo &)
-foo::operator&&
-#
---format=lucid --no-params
-__aad__3fooFR3foo
-foo::operator&=(foo &)
-foo::operator&=
-#
---format=lucid --no-params
-__ad__3fooFR3foo
-foo::operator&(foo &)
-foo::operator&
-#
---format=lucid --no-params
-__adv__3fooFR3foo
-foo::operator/=(foo &)
-foo::operator/=
-#
---format=lucid --no-params
-__adv__7complexF7complex
-complex::operator/=(complex)
-complex::operator/=
-#
---format=lucid --no-params
-__aer__3fooFR3foo
-foo::operator^=(foo &)
-foo::operator^=
-#
---format=lucid --no-params
-__als__3fooFR3foo
-foo::operator<<=(foo &)
-foo::operator<<=
-#
---format=lucid --no-params
-__amd__3fooFR3foo
-foo::operator%=(foo &)
-foo::operator%=
-#
---format=lucid --no-params
-__ami__3fooFR3foo
-foo::operator-=(foo &)
-foo::operator-=
-#
---format=lucid --no-params
-__amu__3fooFR3foo
-foo::operator*=(foo &)
-foo::operator*=
-#
---format=lucid --no-params
-__amu__7complexF7complex
-complex::operator*=(complex)
-complex::operator*=
-#
---format=lucid --no-params
-__aor__3fooFR3foo
-foo::operator|=(foo &)
-foo::operator|=
-#
---format=lucid --no-params
-__apl__3fooFR3foo
-foo::operator+=(foo &)
-foo::operator+=
-#
---format=lucid --no-params
-__ars__3fooFR3foo
-foo::operator>>=(foo &)
-foo::operator>>=
-#
---format=lucid --no-params
-__as__18istream_withassignFP9streambuf
-istream_withassign::operator=(streambuf *)
-istream_withassign::operator=
-#
---format=lucid --no-params
-__as__18istream_withassignFR7istream
-istream_withassign::operator=(istream &)
-istream_withassign::operator=
-#
---format=lucid --no-params
-__as__3fooFR3foo
-foo::operator=(foo &)
-foo::operator=
-#
---format=lucid --no-params
-__as__3iosFR3ios
-ios::operator=(ios &)
-ios::operator=
-#
---format=lucid --no-params
-__cl__3fooFR3foo
-foo::operator()(foo &)
-foo::operator()
-#
---format=lucid --no-params
-__cm__3fooFR3foo
-foo::operator, (foo &)
-foo::operator,
-#
---format=lucid --no-params
-__co__3fooFv
-foo::operator~(void)
-foo::operator~
-#
---format=lucid --no-params
-__ct__10istrstreamFPc
-istrstream::istrstream(char *)
-istrstream::istrstream
-#
---format=lucid --no-params
-__ct__10istrstreamFPci
-istrstream::istrstream(char *, int)
-istrstream::istrstream
-#
---format=lucid --no-params
-__ct__10ostrstreamFPciT2
-ostrstream::ostrstream(char *, int, int)
-ostrstream::ostrstream
-#
---format=lucid --no-params
-__ct__10ostrstreamFv
-ostrstream::ostrstream(void)
-ostrstream::ostrstream
-#
---format=lucid --no-params
-__ct__10smanip_intFPFR3iosi_R3iosi
-smanip_int::smanip_int(ios &(*)(ios &, int), int)
-smanip_int::smanip_int
-#
---format=lucid --no-params
-__ct__11fstreambaseFi
-fstreambase::fstreambase(int)
-fstreambase::fstreambase
-#
---format=lucid --no-params
-__ct__11fstreambaseFiPcT1
-fstreambase::fstreambase(int, char *, int)
-fstreambase::fstreambase
-#
---format=lucid --no-params
-__ct__11fstreambaseFv
-fstreambase::fstreambase(void)
-fstreambase::fstreambase
-#
---format=lucid --no-params
-__ct__11smanip_longFPFR3iosl_R3iosl
-smanip_long::smanip_long(ios &(*)(ios &, long), long)
-smanip_long::smanip_long
-#
---format=lucid --no-params
-__ct__11stdiostreamFP4FILE
-stdiostream::stdiostream(FILE *)
-stdiostream::stdiostream
-#
---format=lucid --no-params
-__ct__12strstreambufFPFl_PvPFPv_v
-strstreambuf::strstreambuf(void *(*)(long), void (*)(void *))
-strstreambuf::strstreambuf
-#
---format=lucid --no-params
-__ct__12strstreambufFPUciT1
-strstreambuf::strstreambuf(unsigned char *, int, unsigned char *)
-strstreambuf::strstreambuf
-#
---format=lucid --no-params
-__ct__12strstreambufFPciT1
-strstreambuf::strstreambuf(char *, int, char *)
-strstreambuf::strstreambuf
-#
---format=lucid --no-params
-__ct__12strstreambufFi
-strstreambuf::strstreambuf(int)
-strstreambuf::strstreambuf
-#
---format=lucid --no-params
-__ct__12strstreambufFv
-strstreambuf::strstreambuf(void)
-strstreambuf::strstreambuf
-#
---format=lucid --no-params
-__ct__13strstreambaseFPciT1
-strstreambase::strstreambase(char *, int, char *)
-strstreambase::strstreambase
-#
---format=lucid --no-params
-__ct__3fooFR3foo
-foo::foo(foo &)
-foo::foo
-#
---format=lucid --no-params
-__ct__3fooFi
-foo::foo(int)
-foo::foo
-#
---format=lucid --no-params
-__ct__3fooFiN31
-foo::foo(int, int, int, int)
-foo::foo
-#
---format=lucid --no-params
-__ct__3fooFiR3fooT1T2T1T2
-foo::foo(int, foo &, int, foo &, int, foo &)
-foo::foo
-#
---format=lucid --no-params
-__ct__3iosFP9streambuf
-ios::ios(streambuf *)
-ios::ios
-#
---format=lucid --no-params
-__ct__7filebufFiPcT1
-filebuf::filebuf(int, char *, int)
-filebuf::filebuf
-#
---format=lucid --no-params
-__ct__7fstreamFiPcT1
-fstream::fstream(int, char *, int)
-fstream::fstream
-#
---format=lucid --no-params
-__ct__7istreamFP9streambuf
-istream::istream(streambuf *)
-istream::istream
-#
---format=lucid --no-params
-__ct__7istreamFP9streambufiP7ostream
-istream::istream(streambuf *, int, ostream *)
-istream::istream
-#
---format=lucid --no-params
-__ct__7istreamFiPcT1
-istream::istream(int, char *, int)
-istream::istream
-#
---format=lucid --no-params
-__ct__7istreamFiT1P7ostream
-istream::istream(int, int, ostream *)
-istream::istream
-#
---format=lucid --no-params
-__ct__7ostreamFP9streambuf
-ostream::ostream(streambuf *)
-ostream::ostream
-#
---format=lucid --no-params
-__ct__7ostreamFiPc
-ostream::ostream(int, char *)
-ostream::ostream
-#
---format=lucid --no-params
-__ct__8ifstreamFiPcT1
-ifstream::ifstream(int, char *, int)
-ifstream::ifstream
-#
---format=lucid --no-params
-__ct__Q23foo3barFv
-foo::bar::bar(void)
-foo::bar::bar
-#
---format=lucid --no-params
-__ct__Q33foo3bar4bellFv
-foo::bar::bell::bell(void)
-foo::bar::bell::bell
-#
---format=lucid --no-params
-__dl__3fooSFPv
-foo::operator delete(void *) static
-foo::operator delete
-#
---format=lucid --no-params
-__dl__FPv
-operator delete(void *)
-operator delete
-#
---format=lucid --no-params
-__dt__10istrstreamFv
-istrstream::~istrstream(void)
-istrstream::~istrstream
-#
---format=lucid --no-params
-__dt__Q23foo3barFv
-foo::bar::~bar(void)
-foo::bar::~bar
-#
---format=lucid --no-params
-__dt__Q33foo3bar4bellFv
-foo::bar::bell::~bell(void)
-foo::bar::bell::~bell
-#
---format=lucid --no-params
-__dv__3fooFR3foo
-foo::operator/(foo &)
-foo::operator/
-#
---format=lucid --no-params
-__dv__F7complexT1
-operator/(complex, complex)
-operator/
-#
---format=lucid --no-params
-__eq__3fooFR3foo
-foo::operator==(foo &)
-foo::operator==
-#
---format=lucid --no-params
-__er__3fooFR3foo
-foo::operator^(foo &)
-foo::operator^
-#
---format=lucid --no-params
-__ge__3fooFR3foo
-foo::operator>=(foo &)
-foo::operator>=
-#
---format=lucid --no-params
-__gt__3fooFR3foo
-foo::operator>(foo &)
-foo::operator>
-#
---format=lucid --no-params
-__le__3fooFR3foo
-foo::operator<=(foo &)
-foo::operator<=
-#
---format=lucid --no-params
-__ls__3fooFR3foo
-foo::operator<<(foo &)
-foo::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFP9streambuf
-ostream::operator<<(streambuf *)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFPFR3ios_R3ios
-ostream::operator<<(ios &(*)(ios &))
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFPv
-ostream::operator<<(void *)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFUi
-ostream::operator<<(unsigned int)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFUl
-ostream::operator<<(unsigned long)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFd
-ostream::operator<<(double)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFf
-ostream::operator<<(float)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFi
-ostream::operator<<(int)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__7ostreamFl
-ostream::operator<<(long)
-ostream::operator<<
-#
---format=lucid --no-params
-__ls__FR7ostream7complex
-operator<<(ostream &, complex)
-operator<<
-#
---format=lucid --no-params
-__lt__3fooFR3foo
-foo::operator<(foo &)
-foo::operator<
-#
---format=lucid --no-params
-__md__3fooFR3foo
-foo::operator%(foo &)
-foo::operator%
-#
---format=lucid --no-params
-__mi__3fooFR3foo
-foo::operator-(foo &)
-foo::operator-
-#
---format=lucid --no-params
-__ml__3fooFR3foo
-foo::operator*(foo &)
-foo::operator*
-#
---format=lucid --no-params
-__ml__F7complexT1
-operator*(complex, complex)
-operator*
-#
---format=lucid --no-params
-__mm__3fooFi
-foo::operator--(int)
-foo::operator--
-#
---format=lucid --no-params
-__ne__3fooFR3foo
-foo::operator!=(foo &)
-foo::operator!=
-#
---format=lucid --no-params
-__nt__3fooFv
-foo::operator!(void)
-foo::operator!
-#
---format=lucid --no-params
-__nw__3fooSFi
-foo::operator new(int) static
-foo::operator new
-#
---format=lucid --no-params
-__nw__FUi
-operator new(unsigned int)
-operator new
-#
---format=lucid --no-params
-__nw__FUiPv
-operator new(unsigned int, void *)
-operator new
-#
---format=lucid --no-params
-__oo__3fooFR3foo
-foo::operator||(foo &)
-foo::operator||
-#
---format=lucid --no-params
-__opPc__3fooFv
-foo::operator char *(void)
-foo::operator char *
-#
---format=lucid --no-params
-__opi__3fooFv
-foo::operator int(void)
-foo::operator int
-#
---format=lucid --no-params
-__or__3fooFR3foo
-foo::operator|(foo &)
-foo::operator|
-#
---format=lucid --no-params
-__pl__3fooFR3foo
-foo::operator+(foo &)
-foo::operator+
-#
---format=lucid --no-params
-__pp__3fooFi
-foo::operator++(int)
-foo::operator++
-#
---format=lucid --no-params
-__pt__3fooFv
-foo::operator->(void)
-foo::operator->
-#
---format=lucid --no-params
-__rm__3fooFR3foo
-foo::operator->*(foo &)
-foo::operator->*
-#
---format=lucid --no-params
-__rs__3fooFR3foo
-foo::operator>>(foo &)
-foo::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFP9streambuf
-istream::operator>>(streambuf *)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFPFR3ios_R3ios
-istream::operator>>(ios &(*)(ios &))
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFPFR7istream_R7istream
-istream::operator>>(istream &(*)(istream &))
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFPUc
-istream::operator>>(unsigned char *)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFPc
-istream::operator>>(char *)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRUi
-istream::operator>>(unsigned int &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRUl
-istream::operator>>(unsigned long &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRUs
-istream::operator>>(unsigned short &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRd
-istream::operator>>(double &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRf
-istream::operator>>(float &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRi
-istream::operator>>(int &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRl
-istream::operator>>(long &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__7istreamFRs
-istream::operator>>(short &)
-istream::operator>>
-#
---format=lucid --no-params
-__rs__FR7istreamR7complex
-operator>>(istream &, complex &)
-operator>>
-#
---format=lucid --no-params
-__vtbl__10istrstream
-istrstream virtual table
-istrstream virtual table
-#
---format=lucid --no-params
-__vtbl__17ostream__iostream__19iostream_withassign
-iostream_withassign::ostream__iostream virtual table
-iostream_withassign::ostream__iostream virtual table
-#
---format=lucid --no-params
-__vtbl__3ios
-ios virtual table
-ios virtual table
-#
---format=lucid --no-params
-__vtbl__3ios__13strstreambase
-strstreambase::ios virtual table
-strstreambase::ios virtual table
-#
---format=lucid --no-params
-abs__F7complex
-abs(complex)
-abs
-#
---format=lucid --no-params
-allocate__9streambufFv
-streambuf::allocate(void)
-streambuf::allocate
-#
---format=lucid --no-params
-attach__11fstreambaseFi
-fstreambase::attach(int)
-fstreambase::attach
-#
---format=lucid --no-params
-bitalloc__3iosSFv
-ios::bitalloc(void) static
-ios::bitalloc
-#
---format=lucid --no-params
-chr__FiT1
-chr(int, int)
-chr
-#
---format=lucid --no-params
-complex_error__FR11c_exception
-complex_error(c_exception &)
-complex_error
-#
---format=lucid --no-params
-complexfunc2__FPFPc_i
-complexfunc2(int (*)(char *))
-complexfunc2
-#
---format=lucid --no-params
-complexfunc3__FPFPFPl_s_i
-complexfunc3(int (*)(short (*)(long *)))
-complexfunc3
-#
---format=lucid --no-params
-complexfunc4__FPFPFPc_s_i
-complexfunc4(int (*)(short (*)(char *)))
-complexfunc4
-#
---format=lucid --no-params
-complexfunc5__FPFPc_PFl_i
-complexfunc5(int (*(*)(char *))(long))
-complexfunc5
-#
---format=lucid --no-params
-complexfunc6__FPFPi_PFl_i
-complexfunc6(int (*(*)(int *))(long))
-complexfunc6
-#
---format=lucid --no-params
-complexfunc7__FPFPFPc_i_PFl_i
-complexfunc7(int (*(*)(int (*)(char *)))(long))
-complexfunc7
-#
---format=lucid --no-params
-complicated_put__7ostreamFc
-ostream::complicated_put(char)
-ostream::complicated_put
-#
---format=lucid --no-params
-conv10__FlPc
-conv10(long, char *)
-conv10
-#
---format=lucid --no-params
-conv16__FUlPc
-conv16(unsigned long, char *)
-conv16
-#
---format=lucid --no-params
-dec__FR3ios
-dec(ios &)
-dec
-#
---format=lucid --no-params
-dec__Fli
-dec(long, int)
-dec
-#
---format=lucid --no-params
-dofield__FP7ostreamPciT2T3
-dofield(ostream *, char *, int, char *, int)
-dofield
-#
---format=lucid --no-params
-flags__3iosFl
-ios::flags(long)
-ios::flags
-#
---format=lucid --no-params
-flags__3iosFv
-ios::flags(void)
-ios::flags
-#
---format=lucid --no-params
-foo__FiN31
-foo(int, int, int, int)
-foo
-#
---format=lucid --no-params
-foo__FiR3fooT1T2T1T2
-foo(int, foo &, int, foo &, int, foo &)
-foo
-#
---format=lucid --no-params
-foo___3barFl
-bar::foo_(long)
-bar::foo_
-#
---format=lucid --no-params
-get__7istreamFPcic
-istream::get(char *, int, char)
-istream::get
-#
---format=lucid --no-params
-get__7istreamFR9streambufc
-istream::get(streambuf &, char)
-istream::get
-#
---format=lucid --no-params
-get_complicated__7istreamFRUc
-istream::get_complicated(unsigned char &)
-istream::get_complicated
-#
---format=lucid --no-params
-get_complicated__7istreamFRc
-istream::get_complicated(char &)
-istream::get_complicated
-#
---format=lucid --no-params
-getline__7istreamFPUcic
-istream::getline(unsigned char *, int, char)
-istream::getline
-#
---format=lucid --no-params
-getline__7istreamFPcic
-istream::getline(char *, int, char)
-istream::getline
-#
---format=lucid --no-params
-ignore__7istreamFiT1
-istream::ignore(int, int)
-istream::ignore
-#
---format=lucid --no-params
-init__12strstreambufFPciT1
-strstreambuf::init(char *, int, char *)
-strstreambuf::init
-#
---format=lucid --no-params
-init__3iosFP9streambuf
-ios::init(streambuf *)
-ios::init
-#
---format=lucid --no-params
-initcount__13Iostream_init
-Iostream_init::initcount
-Iostream_init::initcount
-#
---format=lucid --no-params
-ipfx__7istreamFi
-istream::ipfx(int)
-istream::ipfx
-#
---format=lucid --no-params
-ls_complicated__7ostreamFUc
-ostream::ls_complicated(unsigned char)
-ostream::ls_complicated
-#
---format=lucid --no-params
-ls_complicated__7ostreamFc
-ostream::ls_complicated(char)
-ostream::ls_complicated
-#
---format=lucid --no-params
-overload1arg__FSc
-overload1arg(signed char)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__FUc
-overload1arg(unsigned char)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__FUi
-overload1arg(unsigned int)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__FUl
-overload1arg(unsigned long)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__FUs
-overload1arg(unsigned short)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fc
-overload1arg(char)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fd
-overload1arg(double)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Ff
-overload1arg(float)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fi
-overload1arg(int)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fl
-overload1arg(long)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fs
-overload1arg(short)
-overload1arg
-#
---format=lucid --no-params
-overload1arg__Fv
-overload1arg(void)
-overload1arg
-#
---format=lucid --no-params
-overloadargs__FiN21
-overloadargs(int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN31
-overloadargs(int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN41
-overloadargs(int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN51
-overloadargs(int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN61
-overloadargs(int, int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN71
-overloadargs(int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN81
-overloadargs(int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN91
-overloadargs(int, int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiN91N11
-overloadargs(int, int, int, int, int, int, int, int, int, int, int)
-overloadargs
-#
---format=lucid --no-params
-overloadargs__FiT1
-overloadargs(int, int)
-overloadargs
-#
---format=lucid --no-params
-polar__FdT1
-polar(double, double)
-polar
-#
---format=lucid --no-params
-pow__F7complexT1
-pow(complex, complex)
-pow
-#
---format=lucid --no-params
-pow__F7complexd
-pow(complex, double)
-pow
-#
---format=lucid --no-params
-pow__F7complexi
-pow(complex, int)
-pow
-#
---format=lucid --no-params
-pow__Fd7complex
-pow(double, complex)
-pow
-#
---format=lucid --no-params
-pstart__FPciT2
-pstart(char *, int, int)
-pstart
-#
---format=lucid --no-params
-put__7ostreamFc
-ostream::put(char)
-ostream::put
-#
---format=lucid --no-params
-read__7istreamFPci
-istream::read(char *, int)
-istream::read
-#
---format=lucid --no-params
-resetiosflags__FR3iosl
-resetiosflags(ios &, long)
-resetiosflags
-#
---format=lucid --no-params
-restore_errno__FRi
-restore_errno(int &)
-restore_errno
-#
---format=lucid --no-params
-rs_complicated__7istreamFRUc
-istream::rs_complicated(unsigned char &)
-istream::rs_complicated
-#
---format=lucid --no-params
-rs_complicated__7istreamFRc
-istream::rs_complicated(char &)
-istream::rs_complicated
-#
---format=lucid --no-params
-seekg__7istreamFl8seek_dir
-istream::seekg(long, seek_dir)
-istream::seekg
-#
---format=lucid --no-params
-seekoff__12strstreambufFl8seek_diri
-strstreambuf::seekoff(long, seek_dir, int)
-strstreambuf::seekoff
-#
---format=lucid --no-params
-seekoff__9streambufFlQ2_3ios12ios_seek_diri
-streambuf::seekoff(long, ios::ios_seek_dir, int)
-streambuf::seekoff
-#
---format=lucid --no-params
-seekpos__9streambufFli
-streambuf::seekpos(long, int)
-streambuf::seekpos
-#
---format=lucid --no-params
-set_new_handler__FPFv_v
-set_new_handler(void (*)(void))
-set_new_handler
-#
---format=lucid --no-params
-setb__9streambufFPcT1i
-streambuf::setb(char *, char *, int)
-streambuf::setb
-#
---format=lucid --no-params
-setb__FR3iosi
-setb(ios &, int)
-setb
-#
---format=lucid --no-params
-setbuf__11fstreambaseFPci
-fstreambase::setbuf(char *, int)
-fstreambase::setbuf
-#
---format=lucid --no-params
-setbuf__9streambufFPUci
-streambuf::setbuf(unsigned char *, int)
-streambuf::setbuf
-#
---format=lucid --no-params
-setbuf__9streambufFPciT2
-streambuf::setbuf(char *, int, int)
-streambuf::setbuf
-#
---format=lucid --no-params
-setf__3iosFlT1
-ios::setf(long, long)
-ios::setf
-#
---format=lucid --no-params
-setfill__FR3iosi
-setfill(ios &, int)
-setfill
-#
---format=lucid --no-params
-setg__9streambufFPcN21
-streambuf::setg(char *, char *, char *)
-streambuf::setg
-#
---format=lucid --no-params
-setp__9streambufFPcT1
-streambuf::setp(char *, char *)
-streambuf::setp
-#
---format=lucid --no-params
-tie__3iosFP7ostream
-ios::tie(ostream *)
-ios::tie
-#
---format=lucid --no-params
-uconv10__FUlPc
-uconv10(unsigned long, char *)
-uconv10
-#
---format=lucid --no-params
-xget__7istreamFPc
-istream::xget(char *)
-istream::xget
-#
---format=lucid --no-params
-xsgetn__9streambufFPci
-streambuf::xsgetn(char *, int)
-streambuf::xsgetn
-#
---format=arm --no-params
-__dt__21T5__pt__11_PFiPPdPv_iFv
-T5<int (*)(int, double **, void *)>::~T5(void)
-T5<int (*)(int, double **, void *)>::~T5
-#
---format=arm --no-params
-__ct__1cFi
-c::c(int)
-c::c
-#
---format=arm --no-params
-__dt__11T5__pt__2_iFv
-T5<int>::~T5(void)
-T5<int>::~T5
-#
---format=arm --no-params
-__dt__11T5__pt__2_cFv
-T5<char>::~T5(void)
-T5<char>::~T5
-#
---format=arm --no-params
-__ct__2T2Fi
-T2::T2(int)
-T2::T2
-#
---format=arm --no-params
-__dt__2T1Fv
-T1::~T1(void)
-T1::~T1
-#
---format=arm --no-params
-__dt__12T5__pt__3_1xFv
-T5<x>::~T5(void)
-T5<x>::~T5
-#
---format=arm --no-params
-__dt__17T5__pt__8_PFcPv_iFv
-T5<int (*)(char, void *)>::~T5(void)
-T5<int (*)(char, void *)>::~T5
-#
---format=arm --no-params
-__ct__21T5__pt__11_PFiPPdPv_iFi
-T5<int (*)(int, double **, void *)>::T5(int)
-T5<int (*)(int, double **, void *)>::T5
-#
---format=arm --no-params
-__amd__FR2T2i
-operator%=(T2 &, int)
-operator%=
-#
---format=arm --no-params
-__adv__FR2T2i
-operator/=(T2 &, int)
-operator/=
-#
---format=arm --no-params
-__amu__FR2T2i
-operator*=(T2 &, int)
-operator*=
-#
---format=arm --no-params
-__ami__FR2T2i
-operator-=(T2 &, int)
-operator-=
-#
---format=arm --no-params
-__apl__FR2T2i
-operator+=(T2 &, int)
-operator+=
-#
---format=arm --no-params
-__nw__2T1SFUi
-T1::operator new(unsigned int) static
-T1::operator new
-#
---format=arm --no-params
-__dl__2T1SFPv
-T1::operator delete(void *) static
-T1::operator delete
-#
---format=arm --no-params
-put__2T7SFi
-T7::put(int) static
-T7::put
-#
---format=arm --no-params
-__dl__12T5__pt__3_1xSFPv
-T5<x>::operator delete(void *) static
-T5<x>::operator delete
-#
---format=arm --no-params
-h__FUc
-h(unsigned char)
-h
-#
---format=arm --no-params
-f__Fic
-f(int, char)
-f
-#
---format=arm --no-params
-h__FUi
-h(unsigned int)
-h
-#
---format=arm --no-params
-h__Fci
-h(char, int)
-h
-#
---format=arm --no-params
-h__FUl
-h(unsigned long)
-h
-#
---format=arm --no-params
-h__Fcl
-h(char, long)
-h
-#
---format=arm --no-params
-h__FUs
-h(unsigned short)
-h
-#
---format=arm --no-params
-h__Fcs
-h(char, short)
-h
-#
---format=arm --no-params
-X__12T5__pt__3_1x
-T5<x>::X
-T5<x>::X
-#
---format=arm --no-params
-__ct__11T5__pt__2_iFi
-T5<int>::T5(int)
-T5<int>::T5
-#
---format=arm --no-params
-__ct__11T5__pt__2_cFi
-T5<char>::T5(int)
-T5<char>::T5
-#
---format=arm --no-params
-h__FcT1
-h(char, char)
-h
-#
---format=arm --no-params
-f__Ficd
-f(int, char, double)
-f
-#
---format=arm --no-params
-__dl__17T5__pt__8_PFcPv_iSFPv
-T5<int (*)(char, void *)>::operator delete(void *) static
-T5<int (*)(char, void *)>::operator delete
-#
---format=arm --no-params
-X__17T5__pt__8_PFcPv_i
-T5<int (*)(char, void *)>::X
-T5<int (*)(char, void *)>::X
-#
---format=arm --no-params
-__ct__12T5__pt__3_1xFi
-T5<x>::T5(int)
-T5<x>::T5
-#
---format=arm --no-params
-__dl__21T5__pt__11_PFiPPdPv_iSFPv
-T5<int (*)(int, double **, void *)>::operator delete(void *) static
-T5<int (*)(int, double **, void *)>::operator delete
-#
---format=arm --no-params
-__std__foo
-global destructors keyed to foo
-global destructors keyed to foo
-#
---format=arm --no-params
-__sti__bar
-global constructors keyed to bar
-global constructors keyed to bar
-#
---format=arm --no-params
-f__FicdPcPFci_v
-f(int, char, double, char *, void (*)(char, int))
-f
-#
---format=arm --no-params
-f__FicdPcPFic_v
-f(int, char, double, char *, void (*)(int, char))
-f
-#
---format=arm --no-params
-get__2T7SFv
-T7::get(void) static
-T7::get
-#
---format=arm --no-params
-X__21T5__pt__11_PFiPPdPv_i
-T5<int (*)(int, double **, void *)>::X
-T5<int (*)(int, double **, void *)>::X
-#
---format=arm --no-params
-__dl__11T5__pt__2_iSFPv
-T5<int>::operator delete(void *) static
-T5<int>::operator delete
-#
---format=arm --no-params
-__dl__11T5__pt__2_cSFPv
-T5<char>::operator delete(void *) static
-T5<char>::operator delete
-#
---format=arm --no-params
-h__Fc
-h(char)
-h
-#
---format=arm --no-params
-h__Fd
-h(double)
-h
-#
---format=arm --no-params
-h__Ff
-h(float)
-h
-#
---format=arm --no-params
-h__Fi
-h(int)
-h
-#
---format=arm --no-params
-f__Fi
-f(int)
-f
-#
---format=arm --no-params
-h__Fl
-h(long)
-h
-#
---format=arm --no-params
-h__Fs
-h(short)
-h
-#
---format=arm --no-params
-X__11T5__pt__2_c
-T5<char>::X
-T5<char>::X
-#
---format=arm --no-params
-X__11T5__pt__2_i
-T5<int>::X
-T5<int>::X
-#
---format=arm --no-params
-__ct__17T5__pt__8_PFcPv_iFi
-T5<int (*)(char, void *)>::T5(int)
-T5<int (*)(char, void *)>::T5
-#
---format=arm --no-params
-f__FicdPc
-f(int, char, double, char *)
-f
-#
---format=arm --no-params
-__nw__FUi
-operator new(unsigned int)
-operator new
-#
---format=arm --no-params
-__ct__Q3_2T11a1bSFi
-T1::a::b::b(int) static
-T1::a::b::b
-#
---format=arm --no-params
-__dt__Q3_2T11a1bSFi
-T1::a::b::~b(int) static
-T1::a::b::~b
-#
---format=arm --no-params
-put__Q3_2T11a1bSFi
-T1::a::b::put(int) static
-T1::a::b::put
-#
---format=arm --no-params
-get__Q2_2T11aSFv
-T1::a::get(void) static
-T1::a::get
-#
---format=arm --no-params
-put__2T1SFi
-T1::put(int) static
-T1::put
-#
---format=arm --no-params
-put__Q5_2T11a1b1c1dSFi
-T1::a::b::c::d::put(int) static
-T1::a::b::c::d::put
-#
---format=arm --no-params
-get__Q4_2T11a1b1cSFv
-T1::a::b::c::get(void) static
-T1::a::b::c::get
-#
---format=arm --no-params
-put__Q2_2T11aSFi
-T1::a::put(int) static
-T1::a::put
-#
---format=arm --no-params
-put__Q4_2T11a1b1cSFi
-T1::a::b::c::put(int) static
-T1::a::b::c::put
-#
---format=arm --no-params
-get__Q3_2T11a1bSFv
-T1::a::b::get(void) static
-T1::a::b::get
-#
---format=arm --no-params
-get__2T1SFv
-T1::get(void) static
-T1::get
-#
---format=arm --no-params
-get__Q5_2T11a1b1c1dSFv
-T1::a::b::c::d::get(void) static
-T1::a::b::c::d::get
-#
---format=arm --no-params
-__dt__11T1__pt__2_cFv
-T1<char>::~T1(void)
-T1<char>::~T1
-#
---format=arm --no-params
-__dt__12T1__pt__3_1tFv
-T1<t>::~T1(void)
-T1<t>::~T1
-#
---format=arm --no-params
-__dl__12T1__pt__3_1tSFPv
-T1<t>::operator delete(void *) static
-T1<t>::operator delete
-#
---format=arm --no-params
-__ct__11T1__pt__2_cFi
-T1<char>::T1(int)
-T1<char>::T1
-#
---format=arm --no-params
-__ct__11T1__pt__2_cFv
-T1<char>::T1(void)
-T1<char>::T1
-#
---format=arm --no-params
-__ct__12T1__pt__3_1tFi
-T1<t>::T1(int)
-T1<t>::T1
-#
---format=arm --no-params
-__ct__12T1__pt__3_1tFv
-T1<t>::T1(void)
-T1<t>::T1
-#
---format=arm --no-params
-__dl__11T1__pt__2_cSFPv
-T1<char>::operator delete(void *) static
-T1<char>::operator delete
-#
---format=arm --no-params
-bar__3fooFPv
-foo::bar(void *)
-foo::bar
-#
---format=arm --no-params
-bar__3fooCFPv
-foo::bar(void *) const
-foo::bar
-#
---format=arm --no-params
-__eq__3fooFR3foo
-foo::operator==(foo &)
-foo::operator==
-#
---format=arm --no-params
-__eq__3fooCFR3foo
-foo::operator==(foo &) const
-foo::operator==
-#
---format=arm --no-params
-elem__15vector__pt__2_dFi
-vector<double>::elem(int)
-vector<double>::elem
-#
---format=arm --no-params
-elem__15vector__pt__2_iFi
-vector<int>::elem(int)
-vector<int>::elem
-#
---format=arm --no-params
-__ct__15vector__pt__2_dFi
-vector<double>::vector(int)
-vector<double>::vector
-#
---format=arm --no-params
-__ct__15vector__pt__2_iFi
-vector<int>::vector(int)
-vector<int>::vector
-#
---format=arm --no-params
-__ct__25DListNode__pt__9_R6RLabelFR6RLabelP25DListNode__pt__9_R6RLabelT2
-DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *)
-DListNode<RLabel &>::DListNode
-#
---format=arm --no-params
-bar__3fooFiT16FooBar
-foo::bar(int, int, FooBar)
-foo::bar
-#
---format=arm --no-params
-bar__3fooFPiN51PdN37PcN211T1iN215
-foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int)
-foo::bar
-#
---format=hp --no-params
-__amd__FR2T2i
-operator%=(T2 &, int)
-operator%=
-#
---format=hp --no-params
-__adv__FR2T2i
-operator/=(T2 &, int)
-operator/=
-#
---format=hp --no-params
-__amu__FR2T2i
-operator*=(T2 &, int)
-operator*=
-#
---format=hp --no-params
-__ami__FR2T2i
-operator-=(T2 &, int)
-operator-=
-#
---format=hp --no-params
-__apl__FR2T2i
-operator+=(T2 &, int)
-operator+=
-#
---format=hp --no-params
-__nw__2T1SFUi
-T1::operator new(unsigned int) static
-T1::operator new
-#
---format=hp --no-params
-__dl__2T1SFPv
-T1::operator delete(void *) static
-T1::operator delete
-#
---format=hp --no-params
-put__2T7SFi
-T7::put(int) static
-T7::put
-#
---format=hp --no-params
-h__FUc
-h(unsigned char)
-h
-#
---format=hp --no-params
-f__Fic
-f(int, char)
-f
-#
---format=hp --no-params
-h__FUi
-h(unsigned int)
-h
-#
---format=hp --no-params
-h__Fci
-h(char, int)
-h
-#
---format=hp --no-params
-h__FUl
-h(unsigned long)
-h
-#
---format=hp --no-params
-h__Fcl
-h(char, long)
-h
-#
---format=hp --no-params
-h__FUs
-h(unsigned short)
-h
-#
---format=hp --no-params
-h__Fcs
-h(char, short)
-h
-#
---format=hp --no-params
-h__FcT1
-h(char, char)
-h
-#
---format=hp --no-params
-f__Ficd
-f(int, char, double)
-f
-#
---format=hp --no-params
-f__FicdPcPFci_v
-f(int, char, double, char *, void (*)(char, int))
-f
-#
---format=hp --no-params
-f__FicdPcPFic_v
-f(int, char, double, char *, void (*)(int, char))
-f
-#
---format=hp --no-params
-get__2T7SFv
-T7::get(void) static
-T7::get
-#
---format=hp --no-params
-h__Fc
-h(char)
-h
-#
---format=hp --no-params
-h__Fd
-h(double)
-h
-#
---format=hp --no-params
-h__Ff
-h(float)
-h
-#
---format=hp --no-params
-h__Fi
-h(int)
-h
-#
---format=hp --no-params
-f__Fi
-f(int)
-f
-#
---format=hp --no-params
-h__Fl
-h(long)
-h
-#
---format=hp --no-params
-h__Fs
-h(short)
-h
-#
---format=hp --no-params
-f__FicdPc
-f(int, char, double, char *)
-f
-#
---format=hp --no-params
-__nw__FUi
-operator new(unsigned int)
-operator new
-#
---format=hp --no-params
-__ct__Q3_2T11a1bSFi
-T1::a::b::b(int) static
-T1::a::b::b
-#
---format=hp --no-params
-__dt__Q3_2T11a1bSFi
-T1::a::b::~b(int) static
-T1::a::b::~b
-#
---format=hp --no-params
-put__Q3_2T11a1bSFi
-T1::a::b::put(int) static
-T1::a::b::put
-#
---format=hp --no-params
-get__Q2_2T11aSFv
-T1::a::get(void) static
-T1::a::get
-#
---format=hp --no-params
-put__2T1SFi
-T1::put(int) static
-T1::put
-#
---format=hp --no-params
-put__Q5_2T11a1b1c1dSFi
-T1::a::b::c::d::put(int) static
-T1::a::b::c::d::put
-#
---format=hp --no-params
-get__Q4_2T11a1b1cSFv
-T1::a::b::c::get(void) static
-T1::a::b::c::get
-#
---format=hp --no-params
-put__Q2_2T11aSFi
-T1::a::put(int) static
-T1::a::put
-#
---format=hp --no-params
-put__Q4_2T11a1b1cSFi
-T1::a::b::c::put(int) static
-T1::a::b::c::put
-#
---format=hp --no-params
-get__Q3_2T11a1bSFv
-T1::a::b::get(void) static
-T1::a::b::get
-#
---format=hp --no-params
-get__2T1SFv
-T1::get(void) static
-T1::get
-#
---format=hp --no-params
-get__Q5_2T11a1b1c1dSFv
-T1::a::b::c::d::get(void) static
-T1::a::b::c::d::get
-#
---format=hp --no-params
-bar__3fooFPv
-foo::bar(void *)
-foo::bar
-#
---format=hp --no-params
-bar__3fooCFPv
-foo::bar(void *) const
-foo::bar
-#
---format=hp --no-params
-__eq__3fooFR3foo
-foo::operator==(foo &)
-foo::operator==
-#
---format=hp --no-params
-__eq__3fooCFR3foo
-foo::operator==(foo &) const
-foo::operator==
-#
---format=hp --no-params
-bar__3fooFiT16FooBar
-foo::bar(int, int, FooBar)
-foo::bar
-#
---format=hp --no-params
-bar__3fooFPiN51PdN37PcN211T1iN215
-foo::bar(int *, int *, int *, int *, int *, int *, double *, double *, double *, double *, char *, char *, char *, int *, int, int, int)
-foo::bar
-#
---format=hp --no-params
-__dt__2T5XTPFiPPdPv_i__Fv
-T5<int (*)(int, double **, void *)>::~T5(void)
-T5<int (*)(int, double **, void *)>::~T5
-#
---format=hp --no-params
-__ct__1cFi
-c::c(int)
-c::c
-#
---format=hp --no-params
-__dt__2T5XTi__Fv
-T5<int>::~T5(void)
-T5<int>::~T5
-#
---format=hp --no-params
-__dt__2T5XTc__Fv
-T5<char>::~T5(void)
-T5<char>::~T5
-#
---format=hp --no-params
-__ct__2T2Fi
-T2::T2(int)
-T2::T2
-#
---format=hp --no-params
-__dt__2T1Fv
-T1::~T1(void)
-T1::~T1
-#
---format=hp --no-params
-__dt__2T5XT1x__Fv
-T5<x>::~T5(void)
-T5<x>::~T5
-#
---format=hp --no-params
-__dt__2T5XTPFcPv_i__Fv
-T5<int (*)(char, void *)>::~T5(void)
-T5<int (*)(char, void *)>::~T5
-#
---format=hp --no-params
-__ct__2T5XTPFiPPdPv_i__Fi
-T5<int (*)(int, double **, void *)>::T5(int)
-T5<int (*)(int, double **, void *)>::T5
-#
---format=hp --no-params
-__dl__2T5XT1x__SFPv
-T5<x>::operator delete(void *) static
-T5<x>::operator delete
-#
---format=hp --no-params
-X__2T5XT1x
-T5<x>::X
-T5<x>::X
-#
---format=hp --no-params
-__ct__2T5XTi__Fi
-T5<int>::T5(int)
-T5<int>::T5
-#
---format=hp --no-params
-__ct__2T5XTc__Fi
-T5<char>::T5(int)
-T5<char>::T5
-#
---format=hp --no-params
-__dl__2T5XTPFcPv_i__SFPv
-T5<int (*)(char, void *)>::operator delete(void *) static
-T5<int (*)(char, void *)>::operator delete
-#
---format=hp --no-params
-X__2T5XTPFcPv_i
-T5<int (*)(char, void *)>::X
-T5<int (*)(char, void *)>::X
-#
---format=hp --no-params
-__ct__2T5XT1x__Fi
-T5<x>::T5(int)
-T5<x>::T5
-#
---format=hp --no-params
-__dl__2T5XTPFiPPdPv_i__SFPv
-T5<int (*)(int, double **, void *)>::operator delete(void *) static
-T5<int (*)(int, double **, void *)>::operator delete
-#
---format=hp --no-params
-X__2T5XTPFiPPdPv_i
-T5<int (*)(int, double **, void *)>::X
-T5<int (*)(int, double **, void *)>::X
-#
---format=hp --no-params
-__dl__2T5XTi__SFPv
-T5<int>::operator delete(void *) static
-T5<int>::operator delete
-#
---format=hp --no-params
-__dl__2T5XTc__SFPv
-T5<char>::operator delete(void *) static
-T5<char>::operator delete
-#
---format=hp --no-params
-X__2T5XTc
-T5<char>::X
-T5<char>::X
-#
---format=hp --no-params
-X__2T5XTi
-T5<int>::X
-T5<int>::X
-#
---format=hp --no-params
-__ct__2T5XTPFcPv_i__Fi
-T5<int (*)(char, void *)>::T5(int)
-T5<int (*)(char, void *)>::T5
-#
---format=hp --no-params
-__dt__2T1XTc__Fv
-T1<char>::~T1(void)
-T1<char>::~T1
-#
---format=hp --no-params
-__dt__2T1XT1t__Fv
-T1<t>::~T1(void)
-T1<t>::~T1
-#
---format=hp --no-params
-__dl__2T1XT1t__SFPv
-T1<t>::operator delete(void *) static
-T1<t>::operator delete
-#
---format=hp --no-params
-__ct__2T1XTc__Fi
-T1<char>::T1(int)
-T1<char>::T1
-#
---format=hp --no-params
-__ct__2T1XTc__Fv
-T1<char>::T1(void)
-T1<char>::T1
-#
---format=hp --no-params
-__ct__2T1XT1t__Fi
-T1<t>::T1(int)
-T1<t>::T1
-#
---format=hp --no-params
-__ct__2T1XT1t__Fv
-T1<t>::T1(void)
-T1<t>::T1
-#
---format=hp --no-params
-__dl__2T1XTc__SFPv
-T1<char>::operator delete(void *) static
-T1<char>::operator delete
-#
---format=hp --no-params
-elem__6vectorXTd__Fi
-vector<double>::elem(int)
-vector<double>::elem
-#
---format=hp --no-params
-elem__6vectorXTi__Fi
-vector<int>::elem(int)
-vector<int>::elem
-#
---format=hp --no-params
-__ct__6vectorXTd__Fi
-vector<double>::vector(int)
-vector<double>::vector
-#
---format=hp --no-params
-__ct__6vectorXTi__Fi
-vector<int>::vector(int)
-vector<int>::vector
-#
---format=hp --no-params
-__ct__9DListNodeXTR6RLabel__FR6RLabelP9DListNodeXTR6RLabel_T2
-DListNode<RLabel &>::DListNode(RLabel &, DListNode<RLabel &> *, DListNode<RLabel &> *)
-DListNode<RLabel &>::DListNode
-#
---format=hp --no-params
-elem__6vectorXTiUP34__Fi
-vector<int,34U>::elem(int)
-vector<int,34U>::elem
-#
---format=hp --no-params
-elem__6vectorXUP2701Td__Fi
-vector<2701U,double>::elem(int)
-vector<2701U,double>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSP334__Fi
-vector<int,334>::elem(int)
-vector<int,334>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSN67__Fi
-vector<int,-67>::elem(int)
-vector<int,-67>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSM__SCFPPd
-vector<int,-2147483648>::elem(double **) static const
-vector<int,-2147483648>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSN67UP4000TRs__Fi
-vector<int,-67,4000U,short &>::elem(int)
-vector<int,-67,4000U,short &>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSN67TRdTFPv_i__Fi
-vector<int,-67,double &,int (void *)>::elem(int)
-vector<int,-67,double &,int (void *)>::elem
-#
---format=hp --no-params
-X__6vectorXTiSN67TdTPvUP5TRs
-vector<int,-67,double,void *,5U,short &>::X
-vector<int,-67,double,void *,5U,short &>::X
-#
---format=hp --no-params
-elem__6vectorXTiA3foo__Fi
-vector<int,&foo>::elem(int)
-vector<int,&foo>::elem
-#
---format=hp --no-params
-elem__6vectorXTiA3fooTPvA5Label__FiPPvT2
-vector<int,&foo,void *,&Label>::elem(int, void **, void **)
-vector<int,&foo,void *,&Label>::elem
-#
---format=hp --no-params
-elem__6vectorXTiSN42A3foo__Fi
-vector<int,-42,&foo>::elem(int)
-vector<int,-42,&foo>::elem
-#
---format=hp --no-params
-__ct__2T5XTPFcPv_i__Fi_2
-T5<int (*)(char, void *)>::T5(int)
-T5<int (*)(char, void *)>::T5
-#
---format=hp --no-params
-__ct__2T5XTPFcPv_i__Fi_19
-T5<int (*)(char, void *)>::T5(int)
-T5<int (*)(char, void *)>::T5
-#
---format=hp --no-params
-f__FicdPcPFci_v_34
-f(int, char, double, char *, void (*)(char, int))
-f
-#
---format=hp --no-params
-spec__13Spec<#1,#1.*>XTiTPi_FPi
-Spec<int,int *>::spec(int *)
-Spec<int,int *>::spec
-#
---format=hp --no-params
-spec__16Spec<#1,#1.&,#1>XTiTRiTi_FPi
-Spec<int,int &,int>::spec(int *)
-Spec<int,int &,int>::spec
-#
---format=hp --no-params
-add__XTc_FcT1
-add<char>(char, char)
-add<char>
-#
---format=hp --no-params
-add__XTcSP9A5label_FcPPlT1
-add<char,9,&label>(char, long **, char)
-add<char,9,&label>
-#
---format=hp --no-params
-add__XTPfTFPd_f_FcT1
-add<float *,float (double *)>(char, char)
-add<float *,float (double *)>
-#
---format=hp --no-params
-unLink__12basic_stringXTcT18string_char_traitsXTc_T9allocator_Fv
-basic_string<char,string_char_traits<char>,allocator>::unLink(void)
-basic_string<char,string_char_traits<char>,allocator>::unLink
-#
-# A regression test with no args. This used to cause a segv.
-
-_Utf390_1__1_9223372036854775807__9223372036854775
-_Utf390_1__1_9223372036854775807__9223372036854775
-#
---format=gnu --no-params
-call__H1Z4Test_RX01_t1C2ZX01PMX01FPX01i_vQ2X016output
-C<Test, Test::output> call<Test>(Test &)
-C<Test, Test::output> call<Test>
-#
---format=gnu --no-params
-fn__FPQ21n1cPMQ21n1cFPQ21n1c_i
-fn(n::c *, int (n::c::*)(n::c *))
-fn
-#
---format=gnu --no-params
-f__FGt3Bar1i2G1i
-f(Bar<2>, i)
-f
-#
---format=gnu --no-params
-f__FGt3Bar1i21i
-f(Bar<21>, int)
-f
-#
---format=gnu --no-params
-f__FGt3Bar1i2G4XY_t
-f(Bar<2>, XY_t)
-f
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZRCiZt2NA1Ui9_X01_i
-int foo<TA<int const &, NA<9> > >(TA<int const &, NA<9> >)
-int foo<TA<int const &, NA<9> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZcZt2NA1Ui20_X01_i
-int foo<TA<char, NA<20> > >(TA<char, NA<20> >)
-int foo<TA<char, NA<20> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZiZt8N___A___1Ui99_X01_i
-int foo<TA<int, N___A___<99> > >(TA<int, N___A___<99> >)
-int foo<TA<int, N___A___<99> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZRCiZt2NA1im1_X01_i
-int foo<TA<int const &, NA<-1> > >(TA<int const &, NA<-1> >)
-int foo<TA<int const &, NA<-1> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZRCiZt2NA1im9_X01_i
-int foo<TA<int const &, NA<-9> > >(TA<int const &, NA<-9> >)
-int foo<TA<int const &, NA<-9> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZcZt2NA1i_m20__X01_i
-int foo<TA<char, NA<-20> > >(TA<char, NA<-20> >)
-int foo<TA<char, NA<-20> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZcZt2NA1im1_X01_i
-int foo<TA<char, NA<-1> > >(TA<char, NA<-1> >)
-int foo<TA<char, NA<-1> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZiZt4N__A1im9_X01_i
-int foo<TA<int, N__A<-9> > >(TA<int, N__A<-9> >)
-int foo<TA<int, N__A<-9> > >
-#
---format=gnu --no-params
-foo__H1Zt2TA2ZiZt4N__A1i_m99__X01_i
-int foo<TA<int, N__A<-99> > >(TA<int, N__A<-99> >)
-int foo<TA<int, N__A<-99> > >
-#
---format=gnu --no-params
-__opi__t2TA2ZiZt4N__A1i9
-TA<int, N__A<9> >::operator int(void)
-TA<int, N__A<9> >::operator int
-#
---format=gnu --no-params
-__opi__t2TA2ZiZt8N___A___1i_m99_
-TA<int, N___A___<-99> >::operator int(void)
-TA<int, N___A___<-99> >::operator int
-#
---format=gnu --no-params
-foo___bar__baz_____H1Zt2TA2ZiZt8N___A___1i99_X01_i
-int foo___bar__baz___<TA<int, N___A___<99> > >(TA<int, N___A___<99> >)
-int foo___bar__baz___<TA<int, N___A___<99> > >
-#
---format=gnu --no-params
-foo__bar___foobar_____t2TA2ZiZt8N___A___1i_m99_
-TA<int, N___A___<-99> >::foo__bar___foobar___(void)
-TA<int, N___A___<-99> >::foo__bar___foobar___
-#
---format=gnu --no-params
-foo__bar___foobar_____t2TA2ZiZt4N__A1i9
-TA<int, N__A<9> >::foo__bar___foobar___(void)
-TA<int, N__A<9> >::foo__bar___foobar___
-#
---format=gnu --no-params
-__tfP8sockaddr
-sockaddr * type_info function
-sockaddr * type_info function
-#
---format=gnu --no-params
-__tfPQ25libcwt16option_event_tct1Z12burst_app_ct
-libcw::option_event_tct<burst_app_ct> * type_info function
-libcw::option_event_tct<burst_app_ct> * type_info function
-#
---format=gnu --no-params
-__tiP8sockaddr
-sockaddr * type_info node
-sockaddr * type_info node
-#
---format=gnu --no-params
-__tiPQ25libcwt16option_event_tct1Z12burst_app_ct
-libcw::option_event_tct<burst_app_ct> * type_info node
-libcw::option_event_tct<burst_app_ct> * type_info node
-#
---format=gnu --no-params
-_27_GLOBAL_.N.__12burst_app_ct.app_instance
-{anonymous}::app_instance
-{anonymous}::app_instance
-#
---format=gnu --no-params
-_26_GLOBAL_$N$_tmp_n.iilg4Gya$app_instance
-{anonymous}::app_instance
-{anonymous}::app_instance
-#
---format=gnu-v3 --no-params
-_Z3fo5n
-fo5(__int128)
-fo5
-#
---format=gnu-v3 --no-params
-_Z3fo5o
-fo5(unsigned __int128)
-fo5
-#
---format=java
-_ZN4java3awt10ScrollPane7addImplEPNS0_9ComponentEPNS_4lang6ObjectEi
-java.awt.ScrollPane.addImpl(java.awt.Component, java.lang.Object, int)
-#
---format=java
-_ZN4java3awt4geom15AffineTransform9getMatrixEP6JArrayIdE
-java.awt.geom.AffineTransform.getMatrix(double[])
-#
---format=java
-_ZN23Mangle$Inner$InnerInner3fooEP6JArrayIPS0_IiEEdPS0_IPS0_IPS0_IPS0_IPN4java4lang6StringEEEEEPS0_IPS0_IPN6MangleEEE
-Mangle$Inner$InnerInner.foo(int[][], double, java.lang.String[][][][], Mangle[][])
-#
---format=java
-_ZN6JArray1tEP6JArrayIPS_E
-JArray.t(JArray[])
-#
---format=java
-_ZN4Prim1iEibcdfwPN4java4lang6StringEsx
-Prim.i(int, boolean, byte, double, float, char, java.lang.String, short, long)
-#
---format=java
-_ZN4java4util14Map__U24_Entry11class__U24_E
-java.util.Map$Entry.class$
-#
---format=java
-_ZN3org7eclipse3cdt5debug8internal4core5model9CVariable6sizeof$Ev
-org.eclipse.cdt.debug.internal.core.model.CVariable.sizeof()
-#
---format=hp --no-params
-_Utf58_0_1__1_2147483647__2147483648
-_Utf58_0_1__1_2147483647__2147483648
-_Utf58_0_1__1_2147483647__2147483648
-#
---format=gnu-v3 --no-params
-St9bad_alloc
-std::bad_alloc
-std::bad_alloc
-#
---format=gnu-v3 --no-params
-_ZN1f1fE
-f::f
-f::f
-#
---format=gnu-v3 --no-params
-_Z1fv
-f()
-f
-#
---format=gnu-v3 --no-params
-_Z1fi
-f(int)
-f
-#
---format=gnu-v3 --no-params
-_Z3foo3bar
-foo(bar)
-foo
-#
---format=gnu-v3 --no-params
-_Zrm1XS_
-operator%(X, X)
-operator%
-#
---format=gnu-v3 --no-params
-_ZplR1XS0_
-operator+(X&, X&)
-operator+
-#
---format=gnu-v3 --no-params
-_ZlsRK1XS1_
-operator<<(X const&, X const&)
-operator<<
-#
---format=gnu-v3 --no-params
-_ZN3FooIA4_iE3barE
-Foo<int [4]>::bar
-Foo<int [4]>::bar
-#
---format=gnu-v3 --no-params
-_Z1fIiEvi
-void f<int>(int)
-f<int>
-#
---format=gnu-v3 --no-params
-_Z5firstI3DuoEvS0_
-void first<Duo>(Duo)
-first<Duo>
-#
---format=gnu-v3 --no-params
-_Z5firstI3DuoEvT_
-void first<Duo>(Duo)
-first<Duo>
-#
---format=gnu-v3 --no-params
-_Z3fooIiFvdEiEvv
-void foo<int, void (double), int>()
-foo<int, void (double), int>
-#
---format=gnu-v3 --no-params
-_Z1fIFvvEEvv
-void f<void ()>()
-f<void ()>
-#
---format=gnu-v3 --no-params
-_ZN1N1fE
-N::f
-N::f
-#
---format=gnu-v3 --no-params
-_ZN6System5Sound4beepEv
-System::Sound::beep()
-System::Sound::beep
-#
---format=gnu-v3 --no-params
-_ZN5Arena5levelE
-Arena::level
-Arena::level
-#
---format=gnu-v3 --no-params
-_ZN5StackIiiE5levelE
-Stack<int, int>::level
-Stack<int, int>::level
-#
---format=gnu-v3 --no-params
-_Z1fI1XEvPVN1AIT_E1TE
-void f<X>(A<X>::T volatile*)
-f<X>
-#
---format=gnu-v3 --no-params
-_ZngILi42EEvN1AIXplT_Li2EEE1TE
-void operator-<42>(A<(42)+(2)>::T)
-operator-<42>
-#
---format=gnu-v3 --no-params
-_Z4makeI7FactoryiET_IT0_Ev
-Factory<int> make<Factory, int>()
-make<Factory, int>
-#
---format=gnu-v3 --no-params
-_Z4makeI7FactoryiET_IT0_Ev
-Factory<int> make<Factory, int>()
-make<Factory, int>
-#
---format=gnu-v3 --no-params
-_Z3foo5Hello5WorldS0_S_
-foo(Hello, World, World, Hello)
-foo
-#
---format=gnu-v3 --no-params
-_Z3fooPM2ABi
-foo(int AB::**)
-foo
-#
---format=gnu-v3 --no-params
-_ZlsRSoRKSs
-operator<<(std::ostream&, std::string const&)
-operator<<
-#
---format=gnu-v3 --no-params
-_ZTI7a_class
-typeinfo for a_class
-typeinfo for a_class
-#
---format=gnu-v3 --no-params
-U4_farrVKPi
-int* const volatile restrict _far
-int* const volatile restrict _far
-#
---format=gnu-v3 --no-params
-_Z3fooILi2EEvRAplT_Li1E_i
-void foo<2>(int (&) [(2)+(1)])
-foo<2>
-#
---format=gnu-v3 --no-params
-_Z1fM1AKFvvE
-f(void (A::*)() const)
-f
-#
---format=gnu-v3 --no-params
-_Z3fooc
-foo(char)
-foo
-#
---format=gnu-v3 --no-params
-_Z2f0u8char16_t
-f0(char16_t)
-f0
-#
---format=gnu-v3 --no-params
-_Z2f0Pu8char16_t
-f0(char16_t*)
-f0
-#
---format=gnu-v3 --no-params
-_Z2f0u8char32_t
-f0(char32_t)
-f0
-#
---format=gnu-v3 --no-params
-_Z2f0Pu8char32_t
-f0(char32_t*)
-f0
-#
---format=gnu-v3 --no-params
-2CBIL_Z3foocEE
-CB<foo(char)>
-CB<foo(char)>
-#
---format=gnu-v3 --no-params
-2CBIL_Z7IsEmptyEE
-CB<IsEmpty>
-CB<IsEmpty>
-#
---format=gnu-v3 --no-params
-_ZZN1N1fEiE1p
-N::f(int)::p
-N::f(int)::p
-#
---format=gnu-v3 --no-params
-_ZZN1N1fEiEs
-N::f(int)::string literal
-N::f(int)::string literal
-#
---format=gnu-v3 --no-params
-_Z1fPFvvEM1SFvvE
-f(void (*)(), void (S::*)())
-f
-#
---format=gnu-v3 --no-params
-_ZN1N1TIiiE2mfES0_IddE
-N::T<int, int>::mf(N::T<double, double>)
-N::T<int, int>::mf
-#
---format=gnu-v3 --no-params
-_ZSt5state
-std::state
-std::state
-#
---format=gnu-v3 --no-params
-_ZNSt3_In4wardE
-std::_In::ward
-std::_In::ward
-#
---format=gnu-v3 --no-params
-_Z1fKPFiiE
-f(int (* const)(int))
-f
-#
---format=gnu-v3 --no-params
-_Z1fAszL_ZZNK1N1A1fEvE3foo_0E_i
-f(int [sizeof (N::A::f() const::foo)])
-f
-#
---format=gnu-v3 --no-params
-_Z1fA37_iPS_
-f(int [37], int (*) [37])
-f
-#
---format=gnu-v3 --no-params
-_Z1fM1AFivEPS0_
-f(int (A::*)(), int (*)())
-f
-#
---format=gnu-v3 --no-params
-_Z1fPFPA1_ivE
-f(int (*(*)()) [1])
-f
-#
---format=gnu-v3 --no-params
-_Z1fPKM1AFivE
-f(int (A::* const*)())
-f
-#
---format=gnu-v3 --no-params
-_Z1jM1AFivEPS1_
-j(int (A::*)(), int (A::**)())
-j
-#
---format=gnu-v3 --no-params
-_Z1sPA37_iPS0_
-s(int (*) [37], int (**) [37])
-s
-#
---format=gnu-v3 --no-params
-_Z3fooA30_A_i
-foo(int [30][])
-foo
-#
---format=gnu-v3 --no-params
-_Z3kooPA28_A30_i
-koo(int (*) [28][30])
-koo
-#
---format=gnu-v3 --no-params
-_ZlsRKU3fooU4bart1XS0_
-operator<<(X bart foo const&, X bart)
-operator<<
-#
---format=gnu-v3 --no-params
-_ZlsRKU3fooU4bart1XS2_
-operator<<(X bart foo const&, X bart foo const)
-operator<<
-#
---format=gnu-v3 --no-params
-_Z1fM1AKFivE
-f(int (A::*)() const)
-f
-#
---format=gnu-v3 --no-params
-_Z3absILi11EEvv
-void abs<11>()
-abs<11>
-#
---format=gnu-v3 --no-params
-_ZN1AIfEcvT_IiEEv
-A<float>::operator int<int>()
-A<float>::operator int<int>
-#
---format=gnu-v3 --no-params
-_ZN12libcw_app_ct10add_optionIS_EEvMT_FvPKcES3_cS3_S3_
-void libcw_app_ct::add_option<libcw_app_ct>(void (libcw_app_ct::*)(char const*), char const*, char, char const*, char const*)
-libcw_app_ct::add_option<libcw_app_ct>
-#
---format=gnu-v3 --no-params
-_ZGVN5libcw24_GLOBAL__N_cbll.cc0ZhUKa23compiler_bug_workaroundISt6vectorINS_13omanip_id_tctINS_5debug32memblk_types_manipulator_data_ctEEESaIS6_EEE3idsE
-guard variable for libcw::(anonymous namespace)::compiler_bug_workaround<std::vector<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct>, std::allocator<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct> > > >::ids
-guard variable for libcw::(anonymous namespace)::compiler_bug_workaround<std::vector<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct>, std::allocator<libcw::omanip_id_tct<libcw::debug::memblk_types_manipulator_data_ct> > > >::ids
-#
---format=gnu-v3 --no-params
-_ZN5libcw5debug13cwprint_usingINS_9_private_12GlobalObjectEEENS0_17cwprint_using_tctIT_EERKS5_MS5_KFvRSt7ostreamE
-libcw::debug::cwprint_using_tct<libcw::_private_::GlobalObject> libcw::debug::cwprint_using<libcw::_private_::GlobalObject>(libcw::_private_::GlobalObject const&, void (libcw::_private_::GlobalObject::*)(std::ostream&) const)
-libcw::debug::cwprint_using<libcw::_private_::GlobalObject>
-#
---format=gnu-v3 --no-params
-_ZNKSt14priority_queueIP27timer_event_request_base_ctSt5dequeIS1_SaIS1_EE13timer_greaterE3topEv
-std::priority_queue<timer_event_request_base_ct*, std::deque<timer_event_request_base_ct*, std::allocator<timer_event_request_base_ct*> >, timer_greater>::top() const
-std::priority_queue<timer_event_request_base_ct*, std::deque<timer_event_request_base_ct*, std::allocator<timer_event_request_base_ct*> >, timer_greater>::top
-#
---format=gnu-v3 --no-params
-_ZNKSt15_Deque_iteratorIP15memory_block_stRKS1_PS2_EeqERKS5_
-std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*>::operator==(std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*> const&) const
-std::_Deque_iterator<memory_block_st*, memory_block_st* const&, memory_block_st* const*>::operator==
-#
---format=gnu-v3 --no-params
-_ZNKSt17__normal_iteratorIPK6optionSt6vectorIS0_SaIS0_EEEmiERKS6_
-std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > >::operator-(std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > > const&) const
-std::__normal_iterator<option const*, std::vector<option, std::allocator<option> > >::operator-
-#
---format=gnu-v3 --no-params
-_ZNSbIcSt11char_traitsIcEN5libcw5debug27no_alloc_checking_allocatorEE12_S_constructIPcEES6_T_S7_RKS3_
-char* std::basic_string<char, std::char_traits<char>, libcw::debug::no_alloc_checking_allocator>::_S_construct<char*>(char*, char*, libcw::debug::no_alloc_checking_allocator const&)
-std::basic_string<char, std::char_traits<char>, libcw::debug::no_alloc_checking_allocator>::_S_construct<char*>
-#
---format=gnu-v3 --no-params
-_Z1fI1APS0_PKS0_EvT_T0_T1_PA4_S3_M1CS8_
-void f<A, A*, A const*>(A, A*, A const*, A const* (*) [4], A const* (* C::*) [4])
-f<A, A*, A const*>
-#
---format=gnu-v3 --no-params
-_Z3fooiPiPS_PS0_PS1_PS2_PS3_PS4_PS5_PS6_PS7_PS8_PS9_PSA_PSB_PSC_
-foo(int, int*, int**, int***, int****, int*****, int******, int*******, int********, int*********, int**********, int***********, int************, int*************, int**************, int***************)
-foo
-#
---format=gnu-v3 --no-params
-_ZSt1BISt1DIP1ARKS2_PS3_ES0_IS2_RS2_PS2_ES2_ET0_T_SB_SA_PT1_
-std::D<A*, A*&, A**> std::B<std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A*>(std::D<A*, A* const&, A* const*>, std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A**)
-std::B<std::D<A*, A* const&, A* const*>, std::D<A*, A*&, A**>, A*>
-#
---format=gnu-v3 --no-params
-_X11TransParseAddress
-_X11TransParseAddress
-_X11TransParseAddress
-#
---format=gnu-v3 --no-params
-_ZNSt13_Alloc_traitsISbIcSt18string_char_traitsIcEN5libcw5debug9_private_17allocator_adaptorIcSt24__default_alloc_templateILb0ELi327664EELb1EEEENS5_IS9_S7_Lb1EEEE15_S_instancelessE
-std::_Alloc_traits<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, libcw::debug::_private_::allocator_adaptor<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, std::__default_alloc_template<false, 327664>, true> >::_S_instanceless
-std::_Alloc_traits<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, libcw::debug::_private_::allocator_adaptor<std::basic_string<char, std::string_char_traits<char>, libcw::debug::_private_::allocator_adaptor<char, std::__default_alloc_template<false, 327664>, true> >, std::__default_alloc_template<false, 327664>, true> >::_S_instanceless
-#
---format=gnu-v3 --no-params
-_GLOBAL__I__Z2fnv
-global constructors keyed to fn()
-global constructors keyed to fn()
-#
---format=gnu-v3 --no-params
-_Z1rM1GFivEMS_KFivES_M1HFivES1_4whatIKS_E5what2IS8_ES3_
-r(int (G::*)(), int (G::*)() const, G, int (H::*)(), int (G::*)(), what<G const>, what2<G const>, int (G::*)() const)
-r
-#
-# This is from the gdb testsuite gdb.cp/cplusfuncs.exp.
---format=gnu-v3 --no-params
-_Z10hairyfunc5PFPFilEPcE
-hairyfunc5(int (*(*)(char*))(long))
-hairyfunc5
-#
-# This is from gcc PR 8861
---format=gnu-v3 --no-params
-_Z1fILi1ELc120EEv1AIXplT_cviLd810000000000000000703DAD7A370C5EEE
-void f<1, (char)120>(A<(1)+((int)((double)[810000000000000000703DAD7A370C5]))>)
-f<1, (char)120>
-#
-# This is also from gcc PR 8861
---format=gnu-v3 --no-params
-_Z1fILi1EEv1AIXplT_cvingLf3f800000EEE
-void f<1>(A<(1)+((int)(-((float)[3f800000])))>)
-f<1>
-#
-# This is from a libstdc++ debug mode patch.
---format=gnu-v3 --no-params
-_ZNK11__gnu_debug16_Error_formatter14_M_format_wordImEEvPciPKcT_
-void __gnu_debug::_Error_formatter::_M_format_word<unsigned long>(char*, int, char const*, unsigned long) const
-__gnu_debug::_Error_formatter::_M_format_word<unsigned long>
-#
-# The new demangler used to core dump on this.
---format=gnu-v3 --no-params
-_ZSt18uninitialized_copyIN9__gnu_cxx17__normal_iteratorIPSt4pairISsPFbP6sqlitePPcEESt6vectorIS9_SaIS9_EEEESE_ET0_T_SG_SF_
-__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > std::uninitialized_copy<__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > >(__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >)
-std::uninitialized_copy<__gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > >, __gnu_cxx::__normal_iterator<std::pair<std::string, bool (*)(sqlite*, char**)>*, std::vector<std::pair<std::string, bool (*)(sqlite*, char**)>, std::allocator<std::pair<std::string, bool (*)(sqlite*, char**)> > > > >
-#
-# The new demangler used to fail on this.
---format=gnu-v3 --no-params
-_Z1fP1cIPFiiEE
-f(c<int (*)(int)>*)
-f
-#
-# Wrap expressions using '>' in an extra layer of parens to avoid
-# confusion with the '>' which ends the template parameters.
---format=gnu-v3 --no-params
-_Z4dep9ILi3EEvP3fooIXgtT_Li2EEE
-void dep9<3>(foo<((3)>(2))>*)
-dep9<3>
-#
-# Watch out for templated version of `operator<'--it needs an extra
-# space.
---format=gnu-v3 --no-params
-_ZStltI9file_pathSsEbRKSt4pairIT_T0_ES6_
-bool std::operator< <file_path, std::string>(std::pair<file_path, std::string> const&, std::pair<file_path, std::string> const&)
-std::operator< <file_path, std::string>
-#
-# More hairy qualifier handling.
---format=gnu-v3 --no-params
-_Z9hairyfuncM1YKFPVPFrPA2_PM1XKFKPA3_ilEPcEiE
-hairyfunc(int (* const (X::** (* restrict (* volatile* (Y::*)(int) const)(char*)) [2])(long) const) [3])
-hairyfunc
-#
-# Check that negative numbers are handled correctly.
---format=gnu-v3 --no-params
-_Z1fILin1EEvv
-void f<-1>()
-f<-1>
-#
-# Check a destructor of a standard substitution.
---format=gnu-v3 --no-params
-_ZNSdD0Ev
-std::basic_iostream<char, std::char_traits<char> >::~basic_iostream()
-std::basic_iostream<char, std::char_traits<char> >::~basic_iostream
-#
-# Another case where we got member function qualifiers wrong.
---format=gnu-v3 --no-params
-_ZNK15nsBaseHashtableI15nsUint32HashKey8nsCOMPtrI4IFooEPS2_E13EnumerateReadEPF15PLDHashOperatorRKjS4_PvES9_
-nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead(PLDHashOperator (*)(unsigned int const&, IFoo*, void*), void*) const
-nsBaseHashtable<nsUint32HashKey, nsCOMPtr<IFoo>, IFoo*>::EnumerateRead
-#
-# Another member function qualifier test case, when the member function
-# returns a pointer to function.
---format=gnu-v3 --no-params
-_ZNK1C1fIiEEPFivEv
-int (*C::f<int>() const)()
-C::f<int>
-#
-# Another case where we got member function qualifiers wrong.
---format=gnu-v3 --no-params
-_ZZ3BBdI3FooEvvENK3Fob3FabEv
-void BBd<Foo>()::Fob::Fab() const
-void BBd<Foo>()::Fob::Fab
-#
-# The same idea one level deeper.
---format=gnu-v3 --no-params
-_ZZZ3BBdI3FooEvvENK3Fob3FabEvENK3Gob3GabEv
-void BBd<Foo>()::Fob::Fab() const::Gob::Gab() const
-void BBd<Foo>()::Fob::Fab() const::Gob::Gab
-#
-# Yet another member function qualifier problem.
---format=gnu-v3 --no-params
-_ZNK5boost6spirit5matchI13rcs_deltatextEcvMNS0_4impl5dummyEFvvEEv
-boost::spirit::match<rcs_deltatext>::operator void (boost::spirit::impl::dummy::*)()() const
-boost::spirit::match<rcs_deltatext>::operator void (boost::spirit::impl::dummy::*)()
-#
-# Multi-dimensional arrays with qualifiers on the inner dimensions.
---format=gnu-v3 --no-params
-_Z3fooIA6_KiEvA9_KT_rVPrS4_
-void foo<int const [6]>(int const [9][6], int restrict const (* volatile restrict) [9][6])
-foo<int const [6]>
-#
-# From PR libstdc++/12736
---format=gnu-v3 --no-params
-_Z3fooIA3_iEvRKT_
-void foo<int [3]>(int const (&) [3])
-foo<int [3]>
-#
-# Related to PR libstdc++/12736
---format=gnu-v3 --no-params
-_Z3fooIPA3_iEvRKT_
-void foo<int (*) [3]>(int (* const&) [3])
-foo<int (*) [3]>
-#
-# This used to crash the demangler--PR 16240
---format=gnu-v3 --no-params
-_ZN13PatternDriver23StringScalarDeleteValueC1ERKNS_25ConflateStringScalarValueERKNS_25AbstractStringScalarValueERKNS_12TemplateEnumINS_12pdcomplementELZNS_16complement_namesEELZNS_14COMPLEMENTENUMEEEE
-PatternDriver::StringScalarDeleteValue::StringScalarDeleteValue(PatternDriver::ConflateStringScalarValue const&, PatternDriver::AbstractStringScalarValue const&, PatternDriver::TemplateEnum<PatternDriver::pdcomplement, PatternDriver::complement_names, PatternDriver::COMPLEMENTENUM> const&)
-PatternDriver::StringScalarDeleteValue::StringScalarDeleteValue
-#
-# This used to cause the demangler to walk into undefined memory--PR 22268
---format=gnu-v3 --no-params
-ALsetchannels
-ALsetchannels
-ALsetchannels
-# Test GNU V3 constructor and destructor identification.
-# 0 means it is not a constructor/destructor.
-# Other integers correspond to enum gnu_v3_{c,d}tor_kinds in demangle.h.
---is-v3-ctor
-_GLOBAL__I__Z2fnv
-0
-#
---is-v3-dtor
-_GLOBAL__I__Z2fnv
-0
-#
---is-v3-ctor
-_ZNSdC1Ev
-1
-#
---is-v3-dtor
-_ZNSdC1Ev
-0
-#
---is-v3-ctor
-_ZNSdD0Ev
-0
-#
---is-v3-dtor
-_ZNSdD0Ev
-1
-#
---is-v3-ctor
-_ZNSdC2Ev
-2
-#
---is-v3-dtor
-_ZNSdC2Ev
-0
-#
---is-v3-ctor
-_ZNSdD1Ev
-0
-#
---is-v3-dtor
-_ZNSdD1Ev
-2
-#
-# This caused an infinite loop.
-#
-# This is generated by an EDG compiler (kcc 4.0). To demangle it
-# correctly, I believe that we have to understand that the J37J deep
-# in the string somehow refers back to the type starting 37 characters
-# in from some starting point, so that it winds up being the type
-# starting with 41THandle.... However, lacking a spec for EDG
-# demangling, it's hard to implement this.
-#
-# In the meantime, this symbol can be successfully demangled in GNU
-# mode. Of course the result is more or less nonsense, but an older
-# version of g++ would indeed generate this mangled name given the
-# appropriate input, so the demangling is correct.
---format=auto --no-params
-__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm__7_Z1ZZ2Z8iterator
-_Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm(iterator)
-_Z1ZZ2Z::__CPR212____ct__Q3_3std141list__tm__128_Q2_3edm41THandle__tm__26_Q2_4emid15EMparticleChunkQ2_3std68allocator__tm__51_Q2_3edmJ37J14const_iteratorFRCQ3_3std18list__tm
-#
-# This used to cause a crash. It doesn't follow the C++ encoding so
-# the demangled name should be identical to the original symbol name.
---format=auto --no-params
-_test_array__L_1__B23b___clean.6
-_test_array__L_1__B23b___clean.6
-_test_array__L_1__B23b___clean.6
-#
---format=java
-_ZGAN4java4lang5Class7forNameEPNS0_6StringE
-hidden alias for java.lang.Class.forName(java.lang.String)
-#
-# Test cases to verify encoding that determines if a return type is present
-# Related to PR9861
---format=java
-_ZN4java4lang4Math4acosEJdd
-java.lang.Math.acos(double)double
-#
---format=auto
-_ZN4java4lang4Math4acosEJdd
-double java::lang::Math::acos(double)
-#
---format=auto
-_ZN4java4lang4Math4acosEJvd
-void java::lang::Math::acos(double)
-#
---format=auto --ret-postfix
-_ZN4java4lang4Math4acosEJdd
-java::lang::Math::acos(double)double
-#
---format=gnu-v3 --no-params --ret-postfix
-_Z4makeI7FactoryiET_IT0_Ev
-make<Factory, int>()Factory<int>
-make<Factory, int>
-#
-# From PR 28797
---format=auto --no-params
-_Z1fM1AKiPKS1_
-f(int const A::*, int const A::* const*)
-f
-# This used to cause a core dump in the demangler -- PR 29176
---format=auto --no-params
-SASDASDFASDF_sdfsdf
-SASDASDFASDF_sdfsdf
-SASDASDFASDF_sdfsdf
-# These are all cases of invalid manglings where the demangler would read
-# past the end of the string.
-# d_name wasn't honouring a NULL from d_substitution
---format=gnu-v3
-_ZSA
-_ZSA
-# d_expr_primary wasn't honouring NULL from cplus_demangle_mangled_name
---format=gnu-v3
-_ZN1fIL_
-_ZN1fIL_
-# d_operator_name was taking two characters in a row
---format=gnu-v3
-_Za
-_Za
-# d_prefix wasn't honouring NULL from d_substitution
---format=gnu-v3
-_ZNSA
-_ZNSA
-# d_prefix wasn't honouring NULL from d_template_param
---format=gnu-v3
-_ZNT
-_ZNT
-# Dereferencing NULL in d_pointer_to_member_type
---format=gnu-v3
-_Z1aMark
-_Z1aMark
-# <local-source-name> test 1
---format=gnu-v3
-_ZL3foo_2
-foo
-# <local-source-name> test 2
---format=gnu-v3
-_ZZL3foo_2vE4var1
-foo()::var1
-# <local-source-name> test 3
---format=gnu-v3
-_ZZL3foo_2vE4var1_0
-foo()::var1
-# <local-source-name> test 4
---format=gnu-v3
-_ZZN7myspaceL3foo_1EvEN11localstruct1fEZNS_3fooEvE16otherlocalstruct
-myspace::foo()::localstruct::f(myspace::foo()::otherlocalstruct)
-# Java resource name
---format=gnu-v3
-_ZGr32_java$Sutil$Siso4217$_properties
-java resource java/util/iso4217.properties
-# decltype/param placeholder test
---format=gnu-v3
-_Z3addIidEDTplfp_fp0_ET_T0_
-decltype ({parm#1}+{parm#2}) add<int, double>(int, double)
-# decltype scope test
---format=gnu-v3
-_Z1fI1SENDtfp_E4typeET_
-decltype ({parm#1})::type f<S>(S)
-# decltype/fn call test
---format=gnu-v3
-_Z4add3IidEDTclL_Z1gEfp_fp0_EET_T0_
-decltype (g({parm#1}, {parm#2})) add3<int, double>(int, double)
-# 'this' test
---format=gnu-v3
-_ZN1A1fIiEEDTcldtdtdefpT1b1fIT_EEEv
-decltype ((((*this).b).(f<int>))()) A::f<int>()
-# new (2008) built in types test
---format=gnu-v3
-_Z1fDfDdDeDhDsDi
-f(decimal32, decimal64, decimal128, half, char16_t, char32_t)
-# pack expansion test
---format=gnu-v3
-_Z1fIIPiPfPdEEvDpT_
-void f<int*, float*, double*>(int*, float*, double*)
-# '.' test
---format=gnu-v3
-_Z1hI1AIiEdEDTcldtfp_1gIT0_EEET_S2_
-decltype (({parm#1}.(g<double>))()) h<A<int>, double>(A<int>, double)
-# test for typed function in decltype
---format=gnu-v3
-_ZN1AIiE1jIiEEDTplfp_clL_Z1xvEEET_
-decltype ({parm#1}+(x())) A<int>::j<int>(int)
-# typed function in decltype with an argument list
---format=gnu-v3
-_Z1tIlEDTplcvT_Li5EclL_Z1qsELi6EEEv
-decltype (((long)(5))+(q(6))) t<long>()
-# test for expansion of function parameter pack
---format=gnu-v3
-_Z1gIJidEEDTclL_Z1fEspplfp_Li1EEEDpT_
-decltype (f(({parm#1}+(1))...)) g<int, double>(int, double)
-# lambda tests
---format=gnu-v3
-_ZZ1giENKUlvE_clEv
-g(int)::{lambda()#1}::operator()() const
---format=gnu-v3
-_Z4algoIZ1giEUlvE0_EiT_
-int algo<g(int)::{lambda()#2}>(g(int)::{lambda()#2})
---format=gnu-v3
-_ZZN1S1fEiiEd0_NKUlvE0_clEv
-S::f(int, int)::{default arg#2}::{lambda()#2}::operator()() const
---format=gnu-v3
-_ZNK1SIiE1xMUlvE1_clEv
-S<int>::x::{lambda()#3}::operator()() const
---format=gnu-v3
-_Z1fN1SUt_E
-f(S::{unnamed type#1})
---format=gnu-v3
-_Z1fDv32_f
-f(float __vector(32))
---format=gnu-v3
-_Z1fIfLi4EEvDv_T0__T_
-void f<float, 4>(float __vector(4))
---format=gnu-v3
-_Z1fI1AEDTclonplfp_fp_EET_
-decltype ((operator+)({parm#1}, {parm#1})) f<A>(A)
---format=gnu-v3
-_Z1hI1AEDTcldtfp_miEET_
-decltype (({parm#1}.(operator-))()) h<A>(A)
---format=gnu-v3
-_Z1fDn
-f(decltype(nullptr))
---format=gnu-v3
-_Z1fIRiEvOT_b
-void f<int&>(int&, bool)
---format=gnu-v3
-_ZN5aaaaa6bbbbbb5cccccIN23ddddddddddddddddddddddd3eeeENS2_4ffff16ggggggggggggggggENS0_9hhhhhhhhhES6_S6_S6_S6_S6_S6_S6_EE
-aaaaa::bbbbbb::ccccc<ddddddddddddddddddddddd::eee, ddddddddddddddddddddddd::ffff::gggggggggggggggg, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh, aaaaa::bbbbbb::hhhhhhhhh>
---format=gnu-v3
-_Z5outerIsEcPFilE
-char outer<short>(int (*)(long))
---format=gnu-v3
-_Z5outerPFsiEl
-outer(short (*)(int), long)
---format=gnu-v3
-_Z6outer2IsEPFilES1_
-int (*outer2<short>(int (*)(long)))(long)
---format=gnu-v3 --ret-postfix
-_Z5outerIsEcPFilE
-outer<short>(int (*)(long))char
---format=gnu-v3 --ret-postfix
-_Z5outerPFsiEl
-outer(short (*)(int), long)
---format=gnu-v3 --ret-postfix
-_Z6outer2IsEPFilES1_
-outer2<short>(int (*)(long))int (*)(long)
---format=gnu-v3 --ret-drop
-_Z5outerIsEcPFilE
-outer<short>(int (*)(long))
---format=gnu-v3 --ret-drop
-_Z5outerPFsiEl
-outer(short (*)(int), long)
---format=gnu-v3 --ret-drop
-_Z6outer2IsEPFilES1_
-outer2<short>(int (*)(long))
-#
---format=gnu-v3 --no-params
-_ZN1KIXadL_ZN1S1mEiEEE1fEv
-K<&S::m>::f()
-K<&S::m>::f
---format=gnu-v3
-_ZN1KILi1EXadL_ZN1S1mEiEEE1fEv
-K<1, &S::m>::f()
-# Here the `(int)' argument list of `S::m' is already removed.
---format=gnu-v3
-_ZN1KILi1EXadL_ZN1S1mEEEE1fEv
-K<1, &S::m>::f()
-#
-# Used to crash -- binutils PR 13030.
---format=gnu-v3
-_ZSt10_ConstructI10CellBorderIS0_EEvPT_DpOT0_
-_ZSt10_ConstructI10CellBorderIS0_EEvPT_DpOT0_
-# A pack expansion is substitutable.
---format=gnu-v3
-_Z1fIJiEiEv1AIJDpT_EET0_S4_
-void f<int, int>(A<int>, int, int)
-# So is decltype.
---format=gnu-v3
-_Z1fIiiEDTcvT__EET0_S2_
-decltype ((int)()) f<int, int>(int, int)
-# And vector.
---format=gnu-v3
-_Z1fDv4_iS_
-f(int __vector(4), int __vector(4))
---format=gnu-v3
-_Z2f1Ii1AEDTdsfp_fp0_ET0_MS2_T_
-decltype ({parm#1}.*{parm#2}) f1<int, A>(A, int A::*)
---format=gnu-v3
-_Z2f2IiEDTquL_Z1bEfp_trET_
-decltype (b?{parm#1} : (throw)) f2<int>(int)
---format=gnu-v3
-_Z6check1IiEvP6helperIXsznw_T_EEE
-void check1<int>(helper<sizeof (new int)>*)
---format=gnu-v3
-_Z6check2IiEvP6helperIXszgsnw_T_piEEE
-void check2<int>(helper<sizeof (::new int())>*)
---format=gnu-v3
-_Z6check3IiEvP6helperIXsznwadL_Z1iE_T_piLi1EEEE
-void check3<int>(helper<sizeof (new (&i) int(1))>*)
---format=gnu-v3
-_Z6check4IiEvP6helperIXszna_A1_T_EEE
-void check4<int>(helper<sizeof (new int [1])>*)
---format=gnu-v3
-_Z6check5IiEvP6helperIXszna_A1_T_piEEE
-void check5<int>(helper<sizeof (new int [1]())>*)
---format=gnu-v3
-_Z1fIiEDTcmgsdlfp_psfp_EPT_
-decltype ((::delete {parm#1}),(+{parm#1})) f<int>(int*)
---format=gnu-v3
-_Z1fIiEDTcmdafp_psfp_EPT_
-decltype ((delete[] {parm#1}),(+{parm#1})) f<int>(int*)
---format=gnu-v3
-_ZN1AdlEPv
-A::operator delete(void*)
---format=gnu-v3
-_Z2f1IiEDTppfp_ET_
-decltype ({parm#1}++) f1<int>(int)
---format=gnu-v3
-_Z2f1IiEDTpp_fp_ET_
-decltype (++{parm#1}) f1<int>(int)
---format=gnu-v3
-_Z2f1IiEDTcl1gfp_ilEEET_
-decltype (g({parm#1}, {})) f1<int>(int)
---format=gnu-v3
-_Z2f1IiEDTnw_T_ilEES0_
-decltype (new int{}) f1<int>(int)
---format=gnu-v3
-_Zli2_wPKc
-operator"" _w(char const*)
---format=gnu-v3
-_Z1fIiEDTnw_Dapifp_EET_
-decltype (new auto({parm#1})) f<int>(int)
---format=gnu-v3
-_Z1fIiERDaRKT_S1_
-auto& f<int>(int const&, int)
-#
-# Ada (GNAT) tests.
-#
-# Simple test.
---format=gnat
-yz__qrs
-yz.qrs
-# Operator
---format=gnat
-oper__Oadd
-oper."+"
-# Overloaded subprogram.
---format=gnat
-yz__qrs__2
-yz.qrs
-# Nested subprogram.
---format=gnat
-yz__qrs__tuv.1661
-yz.qrs.tuv
-# Nested and overloaded subprograms.
---format=gnat
-yz__qrs__tuv__2_1.1667
-yz.qrs.tuv
---format=gnat
-yz__qrs__tuv__2_2.1670
-yz.qrs.tuv
---format=gnat
-yz__qrs__tuv__2_3.1674
-yz.qrs.tuv
-# Elaborated flag (not demangled)
---format=gnat
-x_E
-<x_E>
-# Nested package
---format=gnat
-x__m1
-x.m1
---format=gnat
-x__m3
-x.m3
---format=gnat
-x__y__m2X
-x.y.m2
---format=gnat
-x__y__z__rXb
-x.y.z.r
-# Child package
---format=gnat
-x__y__j
-x.y.j
-# Library level
---format=gnat
-_ada_x__m3
-x.m3
-# Package body elaborator
---format=gnat
-p___elabb
-p'Elab_Body
-# Package spec elaborator
---format=gnat
-p___elabs
-p'Elab_Spec
-# Task body
---format=gnat
-p__taskobjTKB
-p.taskobj
-# Task subprogram
---format=gnat
-p__taskobjTK__f1.2330
-p.taskobj.f1
-# Protected types subprograms
---format=gnat
-prot__lock__getN
-prot.lock.get
---format=gnat
-prot__lock__getP
-prot.lock.get
---format=gnat
-prot__lock__get__sub.2590
-prot.lock.get.sub
---format=gnat
-prot__lock__setN
-prot.lock.set
---format=gnat
-prot__lock__setP
-prot.lock.set
-# Protected type entries
---format=gnat
-prot__lock__update_B7s
-prot.lock.update
---format=gnat
-prot__lock__update_E6s
-prot.lock.update
-# Controlled types
---format=gnat
-gnat__sockets__sockets_library_controllerDF__2
-gnat.sockets.sockets_library_controller.Finalize
---format=gnat
-system__partition_interface__racw_stub_typeDA
-system.partition_interface.racw_stub_type.Adjust
-# Stream operations
---format=gnat
-gnat__wide_wide_string_split__slice_setSR__2
-gnat.wide_wide_string_split.slice_set'Read
---format=gnat
-ada__real_time__timing_events__events__listSW__2Xnn
-ada.real_time.timing_events.events.list'Write
---format=gnat
-system__finalization_root__root_controlledSI
-system.finalization_root.root_controlled'Input
---format=gnat
-ada__finalization__limited_controlledSO__2
-ada.finalization.limited_controlled'Output
-# Tagged types
---format=gnat
-ada__synchronous_task_control___size__2
-ada.synchronous_task_control'Size
---format=gnat
-ada__real_time__timing_events__events___alignment__2Xnn
-ada.real_time.timing_events.events'Alignment
---format=gnat
-system__finalization_root___assign__2
-system.finalization_root.":="
-#
-# Used to crash the demangler.
---format=gnu-v3
-DFA
-DFA
-#
-# http://sourceware.org/bugzilla/show_bug.cgi?id=11572
---format=auto
-_ZN3Psi7VariantIIcPKcEE5visitIIRZN11VariantTest9TestVisit11test_methodEvEUlS2_E0_RZNS6_11test_methodEvEUlcE1_RZNS6_11test_methodEvEUlNS_4NoneEE_EEENS_13VariantDetail19SelectVisitorResultIIDpT_EE4typeEDpOSG_
-Psi::VariantDetail::SelectVisitorResult<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>::type Psi::Variant<char, char const*>::visit<VariantTest::TestVisit::test_method()::{lambda(char const*)#2}&, VariantTest::TestVisit::test_method()::{lambda(char)#3}&, VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&>((VariantTest::TestVisit::test_method()::{lambda(Psi::None)#1}&)...)
-#
-# Clone suffix tests
-#
---format=gnu-v3 --no-params
-_Z3fo5n.clone.1
-fo5(__int128) [clone .clone.1]
-fo5
-#
---format=gnu-v3 --no-params
-_Z3fo5n.constprop.2
-fo5(__int128) [clone .constprop.2]
-fo5
-#
---format=gnu-v3 --no-params
-_Z3fo5n.isra.3
-fo5(__int128) [clone .isra.3]
-fo5
-#
---format=gnu-v3 --no-params
-_Z3fo5n.part.4
-fo5(__int128) [clone .part.4]
-fo5
-#
---format=gnu-v3 --no-params
-_Z12to_be_clonediPv.clone.0
-to_be_cloned(int, void*) [clone .clone.0]
-to_be_cloned
-#
---format=gnu-v3 --no-params
-_Z3fooi.1988
-foo(int) [clone .1988]
-foo
-#
---format=gnu-v3 --no-params
-_Z3fooi.part.9.165493.constprop.775.31805
-foo(int) [clone .part.9.165493] [clone .constprop.775.31805]
-foo
-#
---format=gnu-v3 --no-params
-_Z2f1IiEvT_S0_S0_._omp_fn.2
-void f1<int>(int, int, int) [clone ._omp_fn.2]
-f1<int>
-#
---format=gnu-v3 --no-params
-_Z3fooi._omp_cpyfn.6
-foo(int) [clone ._omp_cpyfn.6]
-foo
-#
---format=gnu-v3 --no-params
-_Z1fIKFvvES0_Evv
-void f<void () const, void ()>()
-f<void () const, void ()>
diff --git a/gcc-4.7/libiberty/testsuite/test-demangle.c b/gcc-4.7/libiberty/testsuite/test-demangle.c
deleted file mode 100644
index 11d972999..000000000
--- a/gcc-4.7/libiberty/testsuite/test-demangle.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/* Demangler test program,
- Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc.
- Written by Zack Weinberg <zack@codesourcery.com
-
- This file is part of GNU libiberty.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include <stdio.h>
-#include "libiberty.h"
-#include "demangle.h"
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#endif
-
-struct line
-{
- size_t alloced;
- char *data;
-};
-
-static unsigned int lineno;
-
-/* Safely read a single line of arbitrary length from standard input. */
-
-#define LINELEN 80
-
-static void
-get_line(buf)
- struct line *buf;
-{
- char *data = buf->data;
- size_t alloc = buf->alloced;
- size_t count = 0;
- int c;
-
- if (data == 0)
- {
- data = xmalloc (LINELEN);
- alloc = LINELEN;
- }
-
- /* Skip comment lines. */
- while ((c = getchar()) == '#')
- {
- while ((c = getchar()) != EOF && c != '\n');
- lineno++;
- }
-
- /* c is the first character on the line, and it's not a comment
- line: copy this line into the buffer and return. */
- while (c != EOF && c != '\n')
- {
- if (count + 1 >= alloc)
- {
- alloc *= 2;
- data = xrealloc (data, alloc);
- }
- data[count++] = c;
- c = getchar();
- }
- lineno++;
- data[count] = '\0';
-
- buf->data = data;
- buf->alloced = alloc;
-}
-
-/* If we have mmap() and mprotect(), copy the string S just before a
- protected page, so that if the demangler runs over the end of the
- string we'll get a fault, and return the address of the new string.
- If no mmap, or it fails, or it looks too hard, just return S. */
-
-#ifdef HAVE_SYS_MMAN_H
-#include <sys/mman.h>
-#endif
-#if defined(MAP_ANON) && ! defined (MAP_ANONYMOUS)
-#define MAP_ANONYMOUS MAP_ANON
-#endif
-
-static const char *
-protect_end (const char * s)
-{
-#if defined(HAVE_MMAP) && defined (MAP_ANONYMOUS)
- size_t pagesize = getpagesize();
- static char * buf;
- size_t s_len = strlen (s);
- char * result;
-
- /* Don't try if S is too long. */
- if (s_len >= pagesize)
- return s;
-
- /* Allocate one page of allocated space followed by an unmapped
- page. */
- if (buf == NULL)
- {
- buf = mmap (NULL, pagesize * 2, PROT_READ | PROT_WRITE,
- MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
- if (! buf)
- return s;
- munmap (buf + pagesize, pagesize);
- }
-
- result = buf + (pagesize - s_len - 1);
- memcpy (result, s, s_len + 1);
- return result;
-#else
- return s;
-#endif
-}
-
-static void
-fail (lineno, opts, in, out, exp)
- int lineno;
- const char *opts;
- const char *in;
- const char *out;
- const char *exp;
-{
- printf ("\
-FAIL at line %d, options %s:\n\
-in: %s\n\
-out: %s\n\
-exp: %s\n",
- lineno, opts, in, out != NULL ? out : "(null)", exp);
-}
-
-/* The tester operates on a data file consisting of groups of lines:
- options
- input to be demangled
- expected output
-
- Supported options:
- --format=<name> Sets the demangling style.
- --no-params There are two lines of expected output; the first
- is with DMGL_PARAMS, the second is without it.
- --is-v3-ctor Calls is_gnu_v3_mangled_ctor on input; expected
- output is an integer representing ctor_kind.
- --is-v3-dtor Likewise, but for dtors.
- --ret-postfix Passes the DMGL_RET_POSTFIX option
- --ret-drop Passes the DMGL_RET_DROP option
-
- For compatibility, just in case it matters, the options line may be
- empty, to mean --format=auto. If it doesn't start with --, then it
- may contain only a format name.
-*/
-
-int
-main(argc, argv)
- int argc;
- char **argv;
-{
- enum demangling_styles style = auto_demangling;
- int no_params;
- int is_v3_ctor;
- int is_v3_dtor;
- int ret_postfix, ret_drop;
- struct line format;
- struct line input;
- struct line expect;
- char *result;
- int failures = 0;
- int tests = 0;
-
- if (argc > 1)
- {
- fprintf (stderr, "usage: %s < test-set\n", argv[0]);
- return 2;
- }
-
- format.data = 0;
- input.data = 0;
- expect.data = 0;
-
- for (;;)
- {
- const char *inp;
-
- get_line (&format);
- if (feof (stdin))
- break;
-
- get_line (&input);
- get_line (&expect);
-
- inp = protect_end (input.data);
-
- tests++;
-
- no_params = 0;
- ret_postfix = 0;
- ret_drop = 0;
- is_v3_ctor = 0;
- is_v3_dtor = 0;
- if (format.data[0] == '\0')
- style = auto_demangling;
- else if (format.data[0] != '-')
- {
- style = cplus_demangle_name_to_style (format.data);
- if (style == unknown_demangling)
- {
- printf ("FAIL at line %d: unknown demangling style %s\n",
- lineno, format.data);
- failures++;
- continue;
- }
- }
- else
- {
- char *p;
- char *opt;
-
- p = format.data;
- while (*p != '\0')
- {
- char c;
-
- opt = p;
- p += strcspn (p, " \t=");
- c = *p;
- *p = '\0';
- if (strcmp (opt, "--format") == 0 && c == '=')
- {
- char *fstyle;
-
- *p = c;
- ++p;
- fstyle = p;
- p += strcspn (p, " \t");
- c = *p;
- *p = '\0';
- style = cplus_demangle_name_to_style (fstyle);
- if (style == unknown_demangling)
- {
- printf ("FAIL at line %d: unknown demangling style %s\n",
- lineno, fstyle);
- failures++;
- continue;
- }
- }
- else if (strcmp (opt, "--no-params") == 0)
- no_params = 1;
- else if (strcmp (opt, "--is-v3-ctor") == 0)
- is_v3_ctor = 1;
- else if (strcmp (opt, "--is-v3-dtor") == 0)
- is_v3_dtor = 1;
- else if (strcmp (opt, "--ret-postfix") == 0)
- ret_postfix = 1;
- else if (strcmp (opt, "--ret-drop") == 0)
- ret_drop = 1;
- else
- {
- printf ("FAIL at line %d: unrecognized option %s\n",
- lineno, opt);
- failures++;
- continue;
- }
- *p = c;
- p += strspn (p, " \t");
- }
- }
-
- if (is_v3_ctor || is_v3_dtor)
- {
- char buf[20];
-
- if (is_v3_ctor)
- {
- enum gnu_v3_ctor_kinds kc;
-
- kc = is_gnu_v3_mangled_ctor (inp);
- sprintf (buf, "%d", (int) kc);
- }
- else
- {
- enum gnu_v3_dtor_kinds kd;
-
- kd = is_gnu_v3_mangled_dtor (inp);
- sprintf (buf, "%d", (int) kd);
- }
-
- if (strcmp (buf, expect.data) != 0)
- {
- fail (lineno, format.data, input.data, buf, expect.data);
- failures++;
- }
-
- continue;
- }
-
- cplus_demangle_set_style (style);
-
- result = cplus_demangle (inp, (DMGL_PARAMS | DMGL_ANSI | DMGL_TYPES
- | (ret_postfix ? DMGL_RET_POSTFIX : 0)
- | (ret_drop ? DMGL_RET_DROP : 0)));
-
- if (result
- ? strcmp (result, expect.data)
- : strcmp (input.data, expect.data))
- {
- fail (lineno, format.data, input.data, result, expect.data);
- failures++;
- }
- free (result);
-
- if (no_params)
- {
- get_line (&expect);
- result = cplus_demangle (inp, DMGL_ANSI|DMGL_TYPES);
-
- if (result
- ? strcmp (result, expect.data)
- : strcmp (input.data, expect.data))
- {
- fail (lineno, format.data, input.data, result, expect.data);
- failures++;
- }
- free (result);
- }
- }
-
- free (format.data);
- free (input.data);
- free (expect.data);
-
- printf ("%s: %d tests, %d failures\n", argv[0], tests, failures);
- return failures ? 1 : 0;
-}
diff --git a/gcc-4.7/libiberty/testsuite/test-expandargv.c b/gcc-4.7/libiberty/testsuite/test-expandargv.c
deleted file mode 100644
index dff20d41d..000000000
--- a/gcc-4.7/libiberty/testsuite/test-expandargv.c
+++ /dev/null
@@ -1,331 +0,0 @@
-/* expandargv test program,
- Copyright (C) 2006 Free Software Foundation, Inc.
- Written by Carlos O'Donell <carlos@codesourcery.com>
-
- This file is part of the libiberty library, which is part of GCC.
-
- This file is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- In addition to the permissions in the GNU General Public License, the
- Free Software Foundation gives you unlimited permission to link the
- compiled version of this file into combinations with other programs,
- and to distribute those combinations without any restriction coming
- from the use of this file. (The General Public License restrictions
- do apply in other respects; for example, they cover modification of
- the file, and distribution when not linked into a combined
- executable.)
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "libiberty.h"
-#include <stdio.h>
-#include <errno.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-
-#ifndef EXIT_SUCCESS
-#define EXIT_SUCCESS 0
-#endif
-
-#ifndef EXIT_FAILURE
-#define EXIT_FAILURE 1
-#endif
-
-static void fatal_error (int, const char *, int) ATTRIBUTE_NORETURN;
-void writeout_test (int, const char *);
-void run_replaces (char *);
-void hook_char_replace (char *, size_t, char, char);
-int run_tests (const char **);
-void erase_test (int);
-
-/* Test input data, argv before, and argv after:
-
- The \n is an important part of test_data since expandargv
- may have to work in environments where \n is translated
- as \r\n. Thus \n is included in the test data for the file.
-
- We use \b to indicate that the test data is the null character.
- This is because we use \0 normally to represent the end of the
- file data, so we need something else for this. */
-
-#define FILENAME_PATTERN "test-expandargv-%d.lst"
-#define ARGV0 "test-expandargv"
-
-const char *test_data[] = {
- /* Test 0 - Check for expansion with \r\n */
- "a\r\nb", /* Test 0 data */
- ARGV0,
- "@test-expandargv-0.lst",
- 0, /* End of argv[] before expansion */
- ARGV0,
- "a",
- "b",
- 0, /* End of argv[] after expansion */
-
- /* Test 1 - Check for expansion with \n */
- "a\nb", /* Test 1 data */
- ARGV0,
- "@test-expandargv-1.lst",
- 0,
- ARGV0,
- "a",
- "b",
- 0,
-
- /* Test 2 - Check for expansion with \0 */
- "a\bb", /* Test 2 data */
- ARGV0,
- "@test-expandargv-2.lst",
- 0,
- ARGV0,
- "a",
- 0,
-
- /* Test 3 - Check for expansion with only \0 */
- "\b", /* Test 3 data */
- ARGV0,
- "@test-expandargv-3.lst",
- 0,
- ARGV0,
- 0,
-
- /* Test 4 - Check for options beginning with an empty line. */
- "\na\nb", /* Test 4 data */
- ARGV0,
- "@test-expandargv-4.lst",
- 0,
- ARGV0,
- "a",
- "b",
- 0,
-
- /* Test 5 - Check for options containing an empty argument. */
- "a\n''\nb", /* Test 5 data */
- ARGV0,
- "@test-expandargv-5.lst",
- 0,
- ARGV0,
- "a",
- "",
- "b",
- 0,
-
- /* Test 6 - Check for options containing a quoted newline. */
- "a\n'a\n\nb'\nb", /* Test 6 data */
- ARGV0,
- "@test-expandargv-6.lst",
- 0,
- ARGV0,
- "a",
- "a\n\nb",
- "b",
- 0,
-
- 0 /* Test done marker, don't remove. */
-};
-
-/* Print a fatal error and exit. LINE is the line number where we
- detected the error, ERRMSG is the error message to print, and ERR
- is 0 or an errno value to print. */
-
-static void
-fatal_error (int line, const char *errmsg, int err)
-{
- fprintf (stderr, "test-expandargv:%d: %s", line, errmsg);
- if (errno != 0)
- fprintf (stderr, ": %s", xstrerror (err));
- fprintf (stderr, "\n");
- exit (EXIT_FAILURE);
-}
-
-/* hook_char_replace:
- Replace 'replacethis' with 'withthis' */
-
-void
-hook_char_replace (char *string, size_t len, char replacethis, char withthis)
-{
- int i = 0;
- for (i = 0; i < len; i++)
- if (string[i] == replacethis)
- string[i] = withthis;
-}
-
-/* run_replaces:
- Hook here all the character for character replaces.
- Be warned that expanding the string or contracting the string
- should be handled with care. */
-
-void
-run_replaces (char * string)
-{
- /* Store original string size */
- size_t len = strlen (string);
- hook_char_replace (string, len, '\b', '\0');
-}
-
-/* write_test:
- Write test datafile */
-
-void
-writeout_test (int test, const char * test_data)
-{
- char filename[256];
- FILE *fd;
- size_t len, sys_fwrite;
- char * parse;
-
- /* Unique filename per test */
- sprintf (filename, FILENAME_PATTERN, test);
- fd = fopen (filename, "w");
- if (fd == NULL)
- fatal_error (__LINE__, "Failed to create test file.", errno);
-
- /* Generate RW copy of data for replaces */
- len = strlen (test_data);
- parse = malloc (sizeof (char) * (len + 1));
- if (parse == NULL)
- fatal_error (__LINE__, "Failed to malloc parse.", errno);
-
- memcpy (parse, test_data, sizeof (char) * (len + 1));
- /* Run all possible replaces */
- run_replaces (parse);
-
- sys_fwrite = fwrite (parse, sizeof (char), len, fd);
- if (sys_fwrite != len)
- fatal_error (__LINE__, "Failed to write to test file.", errno);
-
- free (parse);
- fclose (fd);
-}
-
-/* erase_test:
- Erase the test file */
-
-void
-erase_test (int test)
-{
- char filename[256];
- sprintf (filename, FILENAME_PATTERN, test);
- if (unlink (filename) != 0)
- fatal_error (__LINE__, "Failed to erase test file.", errno);
-}
-
-
-/* run_tests:
- Run expandargv
- Compare argv before and after.
- Return number of fails */
-
-int
-run_tests (const char **test_data)
-{
- int argc_after, argc_before;
- char ** argv_before, ** argv_after;
- int i, j, k, fails, failed;
-
- i = j = fails = 0;
- /* Loop over all the tests */
- while (test_data[j])
- {
- /* Write test data */
- writeout_test (i, test_data[j++]);
- /* Copy argv before */
- argv_before = dupargv ((char **) &test_data[j]);
-
- /* Count argc before/after */
- argc_before = 0;
- argc_after = 0;
- while (test_data[j + argc_before])
- argc_before++;
- j += argc_before + 1; /* Skip null */
- while (test_data[j + argc_after])
- argc_after++;
-
- /* Copy argv after */
- argv_after = dupargv ((char **) &test_data[j]);
-
- /* Run all possible replaces */
- for (k = 0; k < argc_before; k++)
- run_replaces (argv_before[k]);
- for (k = 0; k < argc_after; k++)
- run_replaces (argv_after[k]);
-
- /* Run test: Expand arguments */
- expandargv (&argc_before, &argv_before);
-
- failed = 0;
- /* Compare size first */
- if (argc_before != argc_after)
- {
- printf ("FAIL: test-expandargv-%d. Number of arguments don't match.\n", i);
- failed++;
- }
- /* Compare each of the argv's ... */
- else
- for (k = 0; k < argc_after; k++)
- if (strcmp (argv_before[k], argv_after[k]) != 0)
- {
- printf ("FAIL: test-expandargv-%d. Arguments don't match.\n", i);
- failed++;
- }
-
- if (!failed)
- printf ("PASS: test-expandargv-%d.\n", i);
- else
- fails++;
-
- freeargv (argv_before);
- freeargv (argv_after);
- /* Advance to next test */
- j += argc_after + 1;
- /* Erase test file */
- erase_test (i);
- i++;
- }
- return fails;
-}
-
-/* main:
- Run tests.
- Check result and exit with appropriate code. */
-
-int
-main(int argc, char **argv)
-{
- int fails;
- /* Repeat for all the tests:
- - Parse data array and write into file.
- - Run replace hooks before writing to file.
- - Parse data array and build argv before/after.
- - Run replace hooks on argv before/after
- - Run expandargv.
- - Compare output of expandargv argv to after argv.
- - If they compare the same then test passes
- else the test fails.
- - Erase test file. */
-
- fails = run_tests (test_data);
- if (!fails)
- exit (EXIT_SUCCESS);
- else
- exit (EXIT_FAILURE);
-}
-
diff --git a/gcc-4.7/libiberty/testsuite/test-pexecute.c b/gcc-4.7/libiberty/testsuite/test-pexecute.c
deleted file mode 100644
index 8e01fda47..000000000
--- a/gcc-4.7/libiberty/testsuite/test-pexecute.c
+++ /dev/null
@@ -1,522 +0,0 @@
-/* Pexecute test program,
- Copyright (C) 2005 Free Software Foundation, Inc.
- Written by Ian Lance Taylor <ian@airs.com>.
-
- This file is part of GNU libiberty.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-#include <stdio.h>
-#include <signal.h>
-#include <errno.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#include <sys/types.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_RESOURCE_H
-#include <sys/resource.h>
-#endif
-
-#ifndef WIFSIGNALED
-#define WIFSIGNALED(S) (((S) & 0xff) != 0 && ((S) & 0xff) != 0x7f)
-#endif
-#ifndef WTERMSIG
-#define WTERMSIG(S) ((S) & 0x7f)
-#endif
-#ifndef WIFEXITED
-#define WIFEXITED(S) (((S) & 0xff) == 0)
-#endif
-#ifndef WEXITSTATUS
-#define WEXITSTATUS(S) (((S) & 0xff00) >> 8)
-#endif
-#ifndef WSTOPSIG
-#define WSTOPSIG WEXITSTATUS
-#endif
-#ifndef WCOREDUMP
-#define WCOREDUMP(S) ((S) & WCOREFLG)
-#endif
-#ifndef WCOREFLG
-#define WCOREFLG 0200
-#endif
-
-#ifndef EXIT_SUCCESS
-#define EXIT_SUCCESS 0
-#endif
-
-#ifndef EXIT_FAILURE
-#define EXIT_FAILURE 1
-#endif
-
-/* When this program is run with no arguments, it runs some tests of
- the libiberty pexecute functions. As a test program, it simply
- invokes itself with various arguments.
-
- argv[1]:
- *empty string* Run tests, exit with success status
- exit Exit success
- error Exit error
- abort Abort
- echo Echo remaining arguments, exit success
- echoerr Echo next arg to stdout, next to stderr, repeat
- copy Copy stdin to stdout
- write Write stdin to file named in next argument
-*/
-
-static void fatal_error (int, const char *, int) ATTRIBUTE_NORETURN;
-static void error (int, const char *);
-static void check_line (int, FILE *, const char *);
-static void do_cmd (int, char **) ATTRIBUTE_NORETURN;
-
-/* The number of errors we have seen. */
-
-static int error_count;
-
-/* Print a fatal error and exit. LINE is the line number where we
- detected the error, ERRMSG is the error message to print, and ERR
- is 0 or an errno value to print. */
-
-static void
-fatal_error (int line, const char *errmsg, int err)
-{
- fprintf (stderr, "test-pexecute:%d: %s", line, errmsg);
- if (errno != 0)
- fprintf (stderr, ": %s", xstrerror (err));
- fprintf (stderr, "\n");
- exit (EXIT_FAILURE);
-}
-
-#define FATAL_ERROR(ERRMSG, ERR) fatal_error (__LINE__, ERRMSG, ERR)
-
-/* Print an error message and bump the error count. LINE is the line
- number where we detected the error, ERRMSG is the error to
- print. */
-
-static void
-error (int line, const char *errmsg)
-{
- fprintf (stderr, "test-pexecute:%d: %s\n", line, errmsg);
- ++error_count;
-}
-
-#define ERROR(ERRMSG) error (__LINE__, ERRMSG)
-
-/* Check a line in a file. */
-
-static void
-check_line (int line, FILE *e, const char *str)
-{
- const char *p;
- int c;
- char buf[1000];
-
- p = str;
- while (1)
- {
- c = getc (e);
-
- if (*p == '\0')
- {
- if (c != '\n')
- {
- snprintf (buf, sizeof buf, "got '%c' when expecting newline", c);
- fatal_error (line, buf, 0);
- }
- c = getc (e);
- if (c != EOF)
- {
- snprintf (buf, sizeof buf, "got '%c' when expecting EOF", c);
- fatal_error (line, buf, 0);
- }
- return;
- }
-
- if (c != *p)
- {
- snprintf (buf, sizeof buf, "expected '%c', got '%c'", *p, c);
- fatal_error (line, buf, 0);
- }
-
- ++p;
- }
-}
-
-#define CHECK_LINE(E, STR) check_line (__LINE__, E, STR)
-
-/* Main function for the pexecute tester. Run the tests. */
-
-int
-main (int argc, char **argv)
-{
- int trace;
- struct pex_obj *test_pex_tmp;
- int test_pex_status;
- FILE *test_pex_file;
- struct pex_obj *pex1;
- char *subargv[10];
- int status;
- FILE *e;
- int statuses[10];
-
- trace = 0;
- if (argc > 1 && strcmp (argv[1], "-t") == 0)
- {
- trace = 1;
- --argc;
- ++argv;
- }
-
- if (argc > 1)
- do_cmd (argc, argv);
-
-#define TEST_PEX_INIT(FLAGS, TEMPBASE) \
- (((test_pex_tmp = pex_init (FLAGS, "test-pexecute", TEMPBASE)) \
- != NULL) \
- ? test_pex_tmp \
- : (FATAL_ERROR ("pex_init failed", 0), NULL))
-
-#define TEST_PEX_RUN(PEXOBJ, FLAGS, EXECUTABLE, ARGV, OUTNAME, ERRNAME) \
- do \
- { \
- int err; \
- const char *pex_run_err; \
- if (trace) \
- fprintf (stderr, "Line %d: running %s %s\n", \
- __LINE__, EXECUTABLE, ARGV[0]); \
- pex_run_err = pex_run (PEXOBJ, FLAGS, EXECUTABLE, ARGV, OUTNAME, \
- ERRNAME, &err); \
- if (pex_run_err != NULL) \
- FATAL_ERROR (pex_run_err, err); \
- } \
- while (0)
-
-#define TEST_PEX_GET_STATUS_1(PEXOBJ) \
- (pex_get_status (PEXOBJ, 1, &test_pex_status) \
- ? test_pex_status \
- : (FATAL_ERROR ("pex_get_status failed", errno), 1))
-
-#define TEST_PEX_GET_STATUS(PEXOBJ, COUNT, VECTOR) \
- do \
- { \
- if (!pex_get_status (PEXOBJ, COUNT, VECTOR)) \
- FATAL_ERROR ("pex_get_status failed", errno); \
- } \
- while (0)
-
-#define TEST_PEX_READ_OUTPUT(PEXOBJ) \
- ((test_pex_file = pex_read_output (PEXOBJ, 0)) != NULL \
- ? test_pex_file \
- : (FATAL_ERROR ("pex_read_output failed", errno), NULL))
-
- remove ("temp.x");
- remove ("temp.y");
-
- memset (subargv, 0, sizeof subargv);
-
- subargv[0] = "./test-pexecute";
-
- pex1 = TEST_PEX_INIT (PEX_USE_PIPES, NULL);
- subargv[1] = "exit";
- subargv[2] = NULL;
- TEST_PEX_RUN (pex1, PEX_LAST, "./test-pexecute", subargv, NULL, NULL);
- status = TEST_PEX_GET_STATUS_1 (pex1);
- if (!WIFEXITED (status) || WEXITSTATUS (status) != EXIT_SUCCESS)
- ERROR ("exit failed");
- pex_free (pex1);
-
- pex1 = TEST_PEX_INIT (PEX_USE_PIPES, NULL);
- subargv[1] = "error";
- subargv[2] = NULL;
- TEST_PEX_RUN (pex1, PEX_LAST, "./test-pexecute", subargv, NULL, NULL);
- status = TEST_PEX_GET_STATUS_1 (pex1);
- if (!WIFEXITED (status) || WEXITSTATUS (status) != EXIT_FAILURE)
- ERROR ("error test failed");
- pex_free (pex1);
-
- /* We redirect stderr to a file to avoid an error message which is
- printed on mingw32 when the child calls abort. */
- pex1 = TEST_PEX_INIT (PEX_USE_PIPES, NULL);
- subargv[1] = "abort";
- subargv[2] = NULL;
- TEST_PEX_RUN (pex1, PEX_LAST, "./test-pexecute", subargv, NULL, "temp.z");
- status = TEST_PEX_GET_STATUS_1 (pex1);
- if (!WIFSIGNALED (status) || WTERMSIG (status) != SIGABRT)
- ERROR ("abort failed");
- pex_free (pex1);
- remove ("temp.z");
-
- pex1 = TEST_PEX_INIT (PEX_USE_PIPES, "temp");
- subargv[1] = "echo";
- subargv[2] = "foo";
- subargv[3] = NULL;
- TEST_PEX_RUN (pex1, 0, "./test-pexecute", subargv, NULL, NULL);
- e = TEST_PEX_READ_OUTPUT (pex1);
- CHECK_LINE (e, "foo");
- if (TEST_PEX_GET_STATUS_1 (pex1) != 0)
- ERROR ("echo exit status failed");
- pex_free (pex1);
-
- pex1 = TEST_PEX_INIT (PEX_USE_PIPES, "temp");
- subargv[1] = "echo";
- subargv[2] = "bar";
- subargv[3] = NULL;
- TEST_PEX_RUN (pex1, PEX_SUFFIX, "./test-pexecute", subargv, ".x", NULL);
- subargv[1] = "copy";
- subargv[2] = NULL;
- TEST_PEX_RUN (pex1, PEX_SUFFIX, "./test-pexecute", subargv, ".y", NULL);
- e = TEST_PEX_READ_OUTPUT (pex1);
- CHECK_LINE (e, "bar");
- TEST_PEX_GET_STATUS (pex1, 2, statuses);
- if (!WIFEXITED (statuses[0]) || WEXITSTATUS (statuses[0]) != EXIT_SUCCESS
- || !WIFEXITED (statuses[1]) || WEXITSTATUS (statuses[1]) != EXIT_SUCCESS)
- ERROR ("copy exit status failed");
- pex_free (pex1);
- if (fopen ("temp.x", "r") != NULL || fopen ("temp.y", "r") != NULL)
- ERROR ("temporary files exist");
-
- pex1 = TEST_PEX_INIT (0, "temp");
- subargv[1] = "echo";
- subargv[2] = "bar";
- subargv[3] = NULL;
- TEST_PEX_RUN (pex1, PEX_SUFFIX, "./test-pexecute", subargv, ".x", NULL);
- subargv[1] = "copy";
- subargv[2] = NULL;
- TEST_PEX_RUN (pex1, PEX_SUFFIX, "./test-pexecute", subargv, ".y", NULL);
- e = TEST_PEX_READ_OUTPUT (pex1);
- CHECK_LINE (e, "bar");
- TEST_PEX_GET_STATUS (pex1, 2, statuses);
- if (!WIFEXITED (statuses[0]) || WEXITSTATUS (statuses[0]) != EXIT_SUCCESS
- || !WIFEXITED (statuses[1]) || WEXITSTATUS (statuses[1]) != EXIT_SUCCESS)
- ERROR ("copy exit status failed");
- pex_free (pex1);
- if (fopen ("temp.x", "r") != NULL || fopen ("temp.y", "r") != NULL)
- ERROR ("temporary files exist");
-
- pex1 = TEST_PEX_INIT (PEX_SAVE_TEMPS, "temp");
- subargv[1] = "echo";
- subargv[2] = "quux";
- subargv[3] = NULL;
- TEST_PEX_RUN (pex1, PEX_SUFFIX, "./test-pexecute", subargv, ".x", NULL);
- subargv[1] = "copy";
- subargv[2] = NULL;
- TEST_PEX_RUN (pex1, PEX_SUFFIX, "./test-pexecute", subargv, ".y", NULL);
- e = TEST_PEX_READ_OUTPUT (pex1);
- CHECK_LINE (e, "quux");
- TEST_PEX_GET_STATUS (pex1, 2, statuses);
- if (!WIFEXITED (statuses[0]) || WEXITSTATUS (statuses[0]) != EXIT_SUCCESS
- || !WIFEXITED (statuses[1]) || WEXITSTATUS (statuses[1]) != EXIT_SUCCESS)
- ERROR ("copy temp exit status failed");
- e = fopen ("temp.x", "r");
- if (e == NULL)
- FATAL_ERROR ("fopen temp.x failed in copy temp", errno);
- CHECK_LINE (e, "quux");
- fclose (e);
- e = fopen ("temp.y", "r");
- if (e == NULL)
- FATAL_ERROR ("fopen temp.y failed in copy temp", errno);
- CHECK_LINE (e, "quux");
- fclose (e);
- pex_free (pex1);
- remove ("temp.x");
- remove ("temp.y");
-
- pex1 = TEST_PEX_INIT (PEX_USE_PIPES, "temp");
- subargv[1] = "echoerr";
- subargv[2] = "one";
- subargv[3] = "two";
- subargv[4] = NULL;
- TEST_PEX_RUN (pex1, PEX_SUFFIX, "./test-pexecute", subargv, ".x", "temp2.x");
- subargv[1] = "write";
- subargv[2] = "temp2.y";
- subargv[3] = NULL;
- TEST_PEX_RUN (pex1, PEX_SUFFIX, "./test-pexecute", subargv, ".y", NULL);
- TEST_PEX_GET_STATUS (pex1, 2, statuses);
- if (!WIFEXITED (statuses[0]) || WEXITSTATUS (statuses[0]) != EXIT_SUCCESS
- || !WIFEXITED (statuses[1]) || WEXITSTATUS (statuses[1]) != EXIT_SUCCESS)
- ERROR ("echoerr exit status failed");
- pex_free (pex1);
- if (fopen ("temp.x", "r") != NULL || fopen ("temp.y", "r") != NULL)
- ERROR ("temporary files exist");
- e = fopen ("temp2.x", "r");
- if (e == NULL)
- FATAL_ERROR ("fopen temp2.x failed in echoerr", errno);
- CHECK_LINE (e, "two");
- fclose (e);
- e = fopen ("temp2.y", "r");
- if (e == NULL)
- FATAL_ERROR ("fopen temp2.y failed in echoerr", errno);
- CHECK_LINE (e, "one");
- fclose (e);
- remove ("temp2.x");
- remove ("temp2.y");
-
- /* Test the old pexecute interface. */
- {
- int pid1, pid2;
- char *errmsg_fmt;
- char *errmsg_arg;
- char errbuf1[1000];
- char errbuf2[1000];
-
- subargv[1] = "echo";
- subargv[2] = "oldpexecute";
- subargv[3] = NULL;
- pid1 = pexecute ("./test-pexecute", subargv, "test-pexecute", "temp",
- &errmsg_fmt, &errmsg_arg, PEXECUTE_FIRST);
- if (pid1 < 0)
- {
- snprintf (errbuf1, sizeof errbuf1, errmsg_fmt, errmsg_arg);
- snprintf (errbuf2, sizeof errbuf2, "pexecute 1 failed: %s", errbuf1);
- FATAL_ERROR (errbuf2, 0);
- }
-
- subargv[1] = "write";
- subargv[2] = "temp.y";
- subargv[3] = NULL;
- pid2 = pexecute ("./test-pexecute", subargv, "test-pexecute", "temp",
- &errmsg_fmt, &errmsg_arg, PEXECUTE_LAST);
- if (pid2 < 0)
- {
- snprintf (errbuf1, sizeof errbuf1, errmsg_fmt, errmsg_arg);
- snprintf (errbuf2, sizeof errbuf2, "pexecute 2 failed: %s", errbuf1);
- FATAL_ERROR (errbuf2, 0);
- }
-
- if (pwait (pid1, &status, 0) < 0)
- FATAL_ERROR ("write pwait 1 failed", errno);
- if (!WIFEXITED (status) || WEXITSTATUS (status) != EXIT_SUCCESS)
- ERROR ("write exit status 1 failed");
-
- if (pwait (pid2, &status, 0) < 0)
- FATAL_ERROR ("write pwait 1 failed", errno);
- if (!WIFEXITED (status) || WEXITSTATUS (status) != EXIT_SUCCESS)
- ERROR ("write exit status 2 failed");
-
- e = fopen ("temp.y", "r");
- if (e == NULL)
- FATAL_ERROR ("fopen temp.y failed in copy temp", errno);
- CHECK_LINE (e, "oldpexecute");
- fclose (e);
-
- remove ("temp.y");
- }
-
- if (trace)
- fprintf (stderr, "Exiting with status %d\n", error_count);
-
- return error_count;
-}
-
-/* Execute one of the special testing commands. */
-
-static void
-do_cmd (int argc, char **argv)
-{
- const char *s;
-
- /* Try to prevent generating a core dump. */
-#ifdef RLIMIT_CORE
- {
- struct rlimit r;
-
- r.rlim_cur = 0;
- r.rlim_max = 0;
- setrlimit (RLIMIT_CORE, &r);
- }
-#endif
-
- s = argv[1];
- if (strcmp (s, "exit") == 0)
- exit (EXIT_SUCCESS);
- else if (strcmp (s, "echo") == 0)
- {
- int i;
-
- for (i = 2; i < argc; ++i)
- {
- if (i > 2)
- putchar (' ');
- fputs (argv[i], stdout);
- }
- putchar ('\n');
- exit (EXIT_SUCCESS);
- }
- else if (strcmp (s, "echoerr") == 0)
- {
- int i;
-
- for (i = 2; i < argc; ++i)
- {
- if (i > 3)
- putc (' ', (i & 1) == 0 ? stdout : stderr);
- fputs (argv[i], (i & 1) == 0 ? stdout : stderr);
- }
- putc ('\n', stdout);
- putc ('\n', stderr);
- exit (EXIT_SUCCESS);
- }
- else if (strcmp (s, "error") == 0)
- exit (EXIT_FAILURE);
- else if (strcmp (s, "abort") == 0)
- abort ();
- else if (strcmp (s, "copy") == 0)
- {
- int c;
-
- while ((c = getchar ()) != EOF)
- putchar (c);
- exit (EXIT_SUCCESS);
- }
- else if (strcmp (s, "write") == 0)
- {
- FILE *e;
- int c;
-
- e = fopen (argv[2], "w");
- if (e == NULL)
- FATAL_ERROR ("fopen for write failed", errno);
- while ((c = getchar ()) != EOF)
- putc (c, e);
- if (fclose (e) != 0)
- FATAL_ERROR ("fclose for write failed", errno);
- exit (EXIT_SUCCESS);
- }
- else
- {
- char buf[1000];
-
- snprintf (buf, sizeof buf, "unrecognized command %s", argv[1]);
- FATAL_ERROR (buf, 0);
- }
-
- exit (EXIT_FAILURE);
-}
diff --git a/gcc-4.7/libiberty/timeval-utils.c b/gcc-4.7/libiberty/timeval-utils.c
deleted file mode 100644
index 4c9f6a85e..000000000
--- a/gcc-4.7/libiberty/timeval-utils.c
+++ /dev/null
@@ -1,87 +0,0 @@
-/* Basic struct timeval utilities.
- Copyright (C) 2011 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not,
-write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#include "config.h"
-
-/* On some systems (such as WindISS), you must include <sys/types.h>
- to get the definition of "time_t" before you include <time.h>. */
-#include <sys/types.h>
-
-#ifdef TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# ifdef HAVE_TIME_H
-# include <time.h>
-# endif
-# endif
-#endif
-
-#include "timeval-utils.h"
-
-/*
-
-@deftypefn Extension void timeval_add (struct timeval *@var{a}, @
- struct timeval *@var{b}, struct timeval *@var{result})
-
-Adds @var{a} to @var{b} and stores the result in @var{result}.
-
-@end deftypefn
-
-*/
-
-void
-timeval_add (struct timeval *result,
- const struct timeval *a, const struct timeval *b)
-{
- result->tv_sec = a->tv_sec + b->tv_sec;
- result->tv_usec = a->tv_usec + b->tv_usec;
- if (result->tv_usec >= 1000000)
- {
- ++result->tv_sec;
- result->tv_usec -= 1000000;
- }
-}
-
-/*
-
-@deftypefn Extension void timeval_sub (struct timeval *@var{a}, @
- struct timeval *@var{b}, struct timeval *@var{result})
-
-Subtracts @var{b} from @var{a} and stores the result in @var{result}.
-
-@end deftypefn
-
-*/
-
-void
-timeval_sub (struct timeval *result,
- const struct timeval *a, const struct timeval *b)
-{
- result->tv_sec = a->tv_sec - b->tv_sec;
- result->tv_usec = a->tv_usec - b->tv_usec;
- if (result->tv_usec < 0)
- {
- --result->tv_sec;
- result->tv_usec += 1000000;
- }
-}
diff --git a/gcc-4.7/libiberty/tmpnam.c b/gcc-4.7/libiberty/tmpnam.c
deleted file mode 100644
index cc3433366..000000000
--- a/gcc-4.7/libiberty/tmpnam.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-
-@deftypefn Supplemental char* tmpnam (char *@var{s})
-
-This function attempts to create a name for a temporary file, which
-will be a valid file name yet not exist when @code{tmpnam} checks for
-it. @var{s} must point to a buffer of at least @code{L_tmpnam} bytes,
-or be @code{NULL}. Use of this function creates a security risk, and it must
-not be used in new projects. Use @code{mkstemp} instead.
-
-@end deftypefn
-
-*/
-
-#include <stdio.h>
-
-#ifndef L_tmpnam
-#define L_tmpnam 100
-#endif
-#ifndef P_tmpdir
-#define P_tmpdir "/usr/tmp"
-#endif
-
-static char tmpnam_buffer[L_tmpnam];
-static int tmpnam_counter;
-
-extern int getpid (void);
-
-char *
-tmpnam (char *s)
-{
- int pid = getpid ();
-
- if (s == NULL)
- s = tmpnam_buffer;
-
- /* Generate the filename and make sure that there isn't one called
- it already. */
-
- while (1)
- {
- FILE *f;
- sprintf (s, "%s/%s%x.%x", P_tmpdir, "t", pid, tmpnam_counter);
- f = fopen (s, "r");
- if (f == NULL)
- break;
- tmpnam_counter++;
- fclose (f);
- }
-
- return s;
-}
diff --git a/gcc-4.7/libiberty/unlink-if-ordinary.c b/gcc-4.7/libiberty/unlink-if-ordinary.c
deleted file mode 100644
index c03b4dd7c..000000000
--- a/gcc-4.7/libiberty/unlink-if-ordinary.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* unlink-if-ordinary.c - remove link to a file unless it is special
- Copyright (C) 2004, 2005 Free Software Foundation, Inc.
-
-This file is part of the libiberty library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
-
-@deftypefn Supplemental int unlink_if_ordinary (const char*)
-
-Unlinks the named file, unless it is special (e.g. a device file).
-Returns 0 when the file was unlinked, a negative value (and errno set) when
-there was an error deleting the file, and a positive value if no attempt
-was made to unlink the file because it is special.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/types.h>
-
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_SYS_STAT_H
-#include <sys/stat.h>
-#endif
-
-#include "libiberty.h"
-
-#ifndef S_ISLNK
-#ifdef S_IFLNK
-#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
-#else
-#define S_ISLNK(m) 0
-#define lstat stat
-#endif
-#endif
-
-int
-unlink_if_ordinary (const char *name)
-{
- struct stat st;
-
- if (lstat (name, &st) == 0
- && (S_ISREG (st.st_mode) || S_ISLNK (st.st_mode)))
- return unlink (name);
-
- return 1;
-}
diff --git a/gcc-4.7/libiberty/vasprintf.c b/gcc-4.7/libiberty/vasprintf.c
deleted file mode 100644
index 85de5429f..000000000
--- a/gcc-4.7/libiberty/vasprintf.c
+++ /dev/null
@@ -1,197 +0,0 @@
-/* Like vsprintf but provides a pointer to malloc'd storage, which must
- be freed by the caller.
- Copyright (C) 1994, 2003, 2011 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <ansidecl.h>
-#include <stdarg.h>
-#if !defined (va_copy) && defined (__va_copy)
-# define va_copy(d,s) __va_copy((d),(s))
-#endif
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#else
-extern unsigned long strtoul ();
-extern PTR malloc ();
-#endif
-#include "libiberty.h"
-
-#ifdef TEST
-int global_total_width;
-#endif
-
-/*
-
-@deftypefn Extension int vasprintf (char **@var{resptr}, @
- const char *@var{format}, va_list @var{args})
-
-Like @code{vsprintf}, but instead of passing a pointer to a buffer,
-you pass a pointer to a pointer. This function will compute the size
-of the buffer needed, allocate memory with @code{malloc}, and store a
-pointer to the allocated memory in @code{*@var{resptr}}. The value
-returned is the same as @code{vsprintf} would return. If memory could
-not be allocated, minus one is returned and @code{NULL} is stored in
-@code{*@var{resptr}}.
-
-@end deftypefn
-
-*/
-
-static int int_vasprintf (char **, const char *, va_list);
-
-static int
-int_vasprintf (char **result, const char *format, va_list args)
-{
- const char *p = format;
- /* Add one to make sure that it is never zero, which might cause malloc
- to return NULL. */
- int total_width = strlen (format) + 1;
- va_list ap;
-
-#ifdef va_copy
- va_copy (ap, args);
-#else
- memcpy ((PTR) &ap, (PTR) &args, sizeof (va_list));
-#endif
-
- while (*p != '\0')
- {
- if (*p++ == '%')
- {
- while (strchr ("-+ #0", *p))
- ++p;
- if (*p == '*')
- {
- ++p;
- total_width += abs (va_arg (ap, int));
- }
- else
- total_width += strtoul (p, (char **) &p, 10);
- if (*p == '.')
- {
- ++p;
- if (*p == '*')
- {
- ++p;
- total_width += abs (va_arg (ap, int));
- }
- else
- total_width += strtoul (p, (char **) &p, 10);
- }
- while (strchr ("hlL", *p))
- ++p;
- /* Should be big enough for any format specifier except %s and floats. */
- total_width += 30;
- switch (*p)
- {
- case 'd':
- case 'i':
- case 'o':
- case 'u':
- case 'x':
- case 'X':
- case 'c':
- (void) va_arg (ap, int);
- break;
- case 'f':
- case 'e':
- case 'E':
- case 'g':
- case 'G':
- (void) va_arg (ap, double);
- /* Since an ieee double can have an exponent of 307, we'll
- make the buffer wide enough to cover the gross case. */
- total_width += 307;
- break;
- case 's':
- total_width += strlen (va_arg (ap, char *));
- break;
- case 'p':
- case 'n':
- (void) va_arg (ap, char *);
- break;
- }
- p++;
- }
- }
-#ifdef va_copy
- va_end (ap);
-#endif
-#ifdef TEST
- global_total_width = total_width;
-#endif
- *result = (char *) malloc (total_width);
- if (*result != NULL)
- return vsprintf (*result, format, args);
- else
- return -1;
-}
-
-int
-vasprintf (char **result, const char *format,
-#if defined (_BSD_VA_LIST_) && defined (__FreeBSD__)
- _BSD_VA_LIST_ args)
-#else
- va_list args)
-#endif
-{
- return int_vasprintf (result, format, args);
-}
-
-#ifdef TEST
-static void ATTRIBUTE_PRINTF_1
-checkit (const char *format, ...)
-{
- char *result;
- VA_OPEN (args, format);
- VA_FIXEDARG (args, const char *, format);
- vasprintf (&result, format, args);
- VA_CLOSE (args);
-
- if (strlen (result) < (size_t) global_total_width)
- printf ("PASS: ");
- else
- printf ("FAIL: ");
- printf ("%d %s\n", global_total_width, result);
-
- free (result);
-}
-
-extern int main (void);
-
-int
-main (void)
-{
- checkit ("%d", 0x12345678);
- checkit ("%200d", 5);
- checkit ("%.300d", 6);
- checkit ("%100.150d", 7);
- checkit ("%s", "jjjjjjjjjiiiiiiiiiiiiiiioooooooooooooooooppppppppppppaa\n\
-777777777777777777333333333333366666666666622222222222777777777777733333");
- checkit ("%f%s%d%s", 1.0, "foo", 77, "asdjffffffffffffffiiiiiiiiiiixxxxx");
-
- return 0;
-}
-#endif /* TEST */
diff --git a/gcc-4.7/libiberty/vfork.c b/gcc-4.7/libiberty/vfork.c
deleted file mode 100644
index eb4ff622b..000000000
--- a/gcc-4.7/libiberty/vfork.c
+++ /dev/null
@@ -1,22 +0,0 @@
-/* Emulate vfork using just plain fork, for systems without a real vfork.
- This function is in the public domain. */
-
-/*
-
-@deftypefn Supplemental int vfork (void)
-
-Emulates @code{vfork} by calling @code{fork} and returning its value.
-
-@end deftypefn
-
-*/
-
-#include "ansidecl.h"
-
-extern int fork (void);
-
-int
-vfork (void)
-{
- return (fork ());
-}
diff --git a/gcc-4.7/libiberty/vfprintf.c b/gcc-4.7/libiberty/vfprintf.c
deleted file mode 100644
index 9bd3ed555..000000000
--- a/gcc-4.7/libiberty/vfprintf.c
+++ /dev/null
@@ -1,15 +0,0 @@
-/* Provide a version vfprintf in terms of _doprnt.
- By Kaveh Ghazi (ghazi@caip.rutgers.edu) 3/29/98
- Copyright (C) 1998 Free Software Foundation, Inc.
- */
-
-#include "ansidecl.h"
-#include <stdarg.h>
-#include <stdio.h>
-#undef vfprintf
-
-int
-vfprintf (FILE *stream, const char *format, va_list ap)
-{
- return _doprnt (format, ap, stream);
-}
diff --git a/gcc-4.7/libiberty/vprintf.c b/gcc-4.7/libiberty/vprintf.c
deleted file mode 100644
index c3193ac81..000000000
--- a/gcc-4.7/libiberty/vprintf.c
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-
-@deftypefn Supplemental int vprintf (const char *@var{format}, va_list @var{ap})
-@deftypefnx Supplemental int vfprintf (FILE *@var{stream}, @
- const char *@var{format}, va_list @var{ap})
-@deftypefnx Supplemental int vsprintf (char *@var{str}, @
- const char *@var{format}, va_list @var{ap})
-
-These functions are the same as @code{printf}, @code{fprintf}, and
-@code{sprintf}, respectively, except that they are called with a
-@code{va_list} instead of a variable number of arguments. Note that
-they do not call @code{va_end}; this is the application's
-responsibility. In @libib{} they are implemented in terms of the
-nonstandard but common function @code{_doprnt}.
-
-@end deftypefn
-
-*/
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-#undef vprintf
-int
-vprintf (const char *format, va_list ap)
-{
- return vfprintf (stdout, format, ap);
-}
diff --git a/gcc-4.7/libiberty/vsnprintf.c b/gcc-4.7/libiberty/vsnprintf.c
deleted file mode 100644
index 6c0afa672..000000000
--- a/gcc-4.7/libiberty/vsnprintf.c
+++ /dev/null
@@ -1,148 +0,0 @@
-/* Implement the vsnprintf function.
- Copyright (C) 2003, 2004, 2005, 2011 Free Software Foundation, Inc.
- Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
-
-This file is part of the libiberty library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-/*
-
-@deftypefn Supplemental int vsnprintf (char *@var{buf}, size_t @var{n}, @
- const char *@var{format}, va_list @var{ap})
-
-This function is similar to @code{vsprintf}, but it will write to
-@var{buf} at most @code{@var{n}-1} bytes of text, followed by a
-terminating null byte, for a total of @var{n} bytes. On error the
-return value is -1, otherwise it returns the number of characters that
-would have been printed had @var{n} been sufficiently large,
-regardless of the actual value of @var{n}. Note some pre-C99 system
-libraries do not implement this correctly so users cannot generally
-rely on the return value if the system version of this function is
-used.
-
-@end deftypefn
-
-*/
-
-#include "config.h"
-#include "ansidecl.h"
-
-#include <stdarg.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-
-#include "libiberty.h"
-
-/* This implementation relies on a working vasprintf. */
-int
-vsnprintf (char *s, size_t n, const char *format, va_list ap)
-{
- char *buf = 0;
- int result = vasprintf (&buf, format, ap);
-
- if (!buf)
- return -1;
- if (result < 0)
- {
- free (buf);
- return -1;
- }
-
- result = strlen (buf);
- if (n > 0)
- {
- if ((long) n > result)
- memcpy (s, buf, result+1);
- else
- {
- memcpy (s, buf, n-1);
- s[n - 1] = 0;
- }
- }
- free (buf);
- return result;
-}
-
-#ifdef TEST
-/* Set the buffer to a known state. */
-#define CLEAR(BUF) do { memset ((BUF), 'X', sizeof (BUF)); (BUF)[14] = '\0'; } while (0)
-/* For assertions. */
-#define VERIFY(P) do { if (!(P)) abort(); } while (0)
-
-static int ATTRIBUTE_PRINTF_3
-checkit (char *s, size_t n, const char *format, ...)
-{
- int result;
- VA_OPEN (ap, format);
- VA_FIXEDARG (ap, char *, s);
- VA_FIXEDARG (ap, size_t, n);
- VA_FIXEDARG (ap, const char *, format);
- result = vsnprintf (s, n, format, ap);
- VA_CLOSE (ap);
- return result;
-}
-
-extern int main (void);
-int
-main (void)
-{
- char buf[128];
- int status;
-
- CLEAR (buf);
- status = checkit (buf, 10, "%s:%d", "foobar", 9);
- VERIFY (status==8 && memcmp (buf, "foobar:9\0XXXXX\0", 15) == 0);
-
- CLEAR (buf);
- status = checkit (buf, 9, "%s:%d", "foobar", 9);
- VERIFY (status==8 && memcmp (buf, "foobar:9\0XXXXX\0", 15) == 0);
-
- CLEAR (buf);
- status = checkit (buf, 8, "%s:%d", "foobar", 9);
- VERIFY (status==8 && memcmp (buf, "foobar:\0XXXXXX\0", 15) == 0);
-
- CLEAR (buf);
- status = checkit (buf, 7, "%s:%d", "foobar", 9);
- VERIFY (status==8 && memcmp (buf, "foobar\0XXXXXXX\0", 15) == 0);
-
- CLEAR (buf);
- status = checkit (buf, 6, "%s:%d", "foobar", 9);
- VERIFY (status==8 && memcmp (buf, "fooba\0XXXXXXXX\0", 15) == 0);
-
- CLEAR (buf);
- status = checkit (buf, 2, "%s:%d", "foobar", 9);
- VERIFY (status==8 && memcmp (buf, "f\0XXXXXXXXXXXX\0", 15) == 0);
-
- CLEAR (buf);
- status = checkit (buf, 1, "%s:%d", "foobar", 9);
- VERIFY (status==8 && memcmp (buf, "\0XXXXXXXXXXXXX\0", 15) == 0);
-
- CLEAR (buf);
- status = checkit (buf, 0, "%s:%d", "foobar", 9);
- VERIFY (status==8 && memcmp (buf, "XXXXXXXXXXXXXX\0", 15) == 0);
-
- return 0;
-}
-#endif /* TEST */
diff --git a/gcc-4.7/libiberty/vsprintf.c b/gcc-4.7/libiberty/vsprintf.c
deleted file mode 100644
index 99e704493..000000000
--- a/gcc-4.7/libiberty/vsprintf.c
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Simple implementation of vsprintf for systems without it.
- Highly system-dependent, but should work on most "traditional"
- implementations of stdio; newer ones should already have vsprintf.
- Written by Per Bothner of Cygnus Support.
- Based on libg++'s "form" (written by Doug Lea; dl@rocky.oswego.edu).
- Copyright (C) 1991, 1995, 2002 Free Software Foundation, Inc.
-
-This file is part of the libiberty library. This library is free
-software; you can redistribute it and/or modify it under the
-terms of the GNU General Public License as published by the
-Free Software Foundation; either version 2, or (at your option)
-any later version.
-
-This library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with GNU CC; see the file COPYING. If not, write to
-the Free Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA.
-
-As a special exception, if you link this library with files
-compiled with a GNU compiler to produce an executable, this does not cause
-the resulting executable to be covered by the GNU General Public License.
-This exception does not however invalidate any other reasons why
-the executable file might be covered by the GNU General Public License. */
-
-#include <ansidecl.h>
-#include <stdarg.h>
-#include <stdio.h>
-#undef vsprintf
-
-#if defined _IOSTRG && defined _IOWRT
-
-int
-vsprintf (char *buf, const char *format, va_list ap)
-{
- FILE b;
- int ret;
-#ifdef VMS
- b->_flag = _IOWRT|_IOSTRG;
- b->_ptr = buf;
- b->_cnt = 12000;
-#else
- b._flag = _IOWRT|_IOSTRG;
- b._ptr = buf;
- b._cnt = 12000;
-#endif
- ret = _doprnt(format, ap, &b);
- putc('\0', &b);
- return ret;
-
-}
-
-#endif
diff --git a/gcc-4.7/libiberty/waitpid.c b/gcc-4.7/libiberty/waitpid.c
deleted file mode 100644
index fd519d769..000000000
--- a/gcc-4.7/libiberty/waitpid.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-
-@deftypefn Supplemental int waitpid (int @var{pid}, int *@var{status}, int)
-
-This is a wrapper around the @code{wait} function. Any ``special''
-values of @var{pid} depend on your implementation of @code{wait}, as
-does the return value. The third argument is unused in @libib{}.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-
-/* On some systems (such as WindISS), you must include <sys/types.h>
- to get the definition of "pid_t" before you include <sys/wait.h>. */
-#include <sys/types.h>
-
-#ifdef HAVE_SYS_WAIT_H
-#include <sys/wait.h>
-#endif
-
-pid_t
-waitpid (pid_t pid, int *stat_loc, int options ATTRIBUTE_UNUSED)
-{
- for (;;)
- {
- int wpid = wait(stat_loc);
- if (wpid == pid || wpid == -1)
- return wpid;
- }
-}
diff --git a/gcc-4.7/libiberty/xatexit.c b/gcc-4.7/libiberty/xatexit.c
deleted file mode 100644
index 6fdad9ed8..000000000
--- a/gcc-4.7/libiberty/xatexit.c
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (c) 1990 Regents of the University of California.
- * All rights reserved.
- *
- * %sccs.include.redist.c%
- */
-
-
-/*
-
-@deftypefun int xatexit (void (*@var{fn}) (void))
-
-Behaves as the standard @code{atexit} function, but with no limit on
-the number of registered functions. Returns 0 on success, or @minus{}1 on
-failure. If you use @code{xatexit} to register functions, you must use
-@code{xexit} to terminate your program.
-
-@end deftypefun
-
-*/
-
-/* Adapted from newlib/libc/stdlib/{,at}exit.[ch].
- If you use xatexit, you must call xexit instead of exit. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-
-#include <stdio.h>
-
-#include <stddef.h>
-
-#if VMS
-#include <stdlib.h>
-#include <unixlib.h>
-#else
-/* For systems with larger pointers than ints, this must be declared. */
-PTR malloc (size_t);
-#endif
-
-static void xatexit_cleanup (void);
-
-/* Pointer to function run by xexit. */
-extern void (*_xexit_cleanup) (void);
-
-#define XATEXIT_SIZE 32
-
-struct xatexit {
- struct xatexit *next; /* next in list */
- int ind; /* next index in this table */
- void (*fns[XATEXIT_SIZE]) (void); /* the table itself */
-};
-
-/* Allocate one struct statically to guarantee that we can register
- at least a few handlers. */
-static struct xatexit xatexit_first;
-
-/* Points to head of LIFO stack. */
-static struct xatexit *xatexit_head = &xatexit_first;
-
-/* Register function FN to be run by xexit.
- Return 0 if successful, -1 if not. */
-
-int
-xatexit (void (*fn) (void))
-{
- register struct xatexit *p;
-
- /* Tell xexit to call xatexit_cleanup. */
- if (!_xexit_cleanup)
- _xexit_cleanup = xatexit_cleanup;
-
- p = xatexit_head;
- if (p->ind >= XATEXIT_SIZE)
- {
- if ((p = (struct xatexit *) malloc (sizeof *p)) == NULL)
- return -1;
- p->ind = 0;
- p->next = xatexit_head;
- xatexit_head = p;
- }
- p->fns[p->ind++] = fn;
- return 0;
-}
-
-/* Call any cleanup functions. */
-
-static void
-xatexit_cleanup (void)
-{
- register struct xatexit *p;
- register int n;
-
- for (p = xatexit_head; p; p = p->next)
- for (n = p->ind; --n >= 0;)
- (*p->fns[n]) ();
-}
diff --git a/gcc-4.7/libiberty/xexit.c b/gcc-4.7/libiberty/xexit.c
deleted file mode 100644
index 421e5e238..000000000
--- a/gcc-4.7/libiberty/xexit.c
+++ /dev/null
@@ -1,52 +0,0 @@
-/* xexit.c -- Run any exit handlers, then exit.
- Copyright (C) 1994, 95, 1997 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If not, write
-to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Replacement void xexit (int @var{code})
-
-Terminates the program. If any functions have been registered with
-the @code{xatexit} replacement function, they will be called first.
-Termination is handled via the system's normal @code{exit} call.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <stdio.h>
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#include "libiberty.h"
-
-
-/* This variable is set by xatexit if it is called. This way, xmalloc
- doesn't drag xatexit into the link. */
-void (*_xexit_cleanup) (void);
-
-void
-xexit (int code)
-{
- if (_xexit_cleanup != NULL)
- (*_xexit_cleanup) ();
- exit (code);
-}
diff --git a/gcc-4.7/libiberty/xmalloc.c b/gcc-4.7/libiberty/xmalloc.c
deleted file mode 100644
index 3e97aab56..000000000
--- a/gcc-4.7/libiberty/xmalloc.c
+++ /dev/null
@@ -1,184 +0,0 @@
-/* memory allocation routines with error checking.
- Copyright 1989, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Replacement void* xmalloc (size_t)
-
-Allocate memory without fail. If @code{malloc} fails, this will print
-a message to @code{stderr} (using the name set by
-@code{xmalloc_set_program_name},
-if any) and then call @code{xexit}. Note that it is therefore safe for
-a program to contain @code{#define malloc xmalloc} in its source.
-
-@end deftypefn
-
-@deftypefn Replacement void* xrealloc (void *@var{ptr}, size_t @var{size})
-Reallocate memory without fail. This routine functions like @code{realloc},
-but will behave the same as @code{xmalloc} if memory cannot be found.
-
-@end deftypefn
-
-@deftypefn Replacement void* xcalloc (size_t @var{nelem}, size_t @var{elsize})
-
-Allocate memory without fail, and set it to zero. This routine functions
-like @code{calloc}, but will behave the same as @code{xmalloc} if memory
-cannot be found.
-
-@end deftypefn
-
-@deftypefn Replacement void xmalloc_set_program_name (const char *@var{name})
-
-You can use this to set the name of the program used by
-@code{xmalloc_failed} when printing a failure message.
-
-@end deftypefn
-
-@deftypefn Replacement void xmalloc_failed (size_t)
-
-This function is not meant to be called by client code, and is listed
-here for completeness only. If any of the allocation routines fail, this
-function will be called to print an error message and terminate execution.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-
-#include <stdio.h>
-
-#include <stddef.h>
-
-#if VMS
-#include <stdlib.h>
-#include <unixlib.h>
-#else
-/* For systems with larger pointers than ints, these must be declared. */
-# if HAVE_STDLIB_H && HAVE_UNISTD_H && HAVE_DECL_MALLOC \
- && HAVE_DECL_REALLOC && HAVE_DECL_CALLOC && HAVE_DECL_SBRK
-# include <stdlib.h>
-# include <unistd.h>
-# else
-# ifdef __cplusplus
-extern "C" {
-# endif /* __cplusplus */
-void *malloc (size_t);
-void *realloc (void *, size_t);
-void *calloc (size_t, size_t);
-void *sbrk (ptrdiff_t);
-# ifdef __cplusplus
-}
-# endif /* __cplusplus */
-# endif /* HAVE_STDLIB_H ... */
-#endif /* VMS */
-
-/* The program name if set. */
-static const char *name = "";
-
-#ifdef HAVE_SBRK
-/* The initial sbrk, set when the program name is set. Not used for win32
- ports other than cygwin32. */
-static char *first_break = NULL;
-#endif /* HAVE_SBRK */
-
-void
-xmalloc_set_program_name (const char *s)
-{
- name = s;
-#ifdef HAVE_SBRK
- /* Win32 ports other than cygwin32 don't have brk() */
- if (first_break == NULL)
- first_break = (char *) sbrk (0);
-#endif /* HAVE_SBRK */
-}
-
-void
-xmalloc_failed (size_t size)
-{
-#ifdef HAVE_SBRK
- extern char **environ;
- size_t allocated;
-
- if (first_break != NULL)
- allocated = (char *) sbrk (0) - first_break;
- else
- allocated = (char *) sbrk (0) - (char *) &environ;
- fprintf (stderr,
- "\n%s%sout of memory allocating %lu bytes after a total of %lu bytes\n",
- name, *name ? ": " : "",
- (unsigned long) size, (unsigned long) allocated);
-#else /* HAVE_SBRK */
- fprintf (stderr,
- "\n%s%sout of memory allocating %lu bytes\n",
- name, *name ? ": " : "",
- (unsigned long) size);
-#endif /* HAVE_SBRK */
- xexit (1);
-}
-
-PTR
-xmalloc (size_t size)
-{
- PTR newmem;
-
- if (size == 0)
- size = 1;
- newmem = malloc (size);
- if (!newmem)
- xmalloc_failed (size);
-
- return (newmem);
-}
-
-PTR
-xcalloc (size_t nelem, size_t elsize)
-{
- PTR newmem;
-
- if (nelem == 0 || elsize == 0)
- nelem = elsize = 1;
-
- newmem = calloc (nelem, elsize);
- if (!newmem)
- xmalloc_failed (nelem * elsize);
-
- return (newmem);
-}
-
-PTR
-xrealloc (PTR oldmem, size_t size)
-{
- PTR newmem;
-
- if (size == 0)
- size = 1;
- if (!oldmem)
- newmem = malloc (size);
- else
- newmem = realloc (oldmem, size);
- if (!newmem)
- xmalloc_failed (size);
-
- return (newmem);
-}
diff --git a/gcc-4.7/libiberty/xmemdup.c b/gcc-4.7/libiberty/xmemdup.c
deleted file mode 100644
index aa56f0bf5..000000000
--- a/gcc-4.7/libiberty/xmemdup.c
+++ /dev/null
@@ -1,39 +0,0 @@
-/* xmemdup.c -- Duplicate a memory buffer, using xcalloc.
- This trivial function is in the public domain.
- Jeff Garzik, September 1999. */
-
-/*
-
-@deftypefn Replacement void* xmemdup (void *@var{input}, @
- size_t @var{copy_size}, size_t @var{alloc_size})
-
-Duplicates a region of memory without fail. First, @var{alloc_size} bytes
-are allocated, then @var{copy_size} bytes from @var{input} are copied into
-it, and the new memory is returned. If fewer bytes are copied than were
-allocated, the remaining memory is zeroed.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-
-#include <sys/types.h> /* For size_t. */
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-# ifdef HAVE_STRINGS_H
-# include <strings.h>
-# endif
-#endif
-
-PTR
-xmemdup (const PTR input, size_t copy_size, size_t alloc_size)
-{
- PTR output = xcalloc (1, alloc_size);
- return (PTR) memcpy (output, input, copy_size);
-}
diff --git a/gcc-4.7/libiberty/xstrdup.c b/gcc-4.7/libiberty/xstrdup.c
deleted file mode 100644
index fa12c96a3..000000000
--- a/gcc-4.7/libiberty/xstrdup.c
+++ /dev/null
@@ -1,36 +0,0 @@
-/* xstrdup.c -- Duplicate a string in memory, using xmalloc.
- This trivial function is in the public domain.
- Ian Lance Taylor, Cygnus Support, December 1995. */
-
-/*
-
-@deftypefn Replacement char* xstrdup (const char *@var{s})
-
-Duplicates a character string without fail, using @code{xmalloc} to
-obtain memory.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <sys/types.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-# ifdef HAVE_STRINGS_H
-# include <strings.h>
-# endif
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-
-char *
-xstrdup (const char *s)
-{
- register size_t len = strlen (s) + 1;
- register char *ret = XNEWVEC (char, len);
- return (char *) memcpy (ret, s, len);
-}
diff --git a/gcc-4.7/libiberty/xstrerror.c b/gcc-4.7/libiberty/xstrerror.c
deleted file mode 100644
index 2ea2200e9..000000000
--- a/gcc-4.7/libiberty/xstrerror.c
+++ /dev/null
@@ -1,79 +0,0 @@
-/* xstrerror.c -- jacket routine for more robust strerror() usage.
- Fri Jun 16 18:30:00 1995 Pat Rankin <rankin@eql.caltech.edu>
- This code is in the public domain. */
-
-/*
-
-@deftypefn Replacement char* xstrerror (int @var{errnum})
-
-Behaves exactly like the standard @code{strerror} function, but
-will never return a @code{NULL} pointer.
-
-@end deftypefn
-
-*/
-
-#include <stdio.h>
-
-#include "config.h"
-#include "libiberty.h"
-
-#ifdef VMS
-# include <errno.h>
-# if !defined (__STRICT_ANSI__) && !defined (__HIDE_FORBIDDEN_NAMES)
-# ifdef __cplusplus
-extern "C" {
-# endif /* __cplusplus */
-extern char *strerror (int,...);
-# define DONT_DECLARE_STRERROR
-# ifdef __cplusplus
-}
-# endif /* __cplusplus */
-# endif
-#endif /* VMS */
-
-
-#ifndef DONT_DECLARE_STRERROR
-# ifdef __cplusplus
-extern "C" {
-# endif /* __cplusplus */
-extern char *strerror (int);
-# ifdef __cplusplus
-}
-# endif /* __cplusplus */
-#endif
-
-/* If strerror returns NULL, we'll format the number into a static buffer. */
-
-#define ERRSTR_FMT "undocumented error #%d"
-static char xstrerror_buf[sizeof ERRSTR_FMT + 20];
-
-/* Like strerror, but result is never a null pointer. */
-
-char *
-xstrerror (int errnum)
-{
- char *errstr;
-#ifdef VMS
- char *(*vmslib_strerror) (int,...);
-
- /* Override any possibly-conflicting declaration from system header. */
- vmslib_strerror = (char *(*) (int,...)) strerror;
- /* Second argument matters iff first is EVMSERR, but it's simpler to
- pass it unconditionally. `vaxc$errno' is declared in <errno.h>
- and maintained by the run-time library in parallel to `errno'.
- We assume that `errnum' corresponds to the last value assigned to
- errno by the run-time library, hence vaxc$errno will be relevant. */
- errstr = (*vmslib_strerror) (errnum, vaxc$errno);
-#else
- errstr = strerror (errnum);
-#endif
-
- /* If `errnum' is out of range, result might be NULL. We'll fix that. */
- if (!errstr)
- {
- sprintf (xstrerror_buf, ERRSTR_FMT, errnum);
- errstr = xstrerror_buf;
- }
- return errstr;
-}
diff --git a/gcc-4.7/libiberty/xstrndup.c b/gcc-4.7/libiberty/xstrndup.c
deleted file mode 100644
index 0a41f608e..000000000
--- a/gcc-4.7/libiberty/xstrndup.c
+++ /dev/null
@@ -1,60 +0,0 @@
-/* Implement the xstrndup function.
- Copyright (C) 2005 Free Software Foundation, Inc.
- Written by Kaveh R. Ghazi <ghazi@caip.rutgers.edu>.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
-Boston, MA 02110-1301, USA. */
-
-/*
-
-@deftypefn Replacement char* xstrndup (const char *@var{s}, size_t @var{n})
-
-Returns a pointer to a copy of @var{s} with at most @var{n} characters
-without fail, using @code{xmalloc} to obtain memory. The result is
-always NUL terminated.
-
-@end deftypefn
-
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <sys/types.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#else
-# ifdef HAVE_STRINGS_H
-# include <strings.h>
-# endif
-#endif
-#include "ansidecl.h"
-#include "libiberty.h"
-
-char *
-xstrndup (const char *s, size_t n)
-{
- char *result;
- size_t len = strlen (s);
-
- if (n < len)
- len = n;
-
- result = XNEWVEC (char, len + 1);
-
- result[len] = '\0';
- return (char *) memcpy (result, s, len);
-}