import from github

This commit is contained in:
2022-05-19 17:14:13 +00:00
parent 5247c34f50
commit ab32b30591
12612 changed files with 1905035 additions and 83 deletions

482
agbcc/libiberty/COPYING.LIB Executable file
View File

@ -0,0 +1,482 @@
GNU LIBRARY GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1991 Free Software Foundation, Inc.
59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 library GPL. It is
numbered 2 because it goes with version 2 of the ordinary GPL.]
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 Library General Public License, applies to some
specially designated Free Software Foundation software, and to any
other libraries whose authors decide to use it. You can use it for
your libraries, too.
When we speak of free software, we are referring to freedom, 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 or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the 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 a program 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.
Our method of protecting your rights has two steps: (1) copyright
the library, and (2) offer you this license which gives you legal
permission to copy, distribute and/or modify the library.
Also, for each distributor's protection, we want to make certain
that everyone understands that there is no warranty for this free
library. If the library is modified by someone else and passed on, we
want its recipients to know that what they have is not the original
version, so that any problems introduced by others will not reflect on
the original authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that companies distributing free
software will individually obtain patent licenses, thus in effect
transforming the program into proprietary software. To prevent this,
we have made it clear that any patent must be licensed for everyone's
free use or not licensed at all.
Most GNU software, including some libraries, is covered by the ordinary
GNU General Public License, which was designed for utility programs. This
license, the GNU Library General Public License, applies to certain
designated libraries. This license is quite different from the ordinary
one; be sure to read it in full, and don't assume that anything in it is
the same as in the ordinary license.
The reason we have a separate public license for some libraries is that
they blur the distinction we usually make between modifying or adding to a
program and simply using it. Linking a program with a library, without
changing the library, is in some sense simply using the library, and is
analogous to running a utility program or application program. However, in
a textual and legal sense, the linked executable is a combined work, a
derivative of the original library, and the ordinary General Public License
treats it as such.
Because of this blurred distinction, using the ordinary General
Public License for libraries did not effectively promote software
sharing, because most developers did not use the libraries. We
concluded that weaker conditions might promote sharing better.
However, unrestricted linking of non-free programs would deprive the
users of those programs of all benefit from the free status of the
libraries themselves. This Library General Public License is intended to
permit developers of non-free programs to use free libraries, while
preserving your freedom as a user of such programs to change the free
libraries that are incorporated in them. (We have not seen how to achieve
this as regards changes in header files, but we have achieved it as regards
changes in the actual functions of the Library.) The hope is that this
will lead to faster development of free libraries.
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, while the latter only
works together with the library.
Note that it is possible for a library to be covered by the ordinary
General Public License rather than by this special one.
GNU LIBRARY GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License Agreement applies to any software library which
contains a notice placed by the copyright holder or other authorized
party saying it may be distributed under the terms of this Library
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 compile 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) 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.
c) 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.
d) 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 source code 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 to
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 Library 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
Appendix: 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 Library General Public
License as published by the Free Software Foundation; either
version 2 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
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Software Foundation, Inc., 59 Temple Place - Suite 330, Boston,
MA 02111-1307, 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!

3132
agbcc/libiberty/ChangeLog Executable file
View File

@ -0,0 +1,3132 @@
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-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.
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.
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.
* 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.
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:

246
agbcc/libiberty/Makefile.in Executable file
View File

@ -0,0 +1,246 @@
#
# Makefile
# Copyright (C) 1990, 91, 92, 93, 94, 95, 96, 97, 1998
# 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., 59 Temple Place - Suite 330,
# Boston, MA 02111-1307, USA.
#
# This file was written by K. Richard Pixley <rich@cygnus.com>.
#
# Makefile for libiberty directory
#
srcdir = @srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
SHELL = @SHELL@
# Multilib support variables.
MULTISRCTOP =
MULTIBUILDTOP =
MULTIDIRS =
MULTISUBDIR =
MULTIDO = true
MULTICLEAN = true
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
AR = @AR@
AR_FLAGS = rc
CC = @CC@
CFLAGS = @CFLAGS@
LIBCFLAGS = $(CFLAGS)
RANLIB = @RANLIB@
PICFLAG =
MAKEOVERRIDES =
TARGETLIB = libiberty.a
LIBOBJS = @LIBOBJS@
ALLOCA = @ALLOCA@
# 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)" \
"LIBCFLAGS=$(LIBCFLAGS)" \
"EXTRA_OFILES=$(EXTRA_OFILES)" \
"HDEFINES=$(HDEFINES)" \
"INSTALL=$(INSTALL)" \
"INSTALL_DATA=$(INSTALL_DATA)" \
"INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
"LDFLAGS=$(LDFLAGS)" \
"LOADLIBES=$(LOADLIBES)" \
"RANLIB=$(RANLIB)" \
"SHELL=$(SHELL)"
all: stamp-picdir $(TARGETLIB) needed-list required-list
@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=all
.PHONY: check installcheck
check installcheck:
@host_makefile_frag@
INCDIR=$(srcdir)/$(MULTISRCTOP)../include
COMPILE.c = $(CC) -c @DEFS@ $(LIBCFLAGS) -I. -I$(INCDIR) $(HDEFINES)
.c.o:
test x"$(enable_shared)" != xyes || \
$(COMPILE.c) $(PICFLAG) $< -o pic/$@
$(COMPILE.c) $<
info install-info clean-info dvi:
# Include files that are in this directory.
HFILES = alloca-conf.h
# NOTE: If you add new files to the library, add them to this list
# (alphabetical), and add them to REQUIRED_OFILES or funcs in
# configure.in.
CFILES = asprintf.c alloca.c argv.c atexit.c basename.c bcmp.c bcopy.c \
bzero.c choose-temp.c clock.c concat.c fdmatch.c \
fnmatch.c getcwd.c getopt.c getopt1.c getpagesize.c \
getruntime.c floatformat.c hex.c index.c insque.c memchr.c \
memcmp.c memcpy.c memmove.c memset.c mkstemp.c objalloc.c obstack.c \
pexecute.c random.c rename.c rindex.c sigsetmask.c spaces.c \
splay-tree.c strcasecmp.c strncasecmp.c strchr.c strdup.c strerror.c \
strrchr.c strsignal.c strstr.c strtod.c strtol.c strtoul.c \
tmpnam.c vasprintf.c vfork.c vfprintf.c vprintf.c vsprintf.c \
waitpid.c xatexit.c xexit.c xmalloc.c xstrdup.c xstrerror.c
# These are always included in the library.
REQUIRED_OFILES = argv.o choose-temp.o concat.o \
fdmatch.o fnmatch.o getopt.o getopt1.o getruntime.o hex.o \
floatformat.o mkstemp.o objalloc.o obstack.o pexecute.o spaces.o \
splay-tree.o strerror.o strsignal.o xatexit.o xexit.o xmalloc.o \
xstrdup.o xstrerror.o
$(TARGETLIB): $(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) $(ALLOCA)
rm -f $(TARGETLIB)
$(AR) $(AR_FLAGS) $(TARGETLIB) \
$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) $(ALLOCA)
$(RANLIB) $(TARGETLIB)
INSTALL_DEST = @INSTALL_DEST@
install: install_to_$(INSTALL_DEST)
install_to_libdir: all
$(INSTALL_DATA) $(TARGETLIB) $(libdir)$(MULTISUBDIR)/$(TARGETLIB).n
( cd $(libdir)$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB).n )
mv -f $(libdir)$(MULTISUBDIR)/$(TARGETLIB).n $(libdir)$(MULTISUBDIR)/$(TARGETLIB)
@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
install_to_tooldir: all
$(INSTALL_DATA) $(TARGETLIB) $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB).n
( cd $(tooldir)/lib$(MULTISUBDIR) ; $(RANLIB) $(TARGETLIB).n )
mv -f $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB).n $(tooldir)/lib$(MULTISUBDIR)/$(TARGETLIB)
@$(MULTIDO) $(FLAGS_TO_PASS) multi-do DO=install
# needed-list is used by libstdc++.
needed-list: Makefile
f="$(LIBOBJS) $(ALLOCA) $(EXTRA_OFILES)"; \
case $$f in \
*alloca.o*) f="$$f xmalloc.o xexit.o" ;; \
esac; \
echo $$f > needed-list
# 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"$(enable_shared)" = xyes ] && [ ! -d pic ]; then \
mkdir pic; \
else true; fi
touch stamp-picdir
.PHONY: all etags tags ls clean stage1 stage2
etags tags: TAGS
TAGS: $(CFILES) $(HFILES)
etags `for i in $(HFILES) $(CFILES); do echo $(srcdir)/$$i ; done`
# The standalone demangler (c++filt) has been moved to binutils.
demangle:
@echo "The standalone demangler, now named c++filt, is now"
@echo "a part of binutils."
@false
ls:
@echo Makefile $(HFILES) $(CFILES)
# Need to deal with profiled libraries, too.
mostlyclean:
rm -rf *.o pic core errs \#* *.E a.out
rm -f needed.awk needed2.awk errors dummy needed-list config.h stamp-*
rm -f $(CONFIG_H) $(NEEDED_LIST) stamp-picdir
@$(MULTICLEAN) multi-clean DO=mostlyclean
clean: mostlyclean
rm -f *.a required-list tmpmulti.out
@$(MULTICLEAN) multi-clean DO=clean
distclean: clean
@$(MULTICLEAN) multi-clean DO=distclean
rm -f *~ Makefile config.status xhost-mkfrag TAGS multilib.out
rm -f config.log
maintainer-clean realclean: distclean
force:
Makefile: $(srcdir)/Makefile.in config.status
CONFIG_FILES=Makefile CONFIG_HEADERS= $(SHELL) ./config.status
config.h: stamp-h ; @true
stamp-h: config.in config.status
CONFIG_FILES= CONFIG_HEADERS=config.h:config.in $(SHELL) ./config.status
config.status: $(srcdir)/configure $(srcdir)/config.table
$(SHELL) ./config.status --recheck
$(REQUIRED_OFILES) $(EXTRA_OFILES) $(LIBOBJS) $(ALLOCA): stamp-picdir
alloca.o: config.h
atexit.o: config.h
argv.o: config.h alloca-conf.h $(INCDIR)/libiberty.h
basename.o: $(INCDIR)/libiberty.h
choose-temp.o: config.h
clock.o: config.h
concat.o: $(INCDIR)/libiberty.h
fdmatch.o: $(INCDIR)/libiberty.h
fnmatch.o: config.h $(INCDIR)/fnmatch.h
getcwd.o: config.h
getopt.o: config.h $(INCDIR)/getopt.h
getopt1.o: config.h $(INCDIR)/getopt.h
getpagesize.o: config.h
getruntime.o: config.h $(INCDIR)/libiberty.h
hex.o: $(INCDIR)/libiberty.h
floatformat.o: $(INCDIR)/floatformat.h
mkstemp.o: config.h
objalloc.o: $(INCDIR)/objalloc.h
obstack.o: config.h $(INCDIR)/obstack.h
pexecute.o: config.h $(INCDIR)/libiberty.h
spaces.o: $(INCDIR)/libiberty.h
splay-tree.o: config.h $(INCDIR)/libiberty.h $(INCDIR)/splay-tree.h $(INCDIR)/ansidecl.h
strerror.o: config.h $(INCDIR)/libiberty.h
strsignal.o: config.h $(INCDIR)/libiberty.h
xatexit.o: $(INCDIR)/libiberty.h
xexit.o: $(INCDIR)/libiberty.h
xmalloc.o: $(INCDIR)/libiberty.h
xstrdup.o: $(INCDIR)/libiberty.h
xstrerror.o: config.h $(INCDIR)/libiberty.h

65
agbcc/libiberty/README Executable file
View File

@ -0,0 +1,65 @@
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 and fixes to "bug-gnu-utils@prep.ai.mit.edu". 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 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.
* Add the function to name to the funcs shell variable in
configure.in.
* 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.
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.

11
agbcc/libiberty/acconfig.h Executable file
View File

@ -0,0 +1,11 @@
/* Define if you have the sys_errlist variable. */
#undef HAVE_SYS_ERRLIST
/* Define if you have the sys_nerr variable. */
#undef HAVE_SYS_NERR
/* Define if you have the sys_siglist variable. */
#undef HAVE_SYS_SIGLIST
/* Define if you have the strerror function. */
#undef HAVE_STRERROR

24
agbcc/libiberty/alloca-conf.h Executable file
View File

@ -0,0 +1,24 @@
#include "config.h"
#ifdef __GNUC__
# ifndef alloca
# define alloca __builtin_alloca
# endif
#else /* ! defined (__GNUC__) */
# ifdef _AIX
#pragma alloca
# else
# ifdef HAVE_ALLOCA_H
# include <alloca.h>
# else /* ! defined (HAVE_ALLOCA_H) */
# ifdef __STDC__
extern PTR alloca (size_t);
# else /* ! defined (__STDC__) */
extern PTR alloca ();
# endif /* ! defined (__STDC__) */
# endif /* ! defined (HAVE_ALLOCA_H) */
# ifdef _WIN32
# include <malloc.h>
# endif
# endif /* ! defined (_AIX) */
#endif /* ! defined (__GNUC__) */

505
agbcc/libiberty/alloca.c Executable file
View File

@ -0,0 +1,505 @@
/* 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. */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#ifdef HAVE_STRING_H
#include <string.h>
#endif
#ifdef HAVE_STDLIB_H
#include <stdlib.h>
#endif
#ifdef emacs
#include "blockinput.h"
#endif
/* If compiling with GCC 2, this file's not needed. Except of course if
the C alloca is explicitly requested. */
#if defined (USE_C_ALLOCA) || !defined (__GNUC__) || __GNUC__ < 2
/* If someone has defined alloca as a macro,
there must be some other way alloca is supposed to work. */
#ifndef alloca
#ifdef emacs
#ifdef static
/* actually, only want this if static is defined as ""
-- this is for usg, in which emacs must undefine static
in order to make unexec workable
*/
#ifndef STACK_DIRECTION
you
lose
-- must know STACK_DIRECTION at compile-time
#endif /* STACK_DIRECTION undefined */
#endif /* static */
#endif /* emacs */
/* 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)
long i00afunc ();
#define ADDRESS_FUNCTION(arg) (char *) i00afunc (&(arg))
#else
#define ADDRESS_FUNCTION(arg) &(arg)
#endif
#if __STDC__
typedef void *pointer;
#else
typedef char *pointer;
#endif
#ifndef NULL
#define NULL 0
#endif
/* Different portions of Emacs need to call different versions of
malloc. The Emacs executable needs alloca to call xmalloc, because
ordinary malloc isn't protected from input signals. On the other
hand, the utilities in lib-src need alloca to call malloc; some of
them are very simple, and don't have an xmalloc routine.
Non-Emacs programs expect this to call use xmalloc.
Callers below should use malloc. */
#ifndef emacs
#define malloc xmalloc
#endif
extern pointer malloc ();
/* 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 ()
{
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. */
pointer
alloca (size)
unsigned 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. */
#ifdef emacs
BLOCK_INPUT;
#endif
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 ((pointer) hp); /* Collect garbage. */
hp = np; /* -> next header. */
}
else
break; /* Rest are not deeper. */
last_alloca_header = hp; /* -> last valid storage. */
#ifdef emacs
UNBLOCK_INPUT;
#endif
}
if (size == 0)
return NULL; /* No allocation required. */
/* Allocate combined header + user data storage. */
{
register pointer new = malloc (sizeof (header) + size);
/* Address of header. */
if (new == 0)
abort();
((header *) new)->h.next = last_alloca_header;
((header *) new)->h.deep = depth;
last_alloca_header = (header *) new;
/* User storage begins just after header. */
return (pointer) ((char *) new + 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 */
#endif /* no alloca */
#endif /* not GCC version 2 */

390
agbcc/libiberty/argv.c Executable file
View File

@ -0,0 +1,390 @@
/* Create and destroy argument vectors (argv's)
Copyright (C) 1992 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* Create and destroy argument vectors. An argument vector is simply an
array of string pointers, terminated by a NULL pointer. */
#include "ansidecl.h"
#include "libiberty.h"
#ifdef isspace
#undef isspace
#endif
#define isspace(ch) ((ch) == ' ' || (ch) == '\t')
/* Routines imported from standard C runtime libraries. */
#ifdef __STDC__
#include <stddef.h>
extern void *memcpy (void *s1, const void *s2, size_t n); /* 4.11.2.1 */
extern size_t strlen (const char *s); /* 4.11.6.3 */
extern void *malloc (size_t size); /* 4.10.3.3 */
extern void *realloc (void *ptr, size_t size); /* 4.10.3.4 */
extern void free (void *ptr); /* 4.10.3.2 */
extern char *strdup (const char *s); /* Non-ANSI */
#else /* !__STDC__ */
#if !defined _WIN32 || defined __GNUC__
extern char *memcpy (); /* Copy memory region */
extern int strlen (); /* Count length of string */
extern char *malloc (); /* Standard memory allocater */
extern char *realloc (); /* Standard memory reallocator */
extern void free (); /* Free malloc'd memory */
extern char *strdup (); /* Duplicate a string */
#endif
#endif /* __STDC__ */
#include "alloca-conf.h"
#ifndef NULL
#define NULL 0
#endif
#ifndef EOS
#define EOS '\0'
#endif
#define INITIAL_MAXARGC 8 /* Number of args + NULL in initial argv */
/*
NAME
dupargv -- duplicate an argument vector
SYNOPSIS
char **dupargv (vector)
char **vector;
DESCRIPTION
Duplicate an argument vector. Simply scans through the
vector, duplicating each argument until the
terminating NULL is found.
RETURNS
Returns a pointer to the argument vector if
successful. Returns NULL if there is insufficient memory to
complete building the argument vector.
*/
char **
dupargv (argv)
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] = malloc (sizeof (char *) * (len + 1));
if (copy[argc] == NULL)
{
freeargv (copy);
return NULL;
}
strcpy (copy[argc], argv[argc]);
}
copy[argc] = NULL;
return copy;
}
/*
NAME
freeargv -- free an argument vector
SYNOPSIS
void freeargv (vector)
char **vector;
DESCRIPTION
Free an argument vector that was built using buildargv. Simply scans
through the vector, freeing the memory for each argument until the
terminating NULL is found, and then frees the vector itself.
RETURNS
No value.
*/
void freeargv (vector)
char **vector;
{
register char **scan;
if (vector != NULL)
{
for (scan = vector; *scan != NULL; scan++)
{
free (*scan);
}
free (vector);
}
}
/*
NAME
buildargv -- build an argument vector from a string
SYNOPSIS
char **buildargv (sp)
char *sp;
DESCRIPTION
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.
All of the memory for the pointer array and copies of the string
is obtained from malloc. All of the memory can be returned to the
system with the single function call freeargv, which takes the
returned result of buildargv, as it's argument.
The memory for the argv array is dynamically expanded as necessary.
RETURNS
Returns a pointer to the argument vector if successful. Returns NULL
if the input string pointer is NULL or if there is insufficient
memory to complete building the argument vector.
NOTES
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.
If the input is a null string (as opposed to a NULL pointer), then
buildarg returns an argv that has one arg, a null string.
Argv is always kept terminated with a NULL arg pointer, so it can
be passed to freeargv at any time, or returned, as appropriate.
*/
char **buildargv (input)
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] */
while (isspace (*input))
{
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;
while (isspace (*input))
{
input++;
}
}
while (*input != EOS);
}
return (argv);
}
#ifdef MAIN
/* Simple little test driver. */
static char *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
};
main ()
{
char **argv;
char **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);
}
}
#endif /* MAIN */

57
agbcc/libiberty/asprintf.c Executable file
View File

@ -0,0 +1,57 @@
/* Like sprintf but provides a pointer to malloc'd storage, which must
be freed by the caller.
Copyright (C) 1997 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "ansidecl.h"
#include "libiberty.h"
#if defined (ANSI_PROTOTYPES) || defined (ALMOST_STDC)
#define USE_STDARG
#endif
#ifdef USE_STDARG
#include <stdarg.h>
#else
#include <varargs.h>
#endif
/* VARARGS */
#ifdef USE_STDARG
int
asprintf (char **buf, const char *fmt, ...)
#else
int
asprintf (buf, fmt, va_alist)
char **buf;
const char *fmt;
va_dcl
#endif
{
int status;
va_list ap;
#ifdef USE_STDARG
va_start (ap, fmt);
#else
va_start (ap);
#endif
status = vasprintf (buf, fmt, ap);
va_end (ap);
return status;
}

18
agbcc/libiberty/atexit.c Executable file
View File

@ -0,0 +1,18 @@
/* Wrapper to implement ANSI C's atexit using SunOS's on_exit. */
/* This function is in the public domain. --Mike Stump. */
#include "config.h"
#ifdef HAVE_ON_EXIT
int
atexit(f)
void (*f)();
{
/* 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

37
agbcc/libiberty/basename.c Executable file
View File

@ -0,0 +1,37 @@
/* Return the basename of a pathname.
This file is in the public domain. */
/*
NAME
basename -- return pointer to last component of a pathname
SYNOPSIS
char *basename (const char *name)
DESCRIPTION
Given a pointer to a string containing a typical pathname
(/usr/src/cmd/ls/ls.c for example), returns a pointer to the
last component of the pathname ("ls.c" in this case).
BUGS
Presumes a UNIX style path with UNIX style separators.
*/
#include "ansidecl.h"
#include "libiberty.h"
char *
basename (name)
const char *name;
{
const char *base = name;
while (*name)
{
if (*name++ == '/')
{
base = name;
}
}
return (char *) base;
}

49
agbcc/libiberty/bcmp.c Executable file
View File

@ -0,0 +1,49 @@
/* bcmp
This function is in the public domain. */
/*
NAME
bcmp -- compare two memory regions
SYNOPSIS
int bcmp (char *from, char *to, int count)
DESCRIPTION
Compare two memory regions and return zero if they are identical,
non-zero otherwise. If count is zero, return zero.
NOTES
No guarantee is made about the non-zero returned value. In
particular, the results may be signficantly different than
strcmp(), where the return value is guaranteed to be less than,
equal to, or greater than zero, according to lexicographical
sorting of the compared regions.
BUGS
*/
int
bcmp (from, to, count)
char *from, *to;
int count;
{
int rtnval = 0;
while (count-- > 0)
{
if (*from++ != *to++)
{
rtnval = 1;
break;
}
}
return (rtnval);
}

35
agbcc/libiberty/bcopy.c Executable file
View File

@ -0,0 +1,35 @@
/* bcopy -- copy memory regions of arbitary length
NAME
bcopy -- copy memory regions of arbitrary length
SYNOPSIS
void bcopy (char *in, char *out, int length)
DESCRIPTION
Copy LENGTH bytes from memory region pointed to by IN to memory
region pointed to by OUT.
BUGS
Significant speed improvements can be made in some cases by
implementing copies of multiple bytes simultaneously, or unrolling
the copy loop.
*/
void
bcopy (src, dest, len)
register char *src, *dest;
int len;
{
if (dest < src)
while (len--)
*dest++ = *src++;
else
{
char *lasts = src + (len-1);
char *lastd = dest + (len-1);
while (len--)
*(char *)lastd-- = *(char *)lasts--;
}
}

31
agbcc/libiberty/bzero.c Executable file
View File

@ -0,0 +1,31 @@
/* Portable version of bzero for systems without it.
This function is in the public domain. */
/*
NAME
bzero -- zero the contents of a specified memory region
SYNOPSIS
void bzero (char *to, int count)
DESCRIPTION
Zero COUNT bytes of memory pointed to by TO.
BUGS
Significant speed enhancements may be made in some environments
by zeroing more than a single byte at a time, or by unrolling the
loop.
*/
void
bzero (to, count)
char *to;
int count;
{
while (count-- > 0)
{
*to++ = 0;
}
}

26
agbcc/libiberty/calloc.c Executable file
View File

@ -0,0 +1,26 @@
#include "ansidecl.h"
#include "libiberty.h"
#ifdef ANSI_PROTOTYPES
#include <stddef.h>
#else
#define size_t unsigned long
#endif
/* For systems with larger pointers than ints, this must be declared. */
PTR malloc PARAMS ((size_t));
PTR
calloc (nelem, elsize)
size_t nelem, elsize;
{
register PTR ptr;
if (nelem == 0 || elsize == 0)
nelem = elsize = 1;
ptr = malloc (nelem * elsize);
if (ptr) bzero (ptr, nelem * elsize);
return ptr;
}

203
agbcc/libiberty/choose-temp.c Executable file
View File

@ -0,0 +1,203 @@
/* 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This file exports two functions: choose_temp_base and make_temp_file. */
/* This file lives in at least two places: libiberty and gcc.
Don't change one without the other. */
#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_SYS_FILE_H
#include <sys/file.h> /* May get R_OK, etc. on some systems. */
#endif
#ifndef R_OK
#define R_OK 4
#define W_OK 2
#define X_OK 1
#endif
#include "libiberty.h"
extern int mkstemps ();
#ifndef IN_GCC
#if defined (__MSDOS__) || defined (_WIN32)
#define DIR_SEPARATOR '\\'
#endif
#endif
#ifndef DIR_SEPARATOR
#define DIR_SEPARATOR '/'
#endif
/* On MSDOS, write temp files in current dir
because there's no place else we can expect to use. */
/* ??? Although the current directory is tried as a last resort,
this is left in so that on MSDOS it is preferred to /tmp on the
off chance that someone requires this, since that was the previous
behaviour. */
#ifdef __MSDOS__
#ifndef P_tmpdir
#define P_tmpdir "."
#endif
#endif
/* Name of temporary file.
mktemp requires 6 trailing X's. */
#define TEMP_FILE "ccXXXXXX"
/* Subroutine of choose_temp_base.
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 char *
try (dir, base)
char *dir, *base;
{
if (base != 0)
return base;
if (dir != 0
&& access (dir, R_OK | W_OK | X_OK) == 0)
return dir;
return 0;
}
/* Return a prefix for temporary file names or 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 (mktemp fails).
The buffer for the result is obtained with xmalloc.
This function is provided for backwards compatability only. It use
is not recommended. */
char *
choose_temp_base ()
{
char *base = 0;
char *temp_filename;
int len;
static char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 };
static char usrtmp[] = { DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 };
base = try (getenv ("TMPDIR"), base);
base = try (getenv ("TMP"), base);
base = try (getenv ("TEMP"), base);
#ifdef P_tmpdir
base = try (P_tmpdir, base);
#endif
/* Try /usr/tmp, then /tmp. */
base = try (usrtmp, base);
base = try (tmp, base);
/* If all else fails, use the current directory! */
if (base == 0)
base = ".";
len = strlen (base);
temp_filename = xmalloc (len + 1 /*DIR_SEPARATOR*/
+ strlen (TEMP_FILE) + 1);
strcpy (temp_filename, base);
if (len != 0
&& temp_filename[len-1] != '/'
&& temp_filename[len-1] != DIR_SEPARATOR)
temp_filename[len++] = DIR_SEPARATOR;
strcpy (temp_filename + len, TEMP_FILE);
mktemp (temp_filename);
if (strlen (temp_filename) == 0)
abort ();
return temp_filename;
}
/* Return a temporary file name (as a string) or NULL if unable to create
one. */
char *
make_temp_file (suffix)
char *suffix;
{
char *base = 0;
char *temp_filename;
int base_len, suffix_len;
int fd;
static char tmp[] = { DIR_SEPARATOR, 't', 'm', 'p', 0 };
static char usrtmp[] = { DIR_SEPARATOR, 'u', 's', 'r', DIR_SEPARATOR, 't', 'm', 'p', 0 };
base = try (getenv ("TMPDIR"), base);
base = try (getenv ("TMP"), base);
base = try (getenv ("TEMP"), base);
#ifdef P_tmpdir
base = try (P_tmpdir, base);
#endif
/* Try /usr/tmp, then /tmp. */
base = try (usrtmp, base);
base = try (tmp, base);
/* If all else fails, use the current directory! */
if (base == 0)
base = ".";
base_len = strlen (base);
if (suffix)
suffix_len = strlen (suffix);
else
suffix_len = 0;
temp_filename = xmalloc (base_len + 1 /*DIR_SEPARATOR*/
+ strlen (TEMP_FILE)
+ suffix_len + 1);
strcpy (temp_filename, base);
if (base_len != 0
&& temp_filename[base_len-1] != '/'
&& temp_filename[base_len-1] != DIR_SEPARATOR)
temp_filename[base_len++] = DIR_SEPARATOR;
strcpy (temp_filename + base_len, TEMP_FILE);
if (suffix)
strcat (temp_filename, suffix);
fd = mkstemps (temp_filename, suffix_len);
/* If mkstemps failed, then something bad is happening. Maybe we should
issue a message about a possible security attack in progress? */
if (fd == -1)
abort ();
/* Similarly if we can not close the file. */
if (close (fd))
abort ();
return temp_filename;
}

75
agbcc/libiberty/clock.c Executable file
View File

@ -0,0 +1,75 @@
/* ANSI-compatible clock function.
Copyright (C) 1994, 1995 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 "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
/* FIXME: should be able to declare as clock_t. */
long
clock ()
{
#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 / 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 */
}

167
agbcc/libiberty/concat.c Executable file
View File

@ -0,0 +1,167 @@
/* Concatenate variable number of strings.
Copyright (C) 1991, 1994 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/*
NAME
concat -- concatenate a variable number of strings
SYNOPSIS
#include <varargs.h>
char *concat (s1, s2, s3, ..., NULL)
DESCRIPTION
Concatenate a variable number of strings and return the result
in freshly malloc'd memory.
Returns NULL if insufficient memory is available. The argument
list is terminated by the first NULL pointer encountered. Pointers
to empty strings are ignored.
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.
*/
#include "ansidecl.h"
#include "libiberty.h"
#ifdef ANSI_PROTOTYPES
#include <stdarg.h>
#else
#include <varargs.h>
#endif
#ifdef __STDC__
#include <stddef.h>
extern size_t strlen (const char *s);
#else
extern int strlen ();
#endif
#define NULLP (char *)0
/* VARARGS */
#ifdef ANSI_PROTOTYPES
char *
concat (const char *first, ...)
#else
char *
concat (va_alist)
va_dcl
#endif
{
register int length;
register char *newstr;
register char *end;
register const char *arg;
va_list args;
#ifndef ANSI_PROTOTYPES
const char *first;
#endif
/* First compute the size of the result and get sufficient memory. */
#ifdef ANSI_PROTOTYPES
va_start (args, first);
#else
va_start (args);
first = va_arg (args, const char *);
#endif
if (first == NULLP)
length = 0;
else
{
length = strlen (first);
while ((arg = va_arg (args, const char *)) != NULLP)
{
length += strlen (arg);
}
}
newstr = (char *) xmalloc (length + 1);
va_end (args);
/* Now copy the individual pieces to the result string. */
if (newstr != NULLP)
{
#ifdef ANSI_PROTOTYPES
va_start (args, first);
#else
va_start (args);
first = va_arg (args, const char *);
#endif
end = newstr;
if (first != NULLP)
{
arg = first;
while (*arg)
{
*end++ = *arg++;
}
while ((arg = va_arg (args, const char *)) != NULLP)
{
while (*arg)
{
*end++ = *arg++;
}
}
}
*end = '\000';
va_end (args);
}
return (newstr);
}
#ifdef MAIN
/* Simple little test driver. */
#include <stdio.h>
int
main ()
{
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

13
agbcc/libiberty/config.h-vms Executable file
View File

@ -0,0 +1,13 @@
#ifndef NEED_strerror
#define NEED_strerror
#endif
#ifndef NEED_basename
#define NEED_basename
#endif
#ifndef NEED_psignal
#define NEED_psignal
#endif
#ifndef NEED_on_exit
#define NEED_on_exit
#endif

203
agbcc/libiberty/config.in Executable file
View File

@ -0,0 +1,203 @@
/* config.in. Generated automatically from configure.in by autoheader. */
/* Define if using alloca.c. */
#undef C_ALLOCA
/* 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 if you have alloca, as a function or macro. */
#undef HAVE_ALLOCA
/* Define if you have <alloca.h> and it should be used (not on Ultrix). */
#undef HAVE_ALLOCA_H
/* Define if you have <sys/wait.h> that is POSIX.1 compatible. */
#undef HAVE_SYS_WAIT_H
/* Define if you have <vfork.h>. */
#undef HAVE_VFORK_H
/* Define to `int' if <sys/types.h> doesn't define. */
#undef pid_t
/* Define if you need to in order for stat and other things to work. */
#undef _POSIX_SOURCE
/* If using the C implementation of alloca, 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 if you have the ANSI C header files. */
#undef STDC_HEADERS
/* Define vfork as fork if vfork does not work. */
#undef vfork
/* Define if you have the sys_errlist variable. */
#undef HAVE_SYS_ERRLIST
/* Define if you have the sys_nerr variable. */
#undef HAVE_SYS_NERR
/* Define if you have the sys_siglist variable. */
#undef HAVE_SYS_SIGLIST
/* Define if you have the strerror function. */
#undef HAVE_STRERROR
/* Define if you have the asprintf function. */
#undef HAVE_ASPRINTF
/* Define if you have the atexit function. */
#undef HAVE_ATEXIT
/* Define if you have the basename function. */
#undef HAVE_BASENAME
/* Define if you have the bcmp function. */
#undef HAVE_BCMP
/* Define if you have the bcopy function. */
#undef HAVE_BCOPY
/* Define if you have the bzero function. */
#undef HAVE_BZERO
/* Define if you have the calloc function. */
#undef HAVE_CALLOC
/* Define if you have the clock function. */
#undef HAVE_CLOCK
/* Define if you have the getcwd function. */
#undef HAVE_GETCWD
/* Define if you have the getpagesize function. */
#undef HAVE_GETPAGESIZE
/* Define if you have the getrusage function. */
#undef HAVE_GETRUSAGE
/* Define if you have the index function. */
#undef HAVE_INDEX
/* Define if you have the insque function. */
#undef HAVE_INSQUE
/* Define if you have the memchr function. */
#undef HAVE_MEMCHR
/* Define if you have the memcmp function. */
#undef HAVE_MEMCMP
/* Define if you have the memcpy function. */
#undef HAVE_MEMCPY
/* Define if you have the memmove function. */
#undef HAVE_MEMMOVE
/* Define if you have the memset function. */
#undef HAVE_MEMSET
/* Define if you have the on_exit function. */
#undef HAVE_ON_EXIT
/* Define if you have the psignal function. */
#undef HAVE_PSIGNAL
/* Define if you have the random function. */
#undef HAVE_RANDOM
/* Define if you have the rename function. */
#undef HAVE_RENAME
/* Define if you have the rindex function. */
#undef HAVE_RINDEX
/* Define if you have the sigsetmask function. */
#undef HAVE_SIGSETMASK
/* Define if you have the strcasecmp function. */
#undef HAVE_STRCASECMP
/* Define if you have the strchr function. */
#undef HAVE_STRCHR
/* Define if you have the strdup function. */
#undef HAVE_STRDUP
/* Define if you have the strerror function. */
#undef HAVE_STRERROR
/* Define if you have the strncasecmp function. */
#undef HAVE_STRNCASECMP
/* Define if you have the strrchr function. */
#undef HAVE_STRRCHR
/* Define if you have the strsignal function. */
#undef HAVE_STRSIGNAL
/* Define if you have the strstr function. */
#undef HAVE_STRSTR
/* Define if you have the strtod function. */
#undef HAVE_STRTOD
/* Define if you have the strtol function. */
#undef HAVE_STRTOL
/* Define if you have the strtoul function. */
#undef HAVE_STRTOUL
/* Define if you have the sysconf function. */
#undef HAVE_SYSCONF
/* Define if you have the times function. */
#undef HAVE_TIMES
/* Define if you have the tmpnam function. */
#undef HAVE_TMPNAM
/* Define if you have the vasprintf function. */
#undef HAVE_VASPRINTF
/* Define if you have the vfprintf function. */
#undef HAVE_VFPRINTF
/* Define if you have the vprintf function. */
#undef HAVE_VPRINTF
/* Define if you have the vsprintf function. */
#undef HAVE_VSPRINTF
/* Define if you have the waitpid function. */
#undef HAVE_WAITPID
/* Define if you have the <stdlib.h> header file. */
#undef HAVE_STDLIB_H
/* Define if you have the <string.h> header file. */
#undef HAVE_STRING_H
/* Define if you have the <strings.h> header file. */
#undef HAVE_STRINGS_H
/* Define if you have the <sys/file.h> header file. */
#undef HAVE_SYS_FILE_H
/* Define if you have the <sys/param.h> header file. */
#undef HAVE_SYS_PARAM_H
/* Define if you have the <sys/time.h> header file. */
#undef HAVE_SYS_TIME_H
/* Define if you have the <unistd.h> header file. */
#undef HAVE_UNISTD_H

55
agbcc/libiberty/config.table Executable file
View File

@ -0,0 +1,55 @@
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 ;;
i[345]86-*-windows*) frag=mh-windows ;;
esac
frags=$frag
# 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
case "${host}" in
*-*-cygwin32*) ;;
hppa*-*-*) frags="${frags} ../../config/mh-papic" ;;
i[3456]86-*-*) frags="${frags} ../../config/mh-x86pic" ;;
*-*-*) frags="${frags} ../../config/mh-${host_cpu}pic" ;;
esac
fi
echo "# Warning: this fragment is automatically generated" > temp-frag
for frag in ${frags}; do
case ${frag} in
../* )
if [ ${srcdir} = . ]; then
[ -n "${with_target_subdir}" ] && frag=../${frag}
[ -n "${with_multisrctop}" ] && frag=${with_multisrctop}${frag}
fi
;;
esac
frag=${srcdir}/${xsrcdir}config/$frag
if [ -f ${frag} ]; then
echo "Appending ${frag} to xhost-mkfrag"
echo "# Following fragment copied from ${frag}" >> temp-frag
cat ${frag} >> temp-frag
fi
done
# 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} ${libiberty_topdir}/move-if-change temp-frag xhost-mkfrag

9
agbcc/libiberty/config/mh-aix Executable file
View File

@ -0,0 +1,9 @@
# 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

View File

@ -0,0 +1 @@
HDEFINES = -DHARRIS_FLOAT_FORMAT

View File

@ -0,0 +1 @@
EXTRA_OFILES=vasprintf.o

View File

@ -0,0 +1 @@
EXTRA_OFILES=asprintf.o strcasecmp.o strncasecmp.o vasprintf.o

2799
agbcc/libiberty/configure vendored Executable file
View File

@ -0,0 +1,2799 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated automatically using autoconf version 2.12.1
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
# Defaults:
ac_help=
ac_default_prefix=/usr/local
# Any additions from configure.in:
ac_help="$ac_help
--with-target-subdir=SUBDIR Configuring in a subdirectory"
ac_help="$ac_help
--with-cross-host=HOST Configuring with a cross compiler"
ac_help="$ac_help
--with-newlib Configuring with newlib"
# Initialize some variables set by options.
# The variables have the same names as the options, with
# dashes changed to underlines.
build=NONE
cache_file=./config.cache
exec_prefix=NONE
host=NONE
no_create=
nonopt=NONE
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
target=NONE
verbose=
x_includes=NONE
x_libraries=NONE
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datadir='${prefix}/share'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
libdir='${exec_prefix}/lib'
includedir='${prefix}/include'
oldincludedir='/usr/include'
infodir='${prefix}/info'
mandir='${prefix}/man'
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
SHELL=${CONFIG_SHELL-/bin/sh}
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12
ac_prev=
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=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
*) ac_optarg= ;;
esac
# Accept the important Cygnus configure options, so we can diagnose typos.
case "$ac_option" in
-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 ;;
-build=* | --build=* | --buil=* | --bui=* | --bu=*)
build="$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" ;;
-datadir | --datadir | --datadi | --datad | --data | --dat | --da)
ac_prev=datadir ;;
-datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
| --da=*)
datadir="$ac_optarg" ;;
-disable-* | --disable-*)
ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
eval "enable_${ac_feature}=no" ;;
-enable-* | --enable-*)
ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
fi
ac_feature=`echo $ac_feature| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "enable_${ac_feature}='$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)
# 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 << EOF
Usage: configure [options] [host]
Options: [defaults in brackets after descriptions]
Configuration:
--cache-file=FILE cache test results in FILE
--help print this message
--no-create do not create output files
--quiet, --silent do not print \`checking...' messages
--version print the version of autoconf that created configure
Directory and file names:
--prefix=PREFIX install architecture-independent files in PREFIX
[$ac_default_prefix]
--exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
[same as prefix]
--bindir=DIR user executables in DIR [EPREFIX/bin]
--sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
--libexecdir=DIR program executables in DIR [EPREFIX/libexec]
--datadir=DIR read-only architecture-independent data in DIR
[PREFIX/share]
--sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
--sharedstatedir=DIR modifiable architecture-independent data in DIR
[PREFIX/com]
--localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
--libdir=DIR object code libraries in DIR [EPREFIX/lib]
--includedir=DIR C header files in DIR [PREFIX/include]
--oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
--infodir=DIR info documentation in DIR [PREFIX/info]
--mandir=DIR man documentation in DIR [PREFIX/man]
--srcdir=DIR find the sources in DIR [configure dir or ..]
--program-prefix=PREFIX prepend PREFIX to installed program names
--program-suffix=SUFFIX append SUFFIX to installed program names
--program-transform-name=PROGRAM
run sed PROGRAM on installed program names
EOF
cat << EOF
Host type:
--build=BUILD configure for building on BUILD [BUILD=HOST]
--host=HOST configure for HOST [guessed]
--target=TARGET configure for TARGET [TARGET=HOST]
Features and packages:
--disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
--enable-FEATURE[=ARG] include FEATURE [ARG=yes]
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--x-includes=DIR X include files are in DIR
--x-libraries=DIR X library files are in DIR
EOF
if test -n "$ac_help"; then
echo "--enable and --with options recognized:$ac_help"
fi
exit 0 ;;
-host | --host | --hos | --ho)
ac_prev=host ;;
-host=* | --host=* | --hos=* | --ho=*)
host="$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" ;;
-localstatedir | --localstatedir | --localstatedi | --localstated \
| --localstate | --localstat | --localsta | --localst \
| --locals | --local | --loca | --loc | --lo)
ac_prev=localstatedir ;;
-localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
| --localstate=* | --localstat=* | --localsta=* | --localst=* \
| --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
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)
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" ;;
-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 ;;
-target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
target="$ac_optarg" ;;
-v | -verbose | --verbose | --verbos | --verbo | --verb)
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
echo "configure generated by autoconf version 2.12.1"
exit 0 ;;
-with-* | --with-*)
ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
case "$ac_option" in
*=*) ;;
*) ac_optarg=yes ;;
esac
eval "with_${ac_package}='$ac_optarg'" ;;
-without-* | --without-*)
ac_package=`echo $ac_option|sed -e 's/-*without-//'`
# Reject names that are not valid shell variable names.
if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
{ echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
fi
ac_package=`echo $ac_package| sed 's/-/_/g'`
eval "with_${ac_package}=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" ;;
-*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
;;
*)
if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
echo "configure: warning: $ac_option: invalid host type" 1>&2
fi
if test "x$nonopt" != xNONE; then
{ echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
fi
nonopt="$ac_option"
;;
esac
done
if test -n "$ac_prev"; then
{ echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
fi
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
# File descriptor usage:
# 0 standard input
# 1 file creation
# 2 errors and warnings
# 3 some systems may open it to /dev/tty
# 4 used on the Kubota Titan
# 6 checking for... messages and results
# 5 compiler messages saved in config.log
if test "$silent" = yes; then
exec 6>/dev/null
else
exec 6>&1
fi
exec 5>./config.log
echo "\
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
" 1>&5
# Strip out --no-create and --no-recursion so they do not pile up.
# Also quote any args containing shell metacharacters.
ac_configure_args=
for ac_arg
do
case "$ac_arg" in
-no-create | --no-create | --no-creat | --no-crea | --no-cre \
| --no-cr | --no-c) ;;
-no-recursion | --no-recursion | --no-recursio | --no-recursi \
| --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
*" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
ac_configure_args="$ac_configure_args '$ac_arg'" ;;
*) ac_configure_args="$ac_configure_args $ac_arg" ;;
esac
done
# NLS nuisances.
# Only set these to C if already set. These must not be set unconditionally
# because not all systems understand e.g. LANG=C (notably SCO).
# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
# Non-C LC_CTYPE values break the ctype check.
if test "${LANG+set}" = set; then LANG=C; export LANG; fi
if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -rf conftest* confdefs.h
# AIX cpp loses on an empty file, so make sure it contains at least a newline.
echo > confdefs.h
# A filename unique to this package, relative to the directory that
# configure is in, which we can look for to find out if srcdir is correct.
ac_unique_file=pexecute.c
# 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 its parent.
ac_prog=$0
ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
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
if test "$ac_srcdir_defaulted" = yes; then
{ echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
else
{ echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
fi
fi
srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
# Prefer explicitly selected file to automatically selected ones.
if test -z "$CONFIG_SITE"; then
if test "x$prefix" != xNONE; then
CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
else
CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi
fi
for ac_site_file in $CONFIG_SITE; do
if test -r "$ac_site_file"; then
echo "loading site script $ac_site_file"
. "$ac_site_file"
fi
done
if test -r "$cache_file"; then
echo "loading cache $cache_file"
. $cache_file
else
echo "creating cache $cache_file"
> $cache_file
fi
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
ac_n= ac_c='
' ac_t=' '
else
ac_n=-n ac_c= ac_t=
fi
else
ac_n= ac_c='\c' ac_t=
fi
# Check whether --with-target-subdir or --without-target-subdir was given.
if test "${with_target_subdir+set}" = set; then
withval="$with_target_subdir"
:
fi
# Check whether --with-cross-host or --without-cross-host was given.
if test "${with_cross_host+set}" = set; then
withval="$with_cross_host"
:
fi
# Check whether --with-newlib or --without-newlib was given.
if test "${with_newlib+set}" = set; then
withval="$with_newlib"
:
fi
if test "${srcdir}" = "."; then
if 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
if test -f $ac_dir/install-sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install-sh -c"
break
elif test -f $ac_dir/install.sh; then
ac_aux_dir=$ac_dir
ac_install_sh="$ac_aux_dir/install.sh -c"
break
fi
done
if test -z "$ac_aux_dir"; then
{ echo "configure: error: can not find install-sh or install.sh in $libiberty_topdir $srcdir/$libiberty_topdir" 1>&2; exit 1; }
fi
ac_config_guess=$ac_aux_dir/config.guess
ac_config_sub=$ac_aux_dir/config.sub
ac_configure=$ac_aux_dir/configure # This should be Cygnus configure.
# Make sure we can run config.sub.
if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
echo "configure:589: checking host system type" >&5
host_alias=$host
case "$host_alias" in
NONE)
case $nonopt in
NONE)
if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
fi ;;
*) host_alias=$nonopt ;;
esac ;;
esac
host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$host" 1>&6
echo $ac_n "checking build system type""... $ac_c" 1>&6
echo "configure:612: checking build system type" >&5
build_alias=$build
case "$build_alias" in
NONE)
case $nonopt in
NONE) build_alias=$host_alias ;;
*) build_alias=$nonopt ;;
esac ;;
esac
build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias`
build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
echo "$ac_t""$build" 1>&6
if test $host != $build; then
ac_tool_prefix=${host_alias}-
else
ac_tool_prefix=
fi
# 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
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:638: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$AR"; then
ac_cv_prog_AR="$AR" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_AR="${ac_tool_prefix}ar"
break
fi
done
IFS="$ac_save_ifs"
test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar"
fi
fi
AR="$ac_cv_prog_AR"
if test -n "$AR"; then
echo "$ac_t""$AR" 1>&6
else
echo "$ac_t""no" 1>&6
fi
# 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
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:669: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
RANLIB="$ac_cv_prog_RANLIB"
if test -n "$RANLIB"; then
echo "$ac_t""$RANLIB" 1>&6
else
echo "$ac_t""no" 1>&6
fi
if test -z "$ac_cv_prog_RANLIB"; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:700: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RANLIB="ranlib"
break
fi
done
IFS="$ac_save_ifs"
test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":"
fi
fi
RANLIB="$ac_cv_prog_RANLIB"
if test -n "$RANLIB"; then
echo "$ac_t""$RANLIB" 1>&6
else
echo "$ac_t""no" 1>&6
fi
else
RANLIB=":"
fi
fi
# FIXME: We temporarily define our own version of AC_PROG_CC. This is
# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
# are probably using a cross compiler, which will not be able to fully
# link an executable. This should really be fixed in autoconf
# itself.
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:744: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="gcc"
break
fi
done
IFS="$ac_save_ifs"
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
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
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
echo "configure:773: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
ac_prog_rejected=no
for ac_dir in $PATH; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
ac_prog_rejected=yes
continue
fi
ac_cv_prog_CC="cc"
break
fi
done
IFS="$ac_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 $# -gt 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
set dummy "$ac_dir/$ac_word" "$@"
shift
ac_cv_prog_CC="$@"
fi
fi
fi
fi
CC="$ac_cv_prog_CC"
if test -n "$CC"; then
echo "$ac_t""$CC" 1>&6
else
echo "$ac_t""no" 1>&6
fi
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
echo "configure:821: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.c <<EOF
#ifdef __GNUC__
yes;
#endif
EOF
if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:830: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
fi
fi
echo "$ac_t""$ac_cv_prog_gcc" 1>&6
if test $ac_cv_prog_gcc = yes; then
GCC=yes
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
echo "configure:845: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
echo 'void f(){}' > conftest.c
if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
ac_cv_prog_cc_g=yes
else
ac_cv_prog_cc_g=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-O2"
fi
else
GCC=
test "${CFLAGS+set}" = set || CFLAGS="-g"
fi
echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
echo "configure:874: checking for POSIXized ISC" >&5
if test -d /etc/conf/kconfig.d &&
grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
then
echo "$ac_t""yes" 1>&6
ISC=yes # If later tests want to check for ISC.
cat >> confdefs.h <<\EOF
#define _POSIX_SOURCE 1
EOF
if test "$GCC" = yes; then
CC="$CC -posix"
else
CC="$CC -Xp"
fi
else
echo "$ac_t""no" 1>&6
ISC=
fi
# 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
# 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"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
echo "configure:912: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:"
for ac_dir in $PATH; do
# Account for people who put trailing slashes in PATH elements.
case "$ac_dir/" in
/|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/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
if test -f $ac_dir/$ac_prog; then
if test $ac_prog = install &&
grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
:
else
ac_cv_path_install="$ac_dir/$ac_prog -c"
break 2
fi
fi
done
;;
esac
done
IFS="$ac_save_IFS"
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. We don't cache a
# path for INSTALL within a source directory, because that will
# break other packages using the cache if that directory is
# removed, or if the path is relative.
INSTALL="$ac_install_sh"
fi
fi
echo "$ac_t""$INSTALL" 1>&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_DATA" && INSTALL_DATA='${INSTALL} -m 644'
. ${srcdir}/config.table
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.
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
echo "configure:971: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
fi
if test -z "$CPP"; then
if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# This must be in double quotes, not single quotes, because CPP may get
# substituted into the Makefile and "${CC-cc}" will confuse make.
CPP="${CC-cc} -E"
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
#line 986 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:992: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
#line 1003 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1009: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
:
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
CPP=/lib/cpp
fi
rm -f conftest*
fi
rm -f conftest*
ac_cv_prog_CPP="$CPP"
fi
CPP="$ac_cv_prog_CPP"
else
ac_cv_prog_CPP="$CPP"
fi
echo "$ac_t""$CPP" 1>&6
for ac_hdr in sys/file.h sys/param.h stdlib.h string.h unistd.h strings.h sys/time.h
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
echo "configure:1035: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1040 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1045: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
cat >> confdefs.h <<EOF
#define $ac_tr_hdr 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
echo $ac_n "checking for sys/wait.h that is POSIX.1 compatible""... $ac_c" 1>&6
echo "configure:1072: checking for sys/wait.h that is POSIX.1 compatible" >&5
if eval "test \"`echo '$''{'ac_cv_header_sys_wait_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1077 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <sys/wait.h>
#ifndef WEXITSTATUS
#define WEXITSTATUS(stat_val) ((unsigned)(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; }
EOF
if { (eval echo configure:1093: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_header_sys_wait_h=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_header_sys_wait_h=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_header_sys_wait_h" 1>&6
if test $ac_cv_header_sys_wait_h = yes; then
cat >> confdefs.h <<\EOF
#define HAVE_SYS_WAIT_H 1
EOF
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 bzero"
funcs="$funcs calloc"
funcs="$funcs clock"
funcs="$funcs getcwd"
funcs="$funcs getpagesize"
funcs="$funcs index"
funcs="$funcs insque"
funcs="$funcs memchr"
funcs="$funcs memcmp"
funcs="$funcs memcpy"
funcs="$funcs memmove"
funcs="$funcs memset"
funcs="$funcs random"
funcs="$funcs rename"
funcs="$funcs rindex"
funcs="$funcs sigsetmask"
funcs="$funcs strcasecmp"
funcs="$funcs strchr"
funcs="$funcs strdup"
funcs="$funcs strncasecmp"
funcs="$funcs strrchr"
funcs="$funcs strstr"
funcs="$funcs strtod"
funcs="$funcs strtol"
funcs="$funcs strtoul"
funcs="$funcs tmpnam"
funcs="$funcs vasprintf"
funcs="$funcs vfprintf"
funcs="$funcs vprintf"
funcs="$funcs vsprintf"
funcs="$funcs waitpid"
# Also in the old function.def file: alloca, vfork, getopt.
vars="sys_errlist sys_nerr sys_siglist"
checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times"
# 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 bzero calloc clock getcwd
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1166: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1171 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1194: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
for ac_func in getpagesize index insque memchr memcmp memcpy memmove
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1221: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1226 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1249: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
for ac_func in memset random rename rindex sigsetmask strcasecmp
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1276: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1281 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1304: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
for ac_func in strchr strdup strncasecmp strrchr strstr strtod strtol
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1331: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1336 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1359: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
for ac_func in strtoul tmpnam vasprintf vfprintf vprintf vsprintf waitpid
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1386: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1391 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1414: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
cat >> confdefs.h <<\EOF
#define HAVE_SYS_ERRLIST 1
EOF
cat >> confdefs.h <<\EOF
#define HAVE_SYS_NERR 1
EOF
cat >> confdefs.h <<\EOF
#define HAVE_SYS_SIGLIST 1
EOF
for ac_func in getrusage on_exit psignal strerror strsignal sysconf times
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1453: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1458 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1481: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
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. Also,
# if the host does not provide alloca, we set ALLOCA to alloca.o
setobjs=
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
ALLOCA="alloca.o"
LIBOBJS="asprintf.o basename.o insque.o random.o strdup.o vasprintf.o"
for f in $funcs; do
case "$f" in
asprintf | basename | insque | random | strdup | vasprintf)
;;
*)
n=HAVE_`echo $f | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $n 1
EOF
;;
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.
cat >> confdefs.h <<\EOF
#define HAVE_STRERROR 1
EOF
setobjs=yes
fi
fi
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.
LIBOBJS="basename.o getpagesize.o insque.o random.o strcasecmp.o"
LIBOBJS="$LIBOBJS strncasecmp.o strdup.o vfork.o waitpid.o vasprintf.o"
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 <<EOF
#define $n 1
EOF
;;
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.
cat >> confdefs.h <<\EOF
#define HAVE_STRERROR 1
EOF
setobjs=yes
;;
esac
fi
if test -z "${setobjs}"; then
case "${host}" in
*-*-cygwin*)
# The Cygwin library actually uses a couple of files from
# libiberty when it is built. If we are building a native
# Cygwin, and we run the tests, we will appear to have these
# files. However, when we go on to build winsup, we will wind up
# with a library which does not have the files, since they should
# have come from libiberty.
# We handle this by removing the functions the winsup library
# provides from our shell variables, so that they appear to be
# missing.
funcs="`echo $funcs | sed -e 's/random//'`"
LIBOBJS="$LIBOBJS random.o"
vars="`echo $vars | sed -e 's/sys_siglist//'`"
checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`"
;;
*-*-mingw32*)
# Under mingw32, sys_nerr and sys_errlist exist, but they are
# macros, so the test below won't find them.
vars="`echo $vars | sed -e 's/sys_nerr//' -e 's/sys_errlist//'`"
cat >> confdefs.h <<\EOF
#define HAVE_SYS_NERR 1
EOF
cat >> confdefs.h <<\EOF
#define HAVE_SYS_ERRLIST 1
EOF
;;
esac
# We haven't set the list of objects yet. Use the standard autoconf
# tests. This will only work if the compiler works.
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
echo "configure:1636: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
cat > conftest.$ac_ext <<EOF
#line 1646 "configure"
#include "confdefs.h"
main(){return(0);}
EOF
if { (eval echo configure:1650: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
ac_cv_prog_cc_cross=no
else
ac_cv_prog_cc_cross=yes
fi
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
ac_cv_prog_cc_works=no
fi
rm -fr conftest*
echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
echo "configure:1670: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
for ac_func in $funcs
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1677: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1682 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1705: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
LIBOBJS="$LIBOBJS ${ac_func}.o"
fi
done
# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
# for constant arguments. Useless!
echo $ac_n "checking for working alloca.h""... $ac_c" 1>&6
echo "configure:1734: checking for working alloca.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_alloca_h'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1739 "configure"
#include "confdefs.h"
#include <alloca.h>
int main() {
char *p = alloca(2 * sizeof(int));
; return 0; }
EOF
if { (eval echo configure:1746: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
ac_cv_header_alloca_h=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_header_alloca_h=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_header_alloca_h" 1>&6
if test $ac_cv_header_alloca_h = yes; then
cat >> confdefs.h <<\EOF
#define HAVE_ALLOCA_H 1
EOF
fi
echo $ac_n "checking for alloca""... $ac_c" 1>&6
echo "configure:1767: checking for alloca" >&5
if eval "test \"`echo '$''{'ac_cv_func_alloca_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1772 "configure"
#include "confdefs.h"
#ifdef __GNUC__
# define alloca __builtin_alloca
#else
# if HAVE_ALLOCA_H
# include <alloca.h>
# else
# ifdef _AIX
#pragma alloca
# else
# ifndef alloca /* predefined by HP cc +Olibcalls */
char *alloca ();
# endif
# endif
# endif
#endif
int main() {
char *p = (char *) alloca(1);
; return 0; }
EOF
if { (eval echo configure:1795: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
ac_cv_func_alloca_works=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_func_alloca_works=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_func_alloca_works" 1>&6
if test $ac_cv_func_alloca_works = yes; then
cat >> confdefs.h <<\EOF
#define HAVE_ALLOCA 1
EOF
fi
if test $ac_cv_func_alloca_works = no; then
# The SVR3 libPW and SVR4 libucb both contain incompatible functions
# that cause trouble. Some versions do not even contain alloca or
# contain a buggy version. If you still want to use their alloca,
# use ar to extract alloca.o from them instead of compiling alloca.c.
ALLOCA=alloca.o
cat >> confdefs.h <<\EOF
#define C_ALLOCA 1
EOF
echo $ac_n "checking whether alloca needs Cray hooks""... $ac_c" 1>&6
echo "configure:1827: checking whether alloca needs Cray hooks" >&5
if eval "test \"`echo '$''{'ac_cv_os_cray'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1832 "configure"
#include "confdefs.h"
#if defined(CRAY) && ! defined(CRAY2)
webecray
#else
wenotbecray
#endif
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "webecray" >/dev/null 2>&1; then
rm -rf conftest*
ac_cv_os_cray=yes
else
rm -rf conftest*
ac_cv_os_cray=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_os_cray" 1>&6
if test $ac_cv_os_cray = yes; then
for ac_func in _getb67 GETB67 getb67; do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:1857: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1862 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:1885: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
cat >> confdefs.h <<EOF
#define CRAY_STACKSEG_END $ac_func
EOF
break
else
echo "$ac_t""no" 1>&6
fi
done
fi
echo $ac_n "checking stack direction for C alloca""... $ac_c" 1>&6
echo "configure:1912: checking stack direction for C alloca" >&5
if eval "test \"`echo '$''{'ac_cv_c_stack_direction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
ac_cv_c_stack_direction=0
else
cat > conftest.$ac_ext <<EOF
#line 1920 "configure"
#include "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);
}
EOF
if { (eval echo configure:1939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
ac_cv_c_stack_direction=1
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
ac_cv_c_stack_direction=-1
fi
rm -fr conftest*
fi
fi
echo "$ac_t""$ac_cv_c_stack_direction" 1>&6
cat >> confdefs.h <<EOF
#define STACK_DIRECTION $ac_cv_c_stack_direction
EOF
fi
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
echo "configure:1961: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 1966 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:1974: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
rm -rf conftest*
ac_cv_header_stdc=yes
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
ac_cv_header_stdc=no
fi
rm -f conftest*
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
#line 1991 "configure"
#include "confdefs.h"
#include <string.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "memchr" >/dev/null 2>&1; then
:
else
rm -rf conftest*
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 > conftest.$ac_ext <<EOF
#line 2009 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "free" >/dev/null 2>&1; then
:
else
rm -rf conftest*
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 > conftest.$ac_ext <<EOF
#line 2030 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
#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)) exit(2);
exit (0); }
EOF
if { (eval echo configure:2041: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
:
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
ac_cv_header_stdc=no
fi
rm -fr conftest*
fi
fi
fi
echo "$ac_t""$ac_cv_header_stdc" 1>&6
if test $ac_cv_header_stdc = yes; then
cat >> confdefs.h <<\EOF
#define STDC_HEADERS 1
EOF
fi
echo $ac_n "checking for pid_t""... $ac_c" 1>&6
echo "configure:2065: checking for pid_t" >&5
if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2070 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if STDC_HEADERS
#include <stdlib.h>
#include <stddef.h>
#endif
EOF
if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
egrep "pid_t[^a-zA-Z_0-9]" >/dev/null 2>&1; then
rm -rf conftest*
ac_cv_type_pid_t=yes
else
rm -rf conftest*
ac_cv_type_pid_t=no
fi
rm -f conftest*
fi
echo "$ac_t""$ac_cv_type_pid_t" 1>&6
if test $ac_cv_type_pid_t = no; then
cat >> confdefs.h <<\EOF
#define pid_t int
EOF
fi
ac_safe=`echo "vfork.h" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for vfork.h""... $ac_c" 1>&6
echo "configure:2099: checking for vfork.h" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2104 "configure"
#include "confdefs.h"
#include <vfork.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
{ (eval echo configure:2109: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
ac_err=`grep -v '^ *+' conftest.out`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_err" >&5
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_header_$ac_safe=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
echo "$ac_t""yes" 1>&6
cat >> confdefs.h <<\EOF
#define HAVE_VFORK_H 1
EOF
else
echo "$ac_t""no" 1>&6
fi
echo $ac_n "checking for working vfork""... $ac_c" 1>&6
echo "configure:2134: checking for working vfork" >&5
if eval "test \"`echo '$''{'ac_cv_func_vfork_works'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test "$cross_compiling" = yes; then
echo $ac_n "checking for vfork""... $ac_c" 1>&6
echo "configure:2140: checking for vfork" >&5
if eval "test \"`echo '$''{'ac_cv_func_vfork'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2145 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char vfork(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char vfork();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_vfork) || defined (__stub___vfork)
choke me
#else
vfork();
#endif
; return 0; }
EOF
if { (eval echo configure:2168: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_vfork=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_vfork=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'vfork`\" = yes"; then
echo "$ac_t""yes" 1>&6
:
else
echo "$ac_t""no" 1>&6
fi
ac_cv_func_vfork_works=$ac_cv_func_vfork
else
cat > conftest.$ac_ext <<EOF
#line 2190 "configure"
#include "confdefs.h"
/* Thanks to Paul Eggert for this test. */
#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#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
#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);
}
}
}
main() {
pid_t parent = getpid ();
pid_t child;
sparc_address_test ();
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)
;
exit(
/* 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
);
}
}
EOF
if { (eval echo configure:2285: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
then
ac_cv_func_vfork_works=yes
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -fr conftest*
ac_cv_func_vfork_works=no
fi
rm -fr conftest*
fi
fi
echo "$ac_t""$ac_cv_func_vfork_works" 1>&6
if test $ac_cv_func_vfork_works = no; then
cat >> confdefs.h <<\EOF
#define vfork fork
EOF
fi
if test $ac_cv_func_vfork_works = no; then
LIBOBJS="$LIBOBJS vfork.o"
fi
for v in $vars; do
echo $ac_n "checking for $v""... $ac_c" 1>&6
echo "configure:2312: checking for $v" >&5
if eval "test \"`echo '$''{'libiberty_cv_var_$v'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2317 "configure"
#include "confdefs.h"
int *p;
int main() {
extern int $v; p = &$v;
; return 0; }
EOF
if { (eval echo configure:2324: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "libiberty_cv_var_$v=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "libiberty_cv_var_$v=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$libiberty_cv_var_'$v`\" = yes"; then
echo "$ac_t""yes" 1>&6
n=HAVE_`echo $v | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $n 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
for ac_func in $checkfuncs
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
echo "configure:2350: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
#line 2355 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
#include <assert.h>
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
builtin and then its argument prototype would still apply. */
char $ac_func();
int main() {
/* The GNU C library defines this for functions which it implements
to always fail with ENOSYS. Some functions are actually named
something starting with __ and the normal name is an alias. */
#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
choke me
#else
$ac_func();
#endif
; return 0; }
EOF
if { (eval echo configure:2378: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
eval "ac_cv_func_$ac_func=no"
fi
rm -f conftest*
fi
if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
echo "$ac_t""yes" 1>&6
ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
cat >> confdefs.h <<EOF
#define $ac_tr_func 1
EOF
else
echo "$ac_t""no" 1>&6
fi
done
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
# We need multilib support, but only if configuring for the target.
trap '' 1 2 15
cat > confcache <<\EOF
# 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. It is not useful on other systems.
# If it contains results you don't want to keep, you may remove or edit it.
#
# By default, configure uses ./config.cache as the cache file,
# creating it if it does not exist already. You can give configure
# the --cache-file=FILE option to use a different cache file; that is
# what configure does when it calls configure scripts in
# subdirectories, so they share the cache.
# Giving --cache-file=/dev/null disables caching, for debugging configure.
# config.status only pays attention to the cache file if you give it the
# --recheck option to rerun configure.
#
EOF
# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, don't put newlines in cache variables' values.
# 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.
(set) 2>&1 |
case `(ac_space=' '; set) 2>&1 | grep ac_space` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
sed -n \
-e "s/'/'\\\\''/g" \
-e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
;;
*)
# `set' quotes correctly as required by POSIX, so do not add quotes.
sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
;;
esac >> confcache
if cmp -s $cache_file confcache; then
:
else
if test -w $cache_file; then
echo "updating cache $cache_file"
cat confcache > $cache_file
else
echo "not updating unwritable cache $cache_file"
fi
fi
rm -f confcache
trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
# Any assignment to VPATH causes Sun make to only execute
# the first set of double-colon rules, so remove it if not needed.
# If there is a colon in the path, we need to keep it.
if test "x$srcdir" = x.; then
ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
fi
trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
DEFS=-DHAVE_CONFIG_H
# Without the "./", some shells look in PATH for config.status.
: ${CONFIG_STATUS=./config.status}
echo creating $CONFIG_STATUS
rm -f $CONFIG_STATUS
cat > $CONFIG_STATUS <<EOF
#! /bin/sh
# Generated automatically by configure.
# Run this file to recreate the current configuration.
# This directory was configured as follows,
# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
#
# $0 $ac_configure_args
#
# Compiler output produced by configure, useful for debugging
# configure, is in ./config.log if it exists.
ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
for ac_option
do
case "\$ac_option" in
-recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
echo "$CONFIG_STATUS generated by autoconf version 2.12.1"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
*) echo "\$ac_cs_usage"; exit 1 ;;
esac
done
ac_given_srcdir=$srcdir
ac_given_INSTALL="$INSTALL"
trap 'rm -fr `echo "Makefile config.h:config.in" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
EOF
cat >> $CONFIG_STATUS <<EOF
# Protect against being on the right side of a sed subst in config.status.
sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
s%@SHELL@%$SHELL%g
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
s%@exec_prefix@%$exec_prefix%g
s%@prefix@%$prefix%g
s%@program_transform_name@%$program_transform_name%g
s%@bindir@%$bindir%g
s%@sbindir@%$sbindir%g
s%@libexecdir@%$libexecdir%g
s%@datadir@%$datadir%g
s%@sysconfdir@%$sysconfdir%g
s%@sharedstatedir@%$sharedstatedir%g
s%@localstatedir@%$localstatedir%g
s%@libdir@%$libdir%g
s%@includedir@%$includedir%g
s%@oldincludedir@%$oldincludedir%g
s%@infodir@%$infodir%g
s%@mandir@%$mandir%g
s%@host@%$host%g
s%@host_alias@%$host_alias%g
s%@host_cpu@%$host_cpu%g
s%@host_vendor@%$host_vendor%g
s%@host_os@%$host_os%g
s%@build@%$build%g
s%@build_alias@%$build_alias%g
s%@build_cpu@%$build_cpu%g
s%@build_vendor@%$build_vendor%g
s%@build_os@%$build_os%g
s%@AR@%$AR%g
s%@RANLIB@%$RANLIB%g
s%@CC@%$CC%g
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
/@host_makefile_frag@/r $host_makefile_frag
s%@host_makefile_frag@%%g
s%@CPP@%$CPP%g
s%@LIBOBJS@%$LIBOBJS%g
s%@ALLOCA@%$ALLOCA%g
s%@INSTALL_DEST@%$INSTALL_DEST%g
CEOF
EOF
cat >> $CONFIG_STATUS <<\EOF
# Split the substitutions into bite-sized pieces for seds with
# small command number limits, like on Digital OSF/1 and HP-UX.
ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
ac_file=1 # Number of current file.
ac_beg=1 # First line for current file.
ac_end=$ac_max_sed_cmds # Line after last line for current file.
ac_more_lines=:
ac_sed_cmds=""
while $ac_more_lines; do
if test $ac_beg -gt 1; then
sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
else
sed "${ac_end}q" conftest.subs > conftest.s$ac_file
fi
if test ! -s conftest.s$ac_file; then
ac_more_lines=false
rm -f conftest.s$ac_file
else
if test -z "$ac_sed_cmds"; then
ac_sed_cmds="sed -f conftest.s$ac_file"
else
ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
fi
ac_file=`expr $ac_file + 1`
ac_beg=$ac_end
ac_end=`expr $ac_end + $ac_max_sed_cmds`
fi
done
if test -z "$ac_sed_cmds"; then
ac_sed_cmds=cat
fi
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
EOF
cat >> $CONFIG_STATUS <<\EOF
for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case "$ac_file" in
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
*) ac_file_in="${ac_file}.in" ;;
esac
# Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
# The file is in a subdirectory.
test ! -d "$ac_dir" && mkdir "$ac_dir"
ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
# A "../" for each directory in $ac_dir_suffix.
ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
else
ac_dir_suffix= ac_dots=
fi
case "$ac_given_srcdir" in
.) srcdir=.
if test -z "$ac_dots"; then top_srcdir=.
else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
/*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
*) # Relative path.
srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
top_srcdir="$ac_dots$ac_given_srcdir" ;;
esac
case "$ac_given_INSTALL" in
[/$]*) INSTALL="$ac_given_INSTALL" ;;
*) INSTALL="$ac_dots$ac_given_INSTALL" ;;
esac
echo creating "$ac_file"
rm -f "$ac_file"
configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
case "$ac_file" in
*Makefile*) ac_comsub="1i\\
# $configure_input" ;;
*) ac_comsub= ;;
esac
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
sed -e "$ac_comsub
s%@configure_input@%$configure_input%g
s%@srcdir@%$srcdir%g
s%@top_srcdir@%$top_srcdir%g
s%@INSTALL@%$INSTALL%g
" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
fi; done
rm -f conftest.s*
# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
# NAME is the cpp macro being defined and VALUE is the value it is being given.
#
# ac_d sets the value in "#define NAME VALUE" lines.
ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
ac_dC='\3'
ac_dD='%g'
# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
ac_uB='\([ ]\)%\1#\2define\3'
ac_uC=' '
ac_uD='\4%g'
# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
ac_eB='$%\1#\2define\3'
ac_eC=' '
ac_eD='%g'
if test "${CONFIG_HEADERS+set}" != set; then
EOF
cat >> $CONFIG_STATUS <<EOF
CONFIG_HEADERS="config.h:config.in"
EOF
cat >> $CONFIG_STATUS <<\EOF
fi
for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
# Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
case "$ac_file" in
*:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
*) ac_file_in="${ac_file}.in" ;;
esac
echo creating $ac_file
rm -f conftest.frag conftest.in conftest.out
ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
cat $ac_file_inputs > conftest.in
EOF
# Transform confdefs.h into a sed script conftest.vals that substitutes
# the proper values into config.h.in to produce config.h. And first:
# Protect against being on the right side of a sed subst in config.status.
# Protect against being in an unquoted here document in config.status.
rm -f conftest.vals
cat > conftest.hdr <<\EOF
s/[\\&%]/\\&/g
s%[\\$`]%\\&%g
s%#define \([A-Za-z_][A-Za-z0-9_]*\) *\(.*\)%${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD}%gp
s%ac_d%ac_u%gp
s%ac_u%ac_e%gp
EOF
sed -n -f conftest.hdr confdefs.h > conftest.vals
rm -f conftest.hdr
# This sed command replaces #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.
cat >> conftest.vals <<\EOF
s%^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*%/* & */%
EOF
# Break up conftest.vals because some shells have a limit on
# the size of here documents, and old seds have small limits too.
rm -f conftest.tail
while :
do
ac_lines=`grep -c . conftest.vals`
# grep -c gives empty output for an empty file on some AIX systems.
if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
# Write a limited-size here document to conftest.frag.
echo ' cat > conftest.frag <<CEOF' >> $CONFIG_STATUS
sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
echo 'CEOF
sed -f conftest.frag conftest.in > conftest.out
rm -f conftest.in
mv conftest.out conftest.in
' >> $CONFIG_STATUS
sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
rm -f conftest.vals
mv conftest.tail conftest.vals
done
rm -f conftest.vals
cat >> $CONFIG_STATUS <<\EOF
rm -f conftest.frag conftest.h
echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
cat conftest.in >> conftest.h
rm -f conftest.in
if cmp -s $ac_file conftest.h 2>/dev/null; then
echo "$ac_file is unchanged"
rm -f conftest.h
else
# Remove last slash and all that follows it. Not all systems have dirname.
ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
# The file is in a subdirectory.
test ! -d "$ac_dir" && mkdir "$ac_dir"
fi
rm -f $ac_file
mv conftest.h $ac_file
fi
fi; done
EOF
cat >> $CONFIG_STATUS <<EOF
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}
libiberty_topdir=${libiberty_topdir}
EOF
cat >> $CONFIG_STATUS <<\EOF
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
. ${libiberty_topdir}/config-ml.in
fi
fi
exit 0
EOF
chmod +x $CONFIG_STATUS
rm -fr confdefs* $ac_clean_files
test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1

333
agbcc/libiberty/configure.in Executable file
View File

@ -0,0 +1,333 @@
dnl Process this file with autoconf to produce a configure script
AC_PREREQ(2.12.1)
AC_INIT(pexecute.c)
dnl We use these options to decide which functions to include.
AC_ARG_WITH(target-subdir,
[ --with-target-subdir=SUBDIR Configuring in a subdirectory])
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 -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_CONFIG_AUX_DIR($libiberty_topdir)
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, :)
# FIXME: We temporarily define our own version of AC_PROG_CC. This is
# copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We
# are probably using a cross compiler, which will not be able to fully
# link an executable. This should really be fixed in autoconf
# itself.
AC_DEFUN(LIB_AC_PROG_CC,
[AC_BEFORE([$0], [AC_PROG_CPP])dnl
AC_PROVIDE([AC_PROG_CC])
AC_CHECK_PROG(CC, gcc, gcc)
if test -z "$CC"; then
AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc)
test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH])
fi
AC_PROG_CC_GNU
if test $ac_cv_prog_gcc = yes; then
GCC=yes
dnl Check whether -g works, even if CFLAGS is set, in case the package
dnl plays around with CFLAGS (such as to build both debugging and
dnl normal versions of a library), tasteless as that idea is.
ac_test_CFLAGS="${CFLAGS+set}"
ac_save_CFLAGS="$CFLAGS"
CFLAGS=
AC_PROG_CC_G
if test "$ac_test_CFLAGS" = set; then
CFLAGS="$ac_save_CFLAGS"
elif test $ac_cv_prog_cc_g = yes; then
CFLAGS="-g -O2"
else
CFLAGS="-O2"
fi
else
GCC=
test "${CFLAGS+set}" = set || CFLAGS="-g"
fi
])
LIB_AC_PROG_CC
AC_ISC_POSIX
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
. ${srcdir}/config.table
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 stdlib.h string.h unistd.h strings.h sys/time.h)
AC_HEADER_SYS_WAIT
# 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 bzero"
funcs="$funcs calloc"
funcs="$funcs clock"
funcs="$funcs getcwd"
funcs="$funcs getpagesize"
funcs="$funcs index"
funcs="$funcs insque"
funcs="$funcs memchr"
funcs="$funcs memcmp"
funcs="$funcs memcpy"
funcs="$funcs memmove"
funcs="$funcs memset"
funcs="$funcs random"
funcs="$funcs rename"
funcs="$funcs rindex"
funcs="$funcs sigsetmask"
funcs="$funcs strcasecmp"
funcs="$funcs strchr"
funcs="$funcs strdup"
funcs="$funcs strncasecmp"
funcs="$funcs strrchr"
funcs="$funcs strstr"
funcs="$funcs strtod"
funcs="$funcs strtol"
funcs="$funcs strtoul"
funcs="$funcs tmpnam"
funcs="$funcs vasprintf"
funcs="$funcs vfprintf"
funcs="$funcs vprintf"
funcs="$funcs vsprintf"
funcs="$funcs waitpid"
# Also in the old function.def file: alloca, vfork, getopt.
vars="sys_errlist sys_nerr sys_siglist"
checkfuncs="getrusage on_exit psignal strerror strsignal sysconf times"
# 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 bzero calloc clock getcwd)
AC_CHECK_FUNCS(getpagesize index insque memchr memcmp memcpy memmove)
AC_CHECK_FUNCS(memset random rename rindex sigsetmask strcasecmp)
AC_CHECK_FUNCS(strchr strdup strncasecmp strrchr strstr strtod strtol)
AC_CHECK_FUNCS(strtoul tmpnam vasprintf vfprintf vprintf vsprintf waitpid)
AC_DEFINE(HAVE_SYS_ERRLIST)
AC_DEFINE(HAVE_SYS_NERR)
AC_DEFINE(HAVE_SYS_SIGLIST)
AC_CHECK_FUNCS(getrusage on_exit psignal strerror strsignal sysconf times)
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. Also,
# if the host does not provide alloca, we set ALLOCA to alloca.o
setobjs=
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
ALLOCA="alloca.o"
LIBOBJS="asprintf.o basename.o insque.o random.o strdup.o vasprintf.o"
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
fi
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.
LIBOBJS="basename.o getpagesize.o insque.o random.o strcasecmp.o"
LIBOBJS="$LIBOBJS strncasecmp.o strdup.o vfork.o waitpid.o vasprintf.o"
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
*-*-cygwin*)
# The Cygwin library actually uses a couple of files from
# libiberty when it is built. If we are building a native
# Cygwin, and we run the tests, we will appear to have these
# files. However, when we go on to build winsup, we will wind up
# with a library which does not have the files, since they should
# have come from libiberty.
# We handle this by removing the functions the winsup library
# provides from our shell variables, so that they appear to be
# missing.
funcs="`echo $funcs | sed -e 's/random//'`"
LIBOBJS="$LIBOBJS random.o"
vars="`echo $vars | sed -e 's/sys_siglist//'`"
checkfuncs="`echo $checkfuncs | sed -e 's/strsignal//' -e 's/psignal//'`"
;;
*-*-mingw32*)
# Under mingw32, sys_nerr and sys_errlist exist, but they are
# macros, so the test below won't find them.
vars="`echo $vars | sed -e 's/sys_nerr//' -e 's/sys_errlist//'`"
AC_DEFINE(HAVE_SYS_NERR)
AC_DEFINE(HAVE_SYS_ERRLIST)
;;
esac
# We haven't set the list of objects yet. Use the standard autoconf
# tests. This will only work if the compiler works.
AC_PROG_CC_WORKS
AC_REPLACE_FUNCS($funcs)
AC_FUNC_ALLOCA
AC_FUNC_VFORK
if test $ac_cv_func_vfork_works = no; then
LIBOBJS="$LIBOBJS vfork.o"
fi
for v in $vars; do
AC_MSG_CHECKING([for $v])
AC_CACHE_VAL(libiberty_cv_var_$v,
[AC_TRY_LINK([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
AC_CHECK_FUNCS($checkfuncs)
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
AC_SUBST(INSTALL_DEST)
# We need multilib support, but only if configuring for the target.
AC_OUTPUT(Makefile,
[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
. ${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}
libiberty_topdir=${libiberty_topdir}
)

140
agbcc/libiberty/copysign.c Executable file
View File

@ -0,0 +1,140 @@
#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
double DEFUN(copysign, (x, y), double x AND double y)
{
__ieee_double_shape_type a,b;
b.value = y;
a.value = x;
a.number.sign =b.number.sign;
return a.value;
}

73
agbcc/libiberty/fdmatch.c Executable file
View File

@ -0,0 +1,73 @@
/* 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/*
NAME
fdmatch -- see if two file descriptors refer to same file
SYNOPSIS
int fdmatch (int fd1, int fd2)
DESCRIPTION
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 (stdout for example) or from the SVR4 /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&minor
device numbers and inode numbers.
BUGS
(FIXME: does this work for networks?)
It works for NFS, which assigns a device number to each mount.
*/
#include "ansidecl.h"
#include "libiberty.h"
#include <sys/types.h>
#include <sys/stat.h>
int fdmatch (fd1, fd2)
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);
}
}

403
agbcc/libiberty/floatformat.c Executable file
View File

@ -0,0 +1,403 @@
/* IEEE floating point support routines, for GDB, the GNU Debugger.
Copyright (C) 1991, 1994 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
#include "floatformat.h"
#include <math.h> /* ldexp */
#ifdef __STDC__
#include <stddef.h>
extern void *memcpy (void *s1, const void *s2, size_t n);
extern void *memset (void *s, int c, size_t n);
#else
extern char *memcpy ();
extern char *memset ();
#endif
/* 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 single and double, big and little endian. */
const struct floatformat floatformat_ieee_single_big =
{
floatformat_big, 32, 0, 1, 8, 127, 255, 9, 23, floatformat_intbit_no
};
const struct floatformat floatformat_ieee_single_little =
{
floatformat_little, 32, 0, 1, 8, 127, 255, 9, 23, floatformat_intbit_no
};
const struct floatformat floatformat_ieee_double_big =
{
floatformat_big, 64, 0, 1, 11, 1023, 2047, 12, 52, floatformat_intbit_no
};
const struct floatformat floatformat_ieee_double_little =
{
floatformat_little, 64, 0, 1, 11, 1023, 2047, 12, 52, floatformat_intbit_no
};
/* 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
};
const struct floatformat floatformat_i387_ext =
{
floatformat_little, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
floatformat_intbit_yes
};
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
};
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
};
const struct floatformat floatformat_m88110_ext =
{
#ifdef HARRIS_FLOAT_FORMAT
/* 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
#else
floatformat_big, 80, 0, 1, 15, 0x3fff, 0x7fff, 16, 64,
floatformat_intbit_yes
#endif /* HARRIS_FLOAT_FORMAT */
};
const struct floatformat floatformat_arm_ext =
{
/* Bits 1 to 16 are unused. */
floatformat_big, 96, 0, 17, 15, 0x3fff, 0x7fff, 32, 64,
floatformat_intbit_yes
};
static unsigned long get_field PARAMS ((unsigned char *,
enum floatformat_byteorders,
unsigned int,
unsigned int,
unsigned int));
/* Extract a field which starts at START and is LEN bytes long. DATA and
TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */
static unsigned long
get_field (data, order, total_len, start, len)
unsigned char *data;
enum floatformat_byteorders order;
unsigned int total_len;
unsigned int start;
unsigned int len;
{
unsigned long result;
unsigned int cur_byte;
int cur_bitshift;
/* Start at the least significant part of the field. */
cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little)
cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
cur_bitshift =
((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
result = *(data + cur_byte) >> (-cur_bitshift);
cur_bitshift += FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little)
++cur_byte;
else
--cur_byte;
/* Move towards the most significant part of the field. */
while (cur_bitshift < len)
{
if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
/* This is the last byte; zero out the bits which are not part of
this field. */
result |=
(*(data + cur_byte) & ((1 << (len - cur_bitshift)) - 1))
<< cur_bitshift;
else
result |= *(data + cur_byte) << cur_bitshift;
cur_bitshift += FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little)
++cur_byte;
else
--cur_byte;
}
return result;
}
#ifndef min
#define min(a, b) ((a) < (b) ? (a) : (b))
#endif
/* Convert from FMT to a double.
FROM is the address of the extended float.
Store the double in *TO. */
void
floatformat_to_double (fmt, from, to)
const struct floatformat *fmt;
char *from;
double *to;
{
unsigned char *ufrom = (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 */
exponent = get_field (ufrom, fmt->byteorder, fmt->totalsize,
fmt->exp_start, fmt->exp_len);
/* Note that if exponent indicates a NaN, we can't really do anything useful
(not knowing if the host has NaN's, or how to build one). So it will
end up as an infinity or something close; that is OK. */
mant_bits_left = fmt->man_len;
mant_off = fmt->man_start;
dto = 0.0;
special_exponent = exponent == 0 || 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);
dto += ldexp ((double)mant, exponent - mant_bits);
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 PARAMS ((unsigned char *, enum floatformat_byteorders,
unsigned int,
unsigned int,
unsigned int,
unsigned long));
/* Set a field which starts at START and is LEN bytes long. DATA and
TOTAL_LEN are the thing we are extracting it from, in byteorder ORDER. */
static void
put_field (data, order, total_len, start, len, stuff_to_put)
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 cur_bitshift;
/* Start at the least significant part of the field. */
cur_byte = (start + len) / FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little)
cur_byte = (total_len / FLOATFORMAT_CHAR_BIT) - cur_byte - 1;
cur_bitshift =
((start + len) % FLOATFORMAT_CHAR_BIT) - FLOATFORMAT_CHAR_BIT;
*(data + cur_byte) &=
~(((1 << ((start + len) % FLOATFORMAT_CHAR_BIT)) - 1) << (-cur_bitshift));
*(data + cur_byte) |=
(stuff_to_put & ((1 << FLOATFORMAT_CHAR_BIT) - 1)) << (-cur_bitshift);
cur_bitshift += FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little)
++cur_byte;
else
--cur_byte;
/* Move towards the most significant part of the field. */
while (cur_bitshift < len)
{
if (len - cur_bitshift < FLOATFORMAT_CHAR_BIT)
{
/* This is the last byte. */
*(data + cur_byte) &=
~((1 << (len - cur_bitshift)) - 1);
*(data + cur_byte) |= (stuff_to_put >> cur_bitshift);
}
else
*(data + cur_byte) = ((stuff_to_put >> cur_bitshift)
& ((1 << FLOATFORMAT_CHAR_BIT) - 1));
cur_bitshift += FLOATFORMAT_CHAR_BIT;
if (order == floatformat_little)
++cur_byte;
else
--cur_byte;
}
}
/* 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 (fmt, from, to)
const struct floatformat *fmt;
double *from;
char *to;
{
double dfrom;
int exponent;
double mant;
unsigned int mant_bits, mant_off;
int mant_bits_left;
unsigned char *uto = (unsigned char *)to;
memcpy (&dfrom, from, sizeof (dfrom));
memset (uto, 0, fmt->totalsize / FLOATFORMAT_CHAR_BIT);
if (dfrom == 0)
return; /* Result is zero */
if (dfrom != dfrom)
{
/* From is 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 irrel */
put_field (uto, fmt->byteorder, fmt->totalsize, fmt->man_start,
32, 1);
return;
}
/* If negative, set the sign bit. */
if (dfrom < 0)
{
put_field (uto, fmt->byteorder, fmt->totalsize, fmt->sign_start, 1, 1);
dfrom = -dfrom;
}
/* How to tell an infinity from an ordinary number? FIXME-someday */
mant = frexp (dfrom, &exponent);
put_field (uto, fmt->byteorder, fmt->totalsize, fmt->exp_start, fmt->exp_len,
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, then we need to discard it.
If we are discarding a zero, we should be (but are not) creating
a denormalized number which means adjusting the exponent
(I think). */
if (mant_bits_left == fmt->man_len
&& fmt->intbit == floatformat_intbit_no)
{
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;
}
}
#ifdef IEEE_DEBUG
/* This is to be run on a host which uses IEEE floating point. */
void
ieee_test (n)
double n;
{
double result;
char exten[16];
floatformat_to_double (&floatformat_ieee_double_big, &n, &result);
if (n != result)
printf ("Differ(to): %.20g -> %.20g\n", n, result);
floatformat_from_double (&floatformat_ieee_double_big, &n, &result);
if (n != result)
printf ("Differ(from): %.20g -> %.20g\n", n, result);
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);
#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 ()
{
ieee_test (0.5);
ieee_test (256.0);
ieee_test (0.12345);
ieee_test (234235.78907234);
ieee_test (-512.0);
ieee_test (-0.004321);
return 0;
}
#endif

225
agbcc/libiberty/fnmatch.c Executable file
View File

@ -0,0 +1,225 @@
/* Copyright (C) 1991, 1992, 1993 Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
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, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, 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 <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 (pattern, string, flags)
const char *pattern;
const char *string;
int flags;
{
register const char *p = pattern, *n = string;
register unsigned char c;
/* Note that this evalutes C many times. */
#define FOLD(c) ((flags & FNM_CASEFOLD) && isupper (c) ? 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 not;
if (*n == '\0')
return FNM_NOMATCH;
if ((flags & FNM_PERIOD) && *n == '.' &&
(n == string || ((flags & FNM_FILE_NAME) && n[-1] == '/')))
return FNM_NOMATCH;
not = (*p == '!' || *p == '^');
if (not)
++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 (!not)
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 (not)
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__. */

54
agbcc/libiberty/getcwd.c Executable file
View File

@ -0,0 +1,54 @@
/* Emulate getcwd using getwd.
This function is in the public domain. */
/*
NAME
getcwd -- get absolute pathname for current working directory
SYNOPSIS
char *getcwd (char pathname[len], len)
DESCRIPTION
Copy the absolute pathname for the current working directory into
the supplied buffer and return a pointer to the buffer. If the
current directory's path doesn't fit in LEN characters, the result
is NULL and errno is set.
BUGS
Emulated via the getwd() call, which is reasonable for most
systems that do not have getcwd().
*/
#include "config.h"
#ifdef HAVE_SYS_PARAM_H
#include <sys/param.h>
#endif
#include <errno.h>
extern char *getwd ();
extern int errno;
#ifndef MAXPATHLEN
#define MAXPATHLEN 1024
#endif
char *
getcwd (buf, len)
char *buf;
int len;
{
char ourbuf[MAXPATHLEN];
char *result;
result = getwd (ourbuf);
if (result) {
if (strlen (ourbuf) >= len) {
errno = ERANGE;
return 0;
}
strcpy (buf, ourbuf);
}
return buf;
}

1049
agbcc/libiberty/getopt.c Executable file
View File

@ -0,0 +1,1049 @@
/* 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, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98
Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
/* This 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 <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 _
#define _(msgid) (msgid)
#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. */
#ifndef getenv
extern char *getenv ();
#endif
static char *
my_index (str, chr)
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 (argv)
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 = 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 (argc, argv, optstring)
int argc;
char *const *argv;
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 (argc, argv, optstring, longopts, longind, long_only)
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 (argc, argv, optstring)
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 (argc, argv)
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 */

190
agbcc/libiberty/getopt1.c Executable file
View File

@ -0,0 +1,190 @@
/* getopt_long and getopt_long_only entry points for GNU getopt.
Copyright (C) 1987,88,89,90,91,92,93,94,96,97,98
Free Software Foundation, Inc.
NOTE: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include "getopt.h"
#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>
/* 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 (argc, argv, options, long_options, opt_index)
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 (argc, argv, options, long_options, opt_index)
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 (argc, argv)
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 */

96
agbcc/libiberty/getpagesize.c Executable file
View File

@ -0,0 +1,96 @@
/* Emulation of getpagesize() for systems that need it. */
/*
NAME
getpagesize -- return the number of bytes in page of memory
SYNOPSIS
int getpagesize (void)
DESCRIPTION
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.
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 ()
{
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 ()
{
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 */

74
agbcc/libiberty/getruntime.c Executable file
View File

@ -0,0 +1,74 @@
/* Return time used so far, in microseconds.
Copyright (C) 1994 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "config.h"
#include "ansidecl.h"
#include "libiberty.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. */
#include <time.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
/* This is a fallback; if wrong, it will likely make obviously wrong
results. */
#ifndef CLOCKS_PER_SEC
#define CLOCKS_PER_SEC 1
#endif
long
get_run_time ()
{
#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 /* ! HAVE_GETRUSAGE */
#ifdef HAVE_TIMES
struct tms tms;
times (&tms);
return (tms.tms_utime + tms.tms_stime) * (1000000 / 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 */
}

33
agbcc/libiberty/hex.c Executable file
View File

@ -0,0 +1,33 @@
/* Hex character manipulation support.
Copyright (C) 1995 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "libiberty.h"
char _hex_value[_hex_array_size];
void hex_init ()
{
int i;
for (i = 0; i < _hex_array_size; i++)
_hex_value[i] = _hex_bad;
for (i = 0; i < 10; i++)
_hex_value['0' + i] = i;
for (i = 0; i < 6; i++)
_hex_value['a' + i] = _hex_value['A' + i] = 10 + i;
}

11
agbcc/libiberty/index.c Executable file
View File

@ -0,0 +1,11 @@
/* Stub implementation of (obsolete) index(). */
extern char * strchr();
char *
index (s, c)
char *s;
int c;
{
return strchr (s, c);
}

50
agbcc/libiberty/insque.c Executable file
View File

@ -0,0 +1,50 @@
/* insque(3C) routines
This file is in the public domain. */
/*
NAME
insque, remque -- insert, remove an element from a queue
SYNOPSIS
struct qelem {
struct qelem *q_forw;
struct qelem *q_back;
char q_data[];
};
void insque (struct qelem *elem, struct qelem *pred)
void remque (struct qelem *elem)
DESCRIPTION
Routines to manipulate queues built from doubly linked lists.
The insque routine inserts ELEM in the queue immediately after
PRED. The remque routine removes ELEM from its containing queue.
*/
struct qelem {
struct qelem *q_forw;
struct qelem *q_back;
};
void
insque (elem, pred)
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 (elem)
struct qelem *elem;
{
elem -> q_forw -> q_back = elem -> q_back;
elem -> q_back -> q_forw = elem -> q_forw;
}

29
agbcc/libiberty/makefile.dos Executable file
View File

@ -0,0 +1,29 @@
CFLAGS=-O2
OBJS = \
argv.o \
basename.o \
concat.o \
cplus-dem.o \
fdmatch.o \
floatformat.o \
getopt.o \
getopt1.o \
getruntime.o \
hex.o \
msdos.o \
obstack.o \
spaces.o \
strerror.o \
strsignal.o \
xatexit.o \
xexit.o \
xmalloc.o \
$E
.c.o:
gcc -I../include $(CFLAGS) -c $<
libiberty.a : $(OBJS)
-rm libiberty.a
ar rvs libiberty.a $(OBJS)

33
agbcc/libiberty/makefile.vms Executable file
View File

@ -0,0 +1,33 @@
#
# Makefile for libiberty under openVMS/Alpha
#
# For use with gnu-make for vms
#
# Created by Klaus K"ampf, kkaempf@progis.de
#
#
OBJS=bcopy.obj,bcmp.obj,getopt.obj,obstack.obj,xexit.obj,xmalloc.obj,hex.obj,\
getopt1.obj,cplus-dem.obj,strncasecmp.obj,strcasecmp.obj,strdup.obj,\
concat.obj,getruntime.obj,getpagesize.obj,alloca.obj,xstrerror.obj,\
xstrdup.obj,xatexit.obj,choose-temp.obj,fnmatch.obj,objalloc.obj
ifeq ($(CC),gcc)
CFLAGS=/include=([],[-.include])
else
# assume dec c
CFLAGS=/noopt/debug/include=([],[-.include])/define=("const=")/warnings=disable=(missingreturn,implicitfunc)
endif
libiberty.olb: config.h alloca-conf.h $(OBJS)
purge
lib/create libiberty *.obj
config.h: config.h-vms
$(CP) $< $@
clean:
$$ purge
$(RM) config.h;
$(RM) *.obj;
$(RM) libiberty.olb;

60
agbcc/libiberty/memchr.c Executable file
View File

@ -0,0 +1,60 @@
/*
FUNCTION
<<memchr>>---find character in memory
INDEX
memchr
ANSI_SYNOPSIS
#include <string.h>
void *memchr(const void *<[src]>, int <[c]>, size_t <[length]>);
TRAD_SYNOPSIS
#include <string.h>
void *memchr(<[src]>, <[c]>, <[length]>)
void *<[src]>;
void *<[c]>;
size_t <[length]>;
DESCRIPTION
This function searches memory starting at <<*<[src]>>> for the
character <[c]>. The search only ends with the first
occurrence of <[c]>, or after <[length]> characters; in
particular, <<NULL>> does not terminate the search.
RETURNS
If the character <[c]> is found within <[length]> characters
of <<*<[src]>>>, a pointer to the character is returned. If
<[c]> is not found, then <<NULL>> is returned.
PORTABILITY
<<memchr>> requires no supporting OS subroutines.
QUICKREF
memchr ansi pure
*/
#include <ansidecl.h>
#ifdef __STDC__
#include <stddef.h>
#else
#define size_t unsigned long
#endif
PTR
memchr (src_void, c, length)
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;
}

38
agbcc/libiberty/memcmp.c Executable file
View File

@ -0,0 +1,38 @@
/* memcmp -- compare two memory regions.
This function is in the public domain. */
/*
NAME
memcmp -- compare two memory regions
SYNOPSIS
int memcmp (const void *from, const void *to, size_t count)
DESCRIPTION
Compare two memory regions and return less than,
equal to, or greater than zero, according to lexicographical
ordering of the compared regions.
*/
#include <ansidecl.h>
#ifdef __STDC__
#include <stddef.h>
#else
#define size_t unsigned long
#endif
int
DEFUN(memcmp, (str1, str2, count),
const PTR str1 AND const PTR str2 AND size_t count)
{
register unsigned char *s1 = (unsigned char*)str1;
register unsigned char *s2 = (unsigned char*)str2;
while (count-- > 0)
{
if (*s1++ != *s2++)
return s1[-1] < s2[-1] ? -1 : 1;
}
return 0;
}

28
agbcc/libiberty/memcpy.c Executable file
View File

@ -0,0 +1,28 @@
/* memcpy (the standard C function)
This function is in the public domain. */
/*
NAME
memcpy -- copy memory regions of arbitary length
SYNOPSIS
void* memcpy (void *out, const void *in, size_t n);
DESCRIPTION
Copy LENGTH bytes from memory region pointed to by IN to memory
region pointed to by OUT.
*/
#include <ansidecl.h>
#ifdef __STDC__
#include <stddef.h>
#else
#define size_t unsigned long
#endif
PTR
DEFUN(memcpy, (out, in, length), PTR out AND const PTR in AND size_t length)
{
bcopy(in, out, length);
return out;
}

18
agbcc/libiberty/memmove.c Executable file
View File

@ -0,0 +1,18 @@
/* Wrapper to implement ANSI C's memmove using BSD's bcopy. */
/* This function is in the public domain. --Per Bothner. */
#include <ansidecl.h>
#ifdef __STDC__
#include <stddef.h>
#else
#define size_t unsigned long
#endif
PTR
memmove (s1, s2, n)
PTR s1;
const PTR s2;
size_t n;
{
bcopy (s2, s1, n);
return s1;
}

19
agbcc/libiberty/memset.c Executable file
View File

@ -0,0 +1,19 @@
/* memset
This implementation is in the public domain. */
#include <ansidecl.h>
#ifdef __STDC__
#include <stddef.h>
#else
#define size_t unsigned long
#endif
PTR
DEFUN(memset, (dest, val, len),
PTR dest AND register int val AND register size_t len)
{
register unsigned char *ptr = (unsigned char*)dest;
while (len-- > 0)
*ptr++ = val;
return dest;
}

128
agbcc/libiberty/mkstemp.c Executable file
View File

@ -0,0 +1,128 @@
/* Copyright (C) 1991, 1992, 1996, 1998 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, 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 <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__
typedef unsigned long long gcc_uint64_t;
#else
typedef unsigned long gcc_uint64_t;
#endif
#ifndef TMP_MAX
#define TMP_MAX 16384
#endif
/* Generate a unique temporary file name from TEMPLATE.
TEMPLATE has the form:
<path>/ccXXXXXX<suffix>
SUFFIX_LEN tells us how long <suffix> is (it can be zero length).
The last six characters of TEMPLATE before <suffix> must be "XXXXXX";
they are replaced with a string that makes the filename unique.
Returns a file descriptor open on the file for reading and writing. */
int
mkstemps (template, suffix_len)
char *template;
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 (template);
if ((int) len < 6 + suffix_len
|| strncmp (&template[len - 6 - suffix_len], "XXXXXX", 6))
{
return -1;
}
XXXXXX = &template[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 (template, O_RDWR|O_CREAT|O_EXCL, 0600);
if (fd >= 0)
/* The file does not exist. */
return fd;
/* 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. */
template[0] = '\0';
return -1;
}

7
agbcc/libiberty/mpw-config.in Executable file
View File

@ -0,0 +1,7 @@
# MPW configuration fragment for libiberty.
Echo '/* config.h. Generated by mpw-configure. */' > "{o}"config.new
MoveIfChange "{o}"config.new "{o}"config.h

51
agbcc/libiberty/mpw-make.sed Executable file
View File

@ -0,0 +1,51 @@
# Sed commands to finish translating libiberty's Unix makefile to MPW syntax.
# Comment out a useless thing.
/^\.always\./s/^/#/
# Replace the auto-generated list with the list of what we know we need.
s/`cat needed-list`/"{o}"alloca.c.o "{o}"bcopy.c.o "{o}"getpagesize.c.o "{o}"insque.c.o "{o}"mpw.c.o "{o}"strcasecmp.c.o "{o}"strdup.c.o "{o}"strncasecmp.c.o/
# Paste in some desirable definitions.
# The default rule here completely replaces the tricky stuff in the Unix
# Makefile.in.
/^###$/a\
\
HDEFINES = -d NEED_sys_siglist -d NEED_sys_errlist -d NEED_basename -d NEED_strcasecmp -d NEED_strncasecmp\
INCLUDES = -i : -i {INCDIR}: -i {INCDIR}:mpw: -i ::extra-include: -i "{s}"\
\
.c.o \\Option-f .c\
{CC} @DASH_C_FLAG@ {DepDir}{Default}.c {LIBCFLAGS} {INCLUDES} {HDEFINES} @SEGMENT_FLAG({Default})@ -o {TargDir}{Default}.c.o\
# Remove dependency on needed-list, which we don't use.
/DO_ALSO =/s/needed-list//
/INCDIR=/s/"{srcdir}"{MULTISRCTOP}::/"{topsrcdir}"/
# Whack out the COMPILE.c trickiness.
/^COMPILE.c /,/^$/d
# Remove the multido trickiness from the "all" target.
/^all \\Option-f/,/^$/c\
all \\Option-f {TARGETLIB}\
# Remove the RULE1/RULE2 crud.
/if \[/,/fi/d
/^RULE1 =/,/RULE2 =/d
/RULE2/s/RULE2/TARGETLIB/
# Don't want fdmatch ever.
s/ "{o}"fdmatch.c.o//
# Fix paths to generated files.
/config.h/s/"{s}"config.h/"{o}"config.h/
# Whack out config rebuild rules.
/^"{o}"config.h \\Option-f/,/^$/d

1010
agbcc/libiberty/mpw.c Executable file
View File

@ -0,0 +1,1010 @@
/* MPW-Unix compatibility library.
Copyright (C) 1993, 1994, 1995, 1996 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This should only be compiled and linked under MPW. */
#include "mpw.h"
#include <stdlib.h>
#ifndef USE_MW_HEADERS
#include <sys/time.h>
#include <sys/resource.h>
#endif
#include <Types.h>
#include <Files.h>
#include <Timer.h>
/* Initialize to 0 at first, then set to errno_max() later. */
int sys_nerr = 0;
/* Debug flag for pathname hacking. Set this to one and rebuild. */
int DebugPI = -1;
void
mpwify_filename(char *unixname, char *macname)
{
int i, j;
/* (should truncate 255 chars from end of name, not beginning) */
if (strlen (unixname) > 255)
{
fprintf (stderr, "Pathname \"%s\" is too long for Macs, truncating\n",
unixname);
}
j = 0;
/* If you're going to end up with one or more colons in the middle of a
path after an all-Unix relative path is translated, you must add a
colon on the front, so that the first component is not thought to be
a disk name. */
if (unixname[0] != '/' && ! strchr (unixname, ':') && strchr (unixname, '/'))
{
macname[j++] = ':';
}
for (i = 0; unixname[i] != '\0' && i < 255; ++i)
{
if (i == 0 && unixname[i] == '/')
{
if (strncmp (unixname, "/tmp/", 5) == 0)
{
/* A temporary name, make a more Mac-flavored tmpname. */
/* A better choice would be {Boot}Trash:foo, but
that would require being able to identify the
boot disk's and trashcan's name. Another option
would be to have an env var, so user can point it
at a ramdisk. */
macname[j++] = ':';
macname[j++] = 't';
macname[j++] = 'm';
macname[j++] = 'p';
macname[j++] = '_';
i += 4;
}
else
{
/* Don't copy the leading slash. */
}
}
else if (unixname[i] == ':' && unixname[i+1] == '/')
{
macname[j++] = ':';
i += 1;
}
else if (unixname[i] == '.' && unixname[i+1] == '/')
{
macname[j++] = ':';
i += 1;
}
else if (unixname[i] == '.' && unixname[i+1] == '.' && unixname[i+2] == '/')
{
macname[j++] = ':';
macname[j++] = ':';
i += 2;
}
else if (unixname[i] == '/')
{
macname[j++] = ':';
}
else
{
macname[j++] = unixname[i];
}
}
macname[j] = '\0';
/* Allow for getting the debug flag from an env var; quite useful. */
if (DebugPI < 0)
DebugPI = (*(getenv ("DEBUG_PATHNAMES")) == '1' ? 1 : 0);
if (DebugPI)
{
fprintf (stderr, "# Made \"%s\"\n", unixname);
fprintf (stderr, "# into \"%s\"\n", macname);
}
}
/* MPW-flavored basename finder. */
char *
mpw_basename (name)
char *name;
{
char *base = name;
while (*name)
{
if (*name++ == ':')
{
base = name;
}
}
return base;
}
/* Mixed MPW/Unix basename finder. This can be led astray by
filenames with slashes in them and come up with a basename that
either corresponds to no file or (worse) to some other file, so
should only be tried if other methods of finding a file via a
basename have failed. */
char *
mpw_mixed_basename (name)
char *name;
{
char *base = name;
while (*name)
{
if (*name == '/' || *name == ':')
{
base = name + 1;
}
++name;
}
return base;
}
/* This function is fopen() modified to create files that are type TEXT
or 'BIN ', and always of type 'MPS '. */
FILE *
mpw_fopen (char *name, char *mode)
{
#undef fopen
int errnum;
FILE *fp;
char tmpname[256];
mpwify_filename (name, tmpname);
PROGRESS (1);
fp = fopen (tmpname, mode);
errnum = errno;
/* If writing, need to set type and creator usefully. */
if (strchr (mode, 'w'))
{
char *pname = (char *) malloc (strlen (tmpname) + 2);
OSErr e;
struct FInfo fi;
pname[0] = strlen (tmpname);
strcpy (pname+1, tmpname);
e = GetFInfo ((ConstStr255Param) pname, 0, &fi);
/* should do spiffier error handling */
if (e != 0)
fprintf(stderr, "GetFInfo returns %d\n", e);
if (strchr (mode, 'b'))
{
fi.fdType = (OSType) 'BIN ';
}
else
{
fi.fdType = (OSType) 'TEXT';
}
fi.fdCreator = (OSType) 'MPS ';
e = SetFInfo ((ConstStr255Param) pname, 0, &fi);
if (e != 0)
fprintf(stderr, "SetFInfo returns %d\n", e);
free (pname);
}
if (fp == NULL)
errno = errnum;
return fp;
}
/* This is a version of fseek() modified to fill the file with zeros
if seeking past the end of it. */
#define ZEROBLKSIZE 4096
char zeros[ZEROBLKSIZE];
int
mpw_fseek (FILE *fp, int offset, int whence)
{
#undef fseek
int cursize, numleft;
PROGRESS (1);
if (whence == SEEK_SET)
{
fseek (fp, 0, SEEK_END);
cursize = ftell (fp);
if (offset > cursize)
{
numleft = offset - cursize;
while (numleft > ZEROBLKSIZE)
{
/* This might fail, should check for that. */
PROGRESS (1);
fwrite (zeros, 1, ZEROBLKSIZE, fp);
numleft -= ZEROBLKSIZE;
}
PROGRESS (1);
fwrite (zeros, 1, numleft, fp);
fflush (fp);
}
}
return fseek (fp, offset, whence);
}
int
mpw_fread (char *ptr, int size, int nitems, FILE *stream)
{
#undef fread
int rslt;
PROGRESS (1);
rslt = fread (ptr, size, nitems, stream);
PROGRESS (1);
return rslt;
}
int
mpw_fwrite (char *ptr, int size, int nitems, FILE *stream)
{
#undef fwrite
int rslt;
PROGRESS (1);
rslt = fwrite (ptr, size, nitems, stream);
PROGRESS (1);
return rslt;
}
int
link ()
{
fprintf (stderr, "link not available!\n");
mpw_abort ();
}
int
fork ()
{
fprintf (stderr, "fork not available!\n");
mpw_abort ();
}
int
vfork ()
{
fprintf (stderr, "vfork not available!\n");
mpw_abort ();
return (-1);
}
int
pipe (int *fd)
{
fprintf (stderr, "pipe not available!\n");
mpw_abort ();
return (-1);
}
#ifndef USE_MW_HEADERS
int
execvp (char *file, char **argv)
{
fprintf (stderr, "execvp not available!\n");
mpw_abort ();
return (-1);
}
int
execv (char *path, char **argv)
{
fprintf (stderr, "execv not available!\n");
mpw_abort ();
return (-1);
}
#endif
int
kill (int pid, int sig)
{
fprintf (stderr, "kill not available!\n");
mpw_abort ();
return (-1);
}
int
wait (int *status)
{
*status = 0;
return 0;
}
#ifndef USE_MW_HEADERS
int
sleep (int seconds)
{
unsigned long start_time, now;
time (&start_time);
while (1)
{
PROGRESS (1);
time (&now);
if (now > start_time + seconds)
return 0;
}
}
#endif
void
putenv (char *str)
{
/* The GCC driver calls this to do things for collect2, but we
don't care about collect2. */
}
int
chmod (char *path, int mode)
{
/* Pretend it was all OK. */
return 0;
}
#ifndef USE_MW_HEADERS
int
getuid ()
{
/* One value is as good as another... */
return 0;
}
int
getgid ()
{
/* One value is as good as another... */
return 0;
}
#endif
/* Instead of coredumping, which is not a normal Mac facility, we
drop into Macsbug. If we then "g" from Macsbug, the program will
exit cleanly. */
void
mpw_abort ()
{
/* Make sure no output still buffered up, then zap into MacsBug. */
fflush(stdout);
fflush(stderr);
printf("## Abort! ##\n");
#ifdef MPW_SADE
SysError(8005);
#else
Debugger();
#endif
/* "g" in MacsBug will then cause a regular error exit. */
exit (1);
}
/* Imitation getrusage based on the ANSI clock() function. */
int
getrusage (int who, struct rusage *rusage)
{
int clk = clock ();
#if 0
rusage->ru_utime.tv_sec = clk / CLOCKS_PER_SEC;
rusage->ru_utime.tv_usec = ((clk * 1000) / CLOCKS_PER_SEC) * 1000;
rusage->ru_stime.tv_sec = 0;
rusage->ru_stime.tv_usec = 0;
#endif
}
int
sbrk ()
{
return 0;
}
#ifndef USE_MW_HEADERS
int
isatty (int fd)
{
return 0;
}
/* This is inherited from Timothy Murray's Posix library. */
#include "utime.h"
int
utime (char *filename, struct utimbuf *times)
{
CInfoPBRec cipbr;
HFileInfo *fpb = (HFileInfo *) &cipbr;
DirInfo *dpb = (DirInfo *) &cipbr;
unsigned char pname[256];
short err;
strcpy ((char *) pname, filename);
c2pstr (pname);
dpb->ioDrDirID = 0L;
fpb->ioNamePtr = pname;
fpb->ioVRefNum = 0;
fpb->ioFDirIndex = 0;
fpb->ioFVersNum = 0;
err = PBGetCatInfo (&cipbr, 0);
if (err != noErr) {
errno = ENOENT;
return -1;
}
dpb->ioDrDirID = 0L;
fpb->ioFlMdDat = times->modtime;
fpb->ioFlCrDat = times->actime;
err = PBSetCatInfo (&cipbr, 0);
if (err != noErr) {
errno = EACCES;
return -1;
}
return 0;
}
int
mkdir (char *path, int mode)
{
errno = ENOSYS;
return -1;
}
int
rmdir ()
{
errno = ENOSYS;
return -1;
}
#endif
chown ()
{
errno = ENOSYS;
return -1;
}
char *myenviron[] = {NULL};
char **environ = myenviron;
#ifndef USE_MW_HEADERS
/* Minimal 'stat' emulation: tells directories from files and
gives length and mtime.
Derived from code written by Guido van Rossum, CWI, Amsterdam
and placed by him in the public domain. */
extern int __uid, __gid;
int __uid = 0;
int __gid = 0;
/* Bits in ioFlAttrib: */
#define LOCKBIT (1<<0) /* File locked */
#define DIRBIT (1<<4) /* It's a directory */
/* Macified "stat" in which filename is given relative to a directory,
specified by long DirID. */
static int
_stat (char *name, long dirid, struct stat *buf)
{
CInfoPBRec cipbr;
HFileInfo *fpb = (HFileInfo*) &cipbr;
DirInfo *dpb = (DirInfo*) &cipbr;
Str255 pname;
short err;
/* Make a temp copy of the name and pascalize. */
strcpy ((char *) pname, name);
c2pstr (pname);
cipbr.dirInfo.ioDrDirID = dirid;
cipbr.hFileInfo.ioNamePtr = pname;
cipbr.hFileInfo.ioVRefNum = 0;
cipbr.hFileInfo.ioFDirIndex = 0;
cipbr.hFileInfo.ioFVersNum = 0;
err = PBGetCatInfo (&cipbr, 0);
if (err != noErr)
{
errno = ENOENT;
return -1;
}
/* Mac files are readable if they can be accessed at all. */
buf->st_mode = 0444;
/* Mark unlocked files as writeable. */
if (!(fpb->ioFlAttrib & LOCKBIT))
buf->st_mode |= 0222;
if (fpb->ioFlAttrib & DIRBIT)
{
/* Mark directories as "executable". */
buf->st_mode |= 0111 | S_IFDIR;
buf->st_size = dpb->ioDrNmFls;
buf->st_rsize = 0;
}
else
{
buf->st_mode |= S_IFREG;
/* Mark apps as "executable". */
if (fpb->ioFlFndrInfo.fdType == 'APPL')
buf->st_mode |= 0111;
/* Fill in the sizes of data and resource forks. */
buf->st_size = fpb->ioFlLgLen;
buf->st_rsize = fpb->ioFlRLgLen;
}
/* Fill in various times. */
buf->st_atime = fpb->ioFlCrDat;
buf->st_mtime = fpb->ioFlMdDat;
buf->st_ctime = fpb->ioFlCrDat;
/* Set up an imitation inode number. */
buf->st_ino = (unsigned short) fpb->ioDirID;
/* Set up an imitation device. */
GetVRefNum (buf->st_ino, &buf->st_dev);
buf->st_uid = __uid;
buf->st_gid = __gid;
/* buf->st_FlFndrInfo = fpb->ioFlFndrInfo; */
return 0;
}
/* stat() sets up an empty dirid. */
int
stat (char *path, struct stat *buf)
{
long rslt, errnum;
char tmpname[256];
mpwify_filename (path, tmpname);
if (DebugPI)
fprintf (stderr, "# stat (%s, %x)", tmpname, buf);
PROGRESS (1);
rslt = _stat (tmpname, 0L, buf);
errnum = errno;
if (DebugPI)
{
fprintf (stderr, " -> %d", rslt);
if (rslt != 0)
fprintf (stderr, " (errno is %d)", errnum);
fprintf (stderr, "\n");
fflush (stderr);
}
if (rslt != 0)
errno = errnum;
return rslt;
}
int
fstat (int fd, struct stat *buf)
{
FCBPBRec fcb;
FILE *fp;
Str255 pathname;
long dirid = 0L, temp;
long rslt, errnum;
short err;
if (DebugPI < 0)
DebugPI = (*(getenv ("DEBUG_PATHNAMES")) == '1' ? 1 : 0);
if (DebugPI)
fprintf (stderr, "# fstat (%d, %x)", fd, buf);
PROGRESS (1);
pathname[0] = 0;
#ifdef FIOFNAME
/* Use an MPW-specific ioctl to get the pathname associated with
the file descriptor. */
ioctl (fd, FIOFNAME, (long *) pathname);
#else
you lose
#endif
if (DebugPI)
fprintf (stderr, " (name is %s)", pathname);
dirid = 0L /* fcb.ioFCBParID */ ;
rslt = _stat ((char *) pathname, dirid, buf);
errnum = errno;
if (DebugPI)
{
fprintf (stderr, " -> %d", rslt);
if (rslt != 0)
fprintf (stderr, " (errno is %d)", errnum);
fprintf (stderr, "\n");
fflush (stderr);
}
if (rslt != 0)
errno = errnum;
return rslt;
}
#endif /* n USE_MW_HEADERS */
chdir ()
{
errno = ENOSYS;
return (-1);
}
char *
getcwd (char *buf, int size)
{
if (buf == NULL)
buf = (char *) malloc (size);
strcpy(buf, ":");
return buf;
}
/* This should probably be more elaborate for MPW. */
char *
getpwd ()
{
return ":";
}
int
mpw_open (char *filename, int arg2, int arg3)
{
#undef open
int fd, errnum = 0;
char tmpname[256];
mpwify_filename (filename, tmpname);
fd = open (tmpname, arg2);
errnum = errno;
if (DebugPI)
{
fprintf (stderr, "# open (%s, %d, %d)", tmpname, arg2, arg3);
fprintf (stderr, " -> %d", fd);
if (fd == -1)
fprintf (stderr, " (errno is %d)", errnum);
fprintf (stderr, "\n");
}
if (fd == -1)
errno = errnum;
return fd;
}
int
mpw_access (char *filename, unsigned int cmd)
{
#undef access
int rslt, errnum = 0;
struct stat st;
char tmpname[256];
mpwify_filename (filename, tmpname);
if (cmd & R_OK || cmd & X_OK)
{
rslt = stat (tmpname, &st);
errnum = errno;
if (rslt >= 0)
{
if ((((st.st_mode & 004) == 0) && (cmd & R_OK))
|| (((st.st_mode & 002) == 0) && (cmd & W_OK))
|| (((st.st_mode & 001) == 0) && (cmd & X_OK)))
{
rslt = -1;
errnum = EACCES;
}
}
}
if (DebugPI)
{
fprintf (stderr, "# mpw_access (%s, %d)", tmpname, cmd);
fprintf (stderr, " -> %d", rslt);
if (rslt != 0)
fprintf (stderr, " (errno is %d)", errnum);
fprintf (stderr, "\n");
}
if (rslt != 0)
errno = errnum;
return rslt;
}
/* The MPW library creat() has no mode argument. */
int
mpw_creat (char *path, /* mode_t */ int mode)
{
#undef creat
#ifdef USE_MW_HEADERS
return creat (path, mode);
#else
return creat (path);
#endif
}
/* This is a hack to get control in an MPW tool before it crashes the
machine. */
mpw_special_init (name)
char *name;
{
if (strstr (name, "DEBUG"))
DebugStr("\pat beginning of program");
}
static int current_umask;
int
umask(int mask)
{
int oldmask = current_umask;
current_umask = mask;
return oldmask;
}
/* Cursor-spinning stuff that includes metering of spin rate and delays. */
/* Nonzero when cursor spinning has been set up properly. */
int cursor_inited;
/* Nonzero if spin should be measured and excessive delays reported. */
int measure_spin;
/* Nonzero if spin histogram and rate data should be written out. */
int dump_spin_data;
long warning_threshold = 400000;
long bucket_size = 1024;
long bucket_power = 10;
long numbuckets = 300;
int *delay_counts;
int overflow_count;
char *current_progress;
static UnsignedWide last_microseconds;
static char *last_spin_file = "";
static int last_spin_line;
void
warn_if_spin_delay (char *file, int line)
{
long diff, ix;
UnsignedWide now;
Microseconds(&now);
diff = now.lo - last_microseconds.lo;
if (diff > warning_threshold)
fprintf (stderr, "# %s: %ld.%06ld sec delay getting from %s:%d to %s:%d\n",
(current_progress ? current_progress : ""),
diff / 1000000, diff % 1000000,
last_spin_file, last_spin_line, file, line);
if (dump_spin_data)
{
if (diff >= 0)
{
ix = diff >> bucket_power;
if (ix >= 0 && ix < numbuckets && delay_counts != NULL)
++delay_counts[ix];
else
++overflow_count;
}
else
fprintf (stderr, "raw diff is %ld (?)\n", diff);
}
}
void
record_for_spin_delay (char *file, int line)
{
Microseconds (&last_microseconds);
last_spin_file = file;
last_spin_line = line;
}
void
mpw_start_progress (char *str, int n, char *file, int line)
{
int i;
char *measure, *threshold;
if (!cursor_inited)
{
InitCursorCtl (nil);
cursor_inited = 1;
record_for_spin_delay (file, line);
measure = getenv ("MEASURE_SPIN");
if (measure != NULL && measure[0] != '\0')
{
measure_spin = 1;
if (strcmp (measure, "all") == 0)
dump_spin_data = 1;
}
threshold = getenv ("SPIN_WARN_THRESHOLD");
if (threshold != NULL && threshold[0] != '\0')
warning_threshold = atol (threshold);
if (dump_spin_data)
{
if (delay_counts == NULL)
delay_counts = (int *) malloc (numbuckets * sizeof (int));
for (i = 0; i < numbuckets; ++i)
delay_counts[i] = 0;
overflow_count = 0;
}
}
current_progress = str;
sys_nerr = errno_max ();
mpw_special_init (str);
}
void
mpw_progress (int n)
{
SpinCursor (32);
}
void
mpw_progress_measured (int n, char *file, int line)
{
if (measure_spin)
warn_if_spin_delay (file, line);
SpinCursor (32);
if (measure_spin)
record_for_spin_delay (file, line);
}
void
mpw_end_progress (char *str, char *file, int line)
{
long i, delay, count = 0, sum = 0, avgdelay, spinrate;
long curpower = 0, curgroup = 0;
/* Warn if it's been a while since the last spin. */
if (measure_spin)
warn_if_spin_delay (file, line);
/* Dump all the nonzero delay counts and an approximation of the delay. */
if (dump_spin_data && delay_counts != NULL)
{
for (i = 0; i < numbuckets; ++i)
{
delay = (i + 1) * bucket_size;
sum += delay_counts[i] * (i + 1);
count += delay_counts[i];
if (delay <= (1 << curpower))
{
curgroup += delay_counts[i];
}
else
{
if (curgroup > 0)
fprintf (stderr,
"# %s: %d delays between %ld.%06ld and %ld.%06ld sec\n",
(str ? str : ""),
curgroup,
(1 << curpower) / 1000000,
(1 << curpower) % 1000000,
(1 << (curpower + 1)) / 1000000,
(1 << (curpower + 1)) % 1000000);
++curpower;
curgroup = 0;
}
}
if (count > 0)
{
avgdelay = (sum * bucket_size) / count;
spinrate = 1000000 / avgdelay;
fprintf (stderr, "# %s: Average spin rate is %d times/sec\n",
(str ? str : ""), spinrate);
}
}
}
#ifdef PROGRESS_TEST
/* Test program. */
main ()
{
int i, j;
double x = 1.0, y = 2.4;
long start = Microseconds (), tm; FIXME
START_PROGRESS ("hi", 0);
for (i = 0; i < 1000; ++i)
{
PROGRESS (1);
for (j = 0; j < (i * 100); ++j)
{
x += (x * y) / j;
}
}
END_PROGRESS ("hi");
tm = Microseconds () - start;
printf ("Total time is %d.%d secs\n", tm / 1000000, tm % 1000000);
}
#endif
#ifdef USE_MW_HEADERS
/* Empty definitions for Metrowerks' SIOUX console library. */
#ifndef __CONSOLE__
#include <console.h>
#endif
short
InstallConsole(short fd)
{
#pragma unused (fd)
return 0;
}
void
RemoveConsole(void)
{
}
long
WriteCharsToConsole(char *buf, long n)
{
#pragma unused (buf, n)
return 0;
}
long ReadCharsFromConsole(char *buf, long n)
{
#pragma unused (buf, n)
return 0;
}
extern char *
__ttyname(long fd)
{
static char *__devicename = "null device";
if (fd >= 0 && fd <= 2)
return (__devicename);
return NULL;
}
#endif

15
agbcc/libiberty/msdos.c Executable file
View File

@ -0,0 +1,15 @@
char msg[] = "No vfork available - aborting\n";
vfork()
{
write(1, msg, sizeof(msg));
}
sigsetmask()
{
/* no signals support in go32 (yet) */
}
waitpid()
{
return -1;
}

291
agbcc/libiberty/objalloc.c Executable file
View File

@ -0,0 +1,291 @@
/* 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, 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "ansidecl.h"
#include "objalloc.h"
/* Get a definition for NULL. */
#include <stdio.h>
#if VMS
#include <stdlib.h>
#include <unixlib.h>
#else
#ifdef ANSI_PROTOTYPES
/* Get a definition for size_t. */
#include <stddef.h>
#endif
/* For systems with larger pointers than ints, this must be declared. */
extern PTR malloc PARAMS ((size_t));
extern void free PARAMS ((PTR));
#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 ()
{
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 (o, len)
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 (o)
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 (o, 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;
}
}

586
agbcc/libiberty/obstack.c Executable file
View File

@ -0,0 +1,586 @@
/* 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: The canonical source of this file is maintained with the GNU C Library.
Bugs can be reported to bug-glibc@gnu.org.
This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
USA. */
#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
#if defined (__STDC__) && __STDC__
#define POINTER void *
#else
#define POINTER char *
#endif
/* 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'. */
#if defined (__STDC__) && __STDC__
static void print_and_abort (void);
void (*obstack_alloc_failed_handler) (void) = print_and_abort;
#else
static void print_and_abort ();
void (*obstack_alloc_failed_handler) () = print_and_abort;
#endif
/* 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 (h, size, alignment, chunkfun, freefun)
struct obstack *h;
int size;
int alignment;
#if defined (__STDC__) && __STDC__
POINTER (*chunkfun) (long);
void (*freefun) (void *);
#else
POINTER (*chunkfun) ();
void (*freefun) ();
#endif
{
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;
}
#if defined (__STDC__) && __STDC__
h->chunkfun = (struct _obstack_chunk * (*)(void *, long)) chunkfun;
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
#else
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
h->freefun = freefun;
#endif
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 (h, size, alignment, chunkfun, freefun, arg)
struct obstack *h;
int size;
int alignment;
#if defined (__STDC__) && __STDC__
POINTER (*chunkfun) (POINTER, long);
void (*freefun) (POINTER, POINTER);
#else
POINTER (*chunkfun) ();
void (*freefun) ();
#endif
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;
}
#if defined(__STDC__) && __STDC__
h->chunkfun = (struct _obstack_chunk * (*)(void *,long)) chunkfun;
h->freefun = (void (*) (void *, struct _obstack_chunk *)) freefun;
#else
h->chunkfun = (struct _obstack_chunk * (*)()) chunkfun;
h->freefun = freefun;
#endif
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 (h, length)
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. */
#if defined (__STDC__) && __STDC__
/* 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);
#endif
int
_obstack_allocated_p (h, obj)
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 (h, obj)
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 (h, obj)
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 (h)
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 _
#define _(Str) (Str)
#endif
static void
print_and_abort ()
{
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. */
#if defined (__STDC__) && __STDC__
/* These function definitions do not work with non-ANSI preprocessors;
they won't pass through the macro names in parentheses. */
/* The function names appear in parentheses in order to prevent
the macro-definitions of the names from being expanded there. */
POINTER (obstack_base) (obstack)
struct obstack *obstack;
{
return obstack_base (obstack);
}
POINTER (obstack_next_free) (obstack)
struct obstack *obstack;
{
return obstack_next_free (obstack);
}
int (obstack_object_size) (obstack)
struct obstack *obstack;
{
return obstack_object_size (obstack);
}
int (obstack_room) (obstack)
struct obstack *obstack;
{
return obstack_room (obstack);
}
int (obstack_make_room) (obstack, length)
struct obstack *obstack;
int length;
{
return obstack_make_room (obstack, length);
}
void (obstack_grow) (obstack, pointer, length)
struct obstack *obstack;
POINTER pointer;
int length;
{
obstack_grow (obstack, pointer, length);
}
void (obstack_grow0) (obstack, pointer, length)
struct obstack *obstack;
POINTER pointer;
int length;
{
obstack_grow0 (obstack, pointer, length);
}
void (obstack_1grow) (obstack, character)
struct obstack *obstack;
int character;
{
obstack_1grow (obstack, character);
}
void (obstack_blank) (obstack, length)
struct obstack *obstack;
int length;
{
obstack_blank (obstack, length);
}
void (obstack_1grow_fast) (obstack, character)
struct obstack *obstack;
int character;
{
obstack_1grow_fast (obstack, character);
}
void (obstack_blank_fast) (obstack, length)
struct obstack *obstack;
int length;
{
obstack_blank_fast (obstack, length);
}
POINTER (obstack_finish) (obstack)
struct obstack *obstack;
{
return obstack_finish (obstack);
}
POINTER (obstack_alloc) (obstack, length)
struct obstack *obstack;
int length;
{
return obstack_alloc (obstack, length);
}
POINTER (obstack_copy) (obstack, pointer, length)
struct obstack *obstack;
POINTER pointer;
int length;
{
return obstack_copy (obstack, pointer, length);
}
POINTER (obstack_copy0) (obstack, pointer, length)
struct obstack *obstack;
POINTER pointer;
int length;
{
return obstack_copy0 (obstack, pointer, length);
}
#endif /* __STDC__ */
#endif /* 0 */
#endif /* !ELIDE_CODE */

734
agbcc/libiberty/pexecute.c Executable file
View File

@ -0,0 +1,734 @@
/* Utilities to execute a program in a subprocess (possibly linked by pipes
with other subprocesses), and wait for it.
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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/* This file exports two functions: pexecute and pwait. */
/* This file lives in at least two places: libiberty and gcc.
Don't change one without the other. */
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdio.h>
#include <errno.h>
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
#define ISSPACE (x) isspace(x)
#ifdef HAVE_SYS_WAIT_H
#include <sys/wait.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
#ifdef VMS
#define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \
lib$get_current_invo_context(decc$$get_vfork_jmpbuf()) : -1)
#endif /* VMS */
#include "libiberty.h"
/* stdin file number. */
#define STDIN_FILE_NO 0
/* stdout file number. */
#define STDOUT_FILE_NO 1
/* value of `pipe': port index for reading. */
#define READ_PORT 0
/* value of `pipe': port index for writing. */
#define WRITE_PORT 1
static char *install_error_msg = "installation problem, cannot exec `%s'";
/* pexecute: execute a program.
PROGRAM and ARGV are the arguments to execv/execvp.
THIS_PNAME is name of the calling program (i.e. argv[0]).
TEMP_BASE is the path name, sans suffix, of a temporary file to use
if needed. This is currently only needed for MSDOS ports that don't use
GO32 (do any still exist?). Ports that don't need it can pass NULL.
(FLAGS & PEXECUTE_SEARCH) is non-zero if $PATH should be searched
(??? It's not clear that GCC passes this flag correctly).
(FLAGS & PEXECUTE_FIRST) is nonzero for the first process in chain.
(FLAGS & PEXECUTE_FIRST) is nonzero for the last process in chain.
FIRST_LAST could be simplified to only mark the last of a chain of processes
but that requires the caller to always mark the last one (and not give up
early if some error occurs). It's more robust to require the caller to
mark both ends of the chain.
The result is the pid on systems like Unix where we fork/exec and on systems
like WIN32 and OS2 where we use spawn. It is up to the caller to wait for
the child.
The result is the WEXITSTATUS on systems like MSDOS where we spawn and wait
for the child here.
Upon failure, ERRMSG_FMT and ERRMSG_ARG are set to the text of the error
message with an optional argument (if not needed, ERRMSG_ARG is set to
NULL), and -1 is returned. `errno' is available to the caller to use.
pwait: cover function for wait.
PID is the process id of the task to wait for.
STATUS is the `status' argument to wait.
FLAGS is currently unused (allows future enhancement without breaking
upward compatibility). Pass 0 for now.
The result is the pid of the child reaped,
or -1 for failure (errno says why).
On systems that don't support waiting for a particular child, PID is
ignored. On systems like MSDOS that don't really multitask pwait
is just a mechanism to provide a consistent interface for the caller.
pfinish: finish generation of script
pfinish is necessary for systems like MPW where a script is generated that
runs the requested programs.
*/
#ifdef __MSDOS__
/* MSDOS doesn't multitask, but for the sake of a consistent interface
the code behaves like it does. pexecute runs the program, tucks the
exit code away, and returns a "pid". pwait must be called to fetch the
exit code. */
#include <process.h>
/* For communicating information from pexecute to pwait. */
static int last_pid = 0;
static int last_status = 0;
static int last_reaped = 0;
int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
const char *program;
char * const *argv;
const char *this_pname;
const char *temp_base;
char **errmsg_fmt, **errmsg_arg;
int flags;
{
int rc;
last_pid++;
if (last_pid < 0)
last_pid = 1;
if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE)
abort ();
#ifdef __GO32__
/* ??? What are the possible return values from spawnv? */
rc = (flags & PEXECUTE_SEARCH ? spawnvp : spawnv) (1, program, argv);
#else
char *scmd, *rf;
FILE *argfile;
int i, el = flags & PEXECUTE_SEARCH ? 4 : 0;
scmd = (char *) xmalloc (strlen (program) + strlen (temp_base) + 6 + el);
rf = scmd + strlen(program) + 2 + el;
sprintf (scmd, "%s%s @%s.gp", program,
(flags & PEXECUTE_SEARCH ? ".exe" : ""), temp_base);
argfile = fopen (rf, "w");
if (argfile == 0)
{
int errno_save = errno;
free (scmd);
errno = errno_save;
*errmsg_fmt = "cannot open `%s.gp'";
*errmsg_arg = temp_base;
return -1;
}
for (i=1; argv[i]; i++)
{
char *cp;
for (cp = argv[i]; *cp; cp++)
{
if (*cp == '"' || *cp == '\'' || *cp == '\\' || ISSPACE (*cp))
fputc ('\\', argfile);
fputc (*cp, argfile);
}
fputc ('\n', argfile);
}
fclose (argfile);
rc = system (scmd);
{
int errno_save = errno;
remove (rf);
free (scmd);
errno = errno_save;
}
#endif
if (rc == -1)
{
*errmsg_fmt = install_error_msg;
*errmsg_arg = program;
return -1;
}
/* Tuck the status away for pwait, and return a "pid". */
last_status = rc << 8;
return last_pid;
}
int
pwait (pid, status, flags)
int pid;
int *status;
int flags;
{
/* On MSDOS each pexecute must be followed by it's associated pwait. */
if (pid != last_pid
/* Called twice for the same child? */
|| pid == last_reaped)
{
/* ??? ECHILD would be a better choice. Can we use it here? */
errno = EINVAL;
return -1;
}
/* ??? Here's an opportunity to canonicalize the values in STATUS.
Needed? */
*status = last_status;
last_reaped = last_pid;
return last_pid;
}
#endif /* MSDOS */
#if defined (_WIN32)
#include <process.h>
#ifdef __CYGWIN32__
#define fix_argv(argvec) (argvec)
extern int _spawnv ();
extern int _spawnvp ();
#else /* ! __CYGWIN32__ */
/* This is a kludge to get around the Microsoft C spawn functions' propensity
to remove the outermost set of double quotes from all arguments. */
const char * const *
fix_argv (argvec)
char **argvec;
{
int i;
for (i = 1; argvec[i] != 0; i++)
{
int len, j;
char *temp, *newtemp;
temp = argvec[i];
len = strlen (temp);
for (j = 0; j < len; j++)
{
if (temp[j] == '"')
{
newtemp = xmalloc (len + 2);
strncpy (newtemp, temp, j);
newtemp [j] = '\\';
strncpy (&newtemp [j+1], &temp [j], len-j);
newtemp [len+1] = 0;
temp = newtemp;
len++;
j++;
}
}
argvec[i] = temp;
}
return (const char * const *) argvec;
}
#endif /* __CYGWIN32__ */
#include <io.h>
#include <fcntl.h>
#include <signal.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
/* Win32 supports pipes */
int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
const char *program;
char * const *argv;
const char *this_pname;
const char *temp_base;
char **errmsg_fmt, **errmsg_arg;
int flags;
{
int pid;
int pdes[2], org_stdin, org_stdout;
int input_desc, output_desc;
int retries, sleep_interval;
/* Pipe waiting from last process, to be used as input for the next one.
Value is STDIN_FILE_NO if no pipe is waiting
(i.e. the next command is the first of a group). */
static int last_pipe_input;
/* If this is the first process, initialize. */
if (flags & PEXECUTE_FIRST)
last_pipe_input = STDIN_FILE_NO;
input_desc = last_pipe_input;
/* If this isn't the last process, make a pipe for its output,
and record it as waiting to be the input to the next process. */
if (! (flags & PEXECUTE_LAST))
{
if (_pipe (pdes, 256, O_BINARY) < 0)
{
*errmsg_fmt = "pipe";
*errmsg_arg = NULL;
return -1;
}
output_desc = pdes[WRITE_PORT];
last_pipe_input = pdes[READ_PORT];
}
else
{
/* Last process. */
output_desc = STDOUT_FILE_NO;
last_pipe_input = STDIN_FILE_NO;
}
if (input_desc != STDIN_FILE_NO)
{
org_stdin = dup (STDIN_FILE_NO);
dup2 (input_desc, STDIN_FILE_NO);
close (input_desc);
}
if (output_desc != STDOUT_FILE_NO)
{
org_stdout = dup (STDOUT_FILE_NO);
dup2 (output_desc, STDOUT_FILE_NO);
close (output_desc);
}
pid = (flags & PEXECUTE_SEARCH ? _spawnvp : _spawnv)
(_P_NOWAIT, program, fix_argv(argv));
if (input_desc != STDIN_FILE_NO)
{
dup2 (org_stdin, STDIN_FILE_NO);
close (org_stdin);
}
if (output_desc != STDOUT_FILE_NO)
{
dup2 (org_stdout, STDOUT_FILE_NO);
close (org_stdout);
}
if (pid == -1)
{
*errmsg_fmt = install_error_msg;
*errmsg_arg = program;
return -1;
}
return pid;
}
/* 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. */
int
pwait (pid, status, flags)
int pid;
int *status;
int flags;
{
#ifdef __CYGWIN32__
return wait (status);
#else
int termstat;
pid = _cwait (&termstat, pid, WAIT_CHILD);
/* ??? Here's an opportunity to canonicalize the values in STATUS.
Needed? */
/* cwait returns the child process exit code in termstat.
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 pid;
#endif /* __CYGWIN32__ */
}
#endif /* _WIN32 */
#ifdef OS2
/* ??? Does OS2 have process.h? */
extern int spawnv ();
extern int spawnvp ();
int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
const char *program;
char * const *argv;
const char *this_pname;
const char *temp_base;
char **errmsg_fmt, **errmsg_arg;
int flags;
{
int pid;
if ((flags & PEXECUTE_ONE) != PEXECUTE_ONE)
abort ();
/* ??? Presumably 1 == _P_NOWAIT. */
pid = (flags & PEXECUTE_SEARCH ? spawnvp : spawnv) (1, program, argv);
if (pid == -1)
{
*errmsg_fmt = install_error_msg;
*errmsg_arg = program;
return -1;
}
return pid;
}
int
pwait (pid, status, flags)
int pid;
int *status;
int flags;
{
/* ??? Here's an opportunity to canonicalize the values in STATUS.
Needed? */
int pid = wait (status);
return pid;
}
#endif /* OS2 */
#ifdef MPW
/* MPW pexecute doesn't actually run anything; instead, it writes out
script commands that, when run, will do the actual executing.
For example, in GCC's case, GCC will write out several script commands:
cpp ...
cc1 ...
as ...
ld ...
and then exit. None of the above programs will have run yet. The task
that called GCC will then execute the script and cause cpp,etc. to run.
The caller must invoke pfinish before calling exit. This adds
the finishing touches to the generated script. */
static int first_time = 1;
int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
const char *program;
char * const *argv;
const char *this_pname;
const char *temp_base;
char **errmsg_fmt, **errmsg_arg;
int flags;
{
char tmpprogram[255];
char *cp, *tmpname;
int i;
mpwify_filename (program, tmpprogram);
if (first_time)
{
printf ("Set Failed 0\n");
first_time = 0;
}
fputs ("If {Failed} == 0\n", stdout);
/* If being verbose, output a copy of the command. It should be
accurate enough and escaped enough to be "clickable". */
if (flags & PEXECUTE_VERBOSE)
{
fputs ("\tEcho ", stdout);
fputc ('\'', stdout);
fputs (tmpprogram, stdout);
fputc ('\'', stdout);
fputc (' ', stdout);
for (i=1; argv[i]; i++)
{
fputc ('\'', stdout);
/* See if we have an argument that needs fixing. */
if (strchr(argv[i], '/'))
{
tmpname = (char *) xmalloc (256);
mpwify_filename (argv[i], tmpname);
argv[i] = tmpname;
}
for (cp = argv[i]; *cp; cp++)
{
/* Write an Option-d escape char in front of special chars. */
if (strchr("'+", *cp))
fputc ('\266', stdout);
fputc (*cp, stdout);
}
fputc ('\'', stdout);
fputc (' ', stdout);
}
fputs ("\n", stdout);
}
fputs ("\t", stdout);
fputs (tmpprogram, stdout);
fputc (' ', stdout);
for (i=1; argv[i]; i++)
{
/* See if we have an argument that needs fixing. */
if (strchr(argv[i], '/'))
{
tmpname = (char *) xmalloc (256);
mpwify_filename (argv[i], tmpname);
argv[i] = tmpname;
}
if (strchr (argv[i], ' '))
fputc ('\'', stdout);
for (cp = argv[i]; *cp; cp++)
{
/* Write an Option-d escape char in front of special chars. */
if (strchr("'+", *cp))
fputc ('\266', stdout);
fputc (*cp, stdout);
}
if (strchr (argv[i], ' '))
fputc ('\'', stdout);
fputc (' ', stdout);
}
fputs ("\n", stdout);
/* Output commands that arrange to clean up and exit if a failure occurs.
We have to be careful to collect the status from the program that was
run, rather than some other script command. Also, we don't exit
immediately, since necessary cleanups are at the end of the script. */
fputs ("\tSet TmpStatus {Status}\n", stdout);
fputs ("\tIf {TmpStatus} != 0\n", stdout);
fputs ("\t\tSet Failed {TmpStatus}\n", stdout);
fputs ("\tEnd\n", stdout);
fputs ("End\n", stdout);
/* We're just composing a script, can't fail here. */
return 0;
}
int
pwait (pid, status, flags)
int pid;
int *status;
int flags;
{
*status = 0;
return 0;
}
/* Write out commands that will exit with the correct error code
if something in the script failed. */
void
pfinish ()
{
printf ("\tExit \"{Failed}\"\n");
}
#endif /* MPW */
/* include for Unix-like environments but not for Dos-like environments */
#if ! defined (__MSDOS__) && ! defined (OS2) && ! defined (MPW) \
&& ! defined (_WIN32)
extern int execv ();
extern int execvp ();
int
pexecute (program, argv, this_pname, temp_base, errmsg_fmt, errmsg_arg, flags)
const char *program;
char * const *argv;
const char *this_pname;
const char *temp_base;
char **errmsg_fmt, **errmsg_arg;
int flags;
{
int (*func)() = (flags & PEXECUTE_SEARCH ? execvp : execv);
int pid;
int pdes[2];
int input_desc, output_desc;
int retries, sleep_interval;
/* Pipe waiting from last process, to be used as input for the next one.
Value is STDIN_FILE_NO if no pipe is waiting
(i.e. the next command is the first of a group). */
static int last_pipe_input;
/* If this is the first process, initialize. */
if (flags & PEXECUTE_FIRST)
last_pipe_input = STDIN_FILE_NO;
input_desc = last_pipe_input;
/* If this isn't the last process, make a pipe for its output,
and record it as waiting to be the input to the next process. */
if (! (flags & PEXECUTE_LAST))
{
if (pipe (pdes) < 0)
{
*errmsg_fmt = "pipe";
*errmsg_arg = NULL;
return -1;
}
output_desc = pdes[WRITE_PORT];
last_pipe_input = pdes[READ_PORT];
}
else
{
/* Last process. */
output_desc = STDOUT_FILE_NO;
last_pipe_input = STDIN_FILE_NO;
}
/* Fork a subprocess; wait and retry if it fails. */
sleep_interval = 1;
for (retries = 0; retries < 4; retries++)
{
pid = vfork ();
if (pid >= 0)
break;
sleep (sleep_interval);
sleep_interval *= 2;
}
switch (pid)
{
case -1:
{
*errmsg_fmt = VFORK_STRING;
*errmsg_arg = NULL;
return -1;
}
case 0: /* child */
/* Move the input and output pipes into place, if necessary. */
if (input_desc != STDIN_FILE_NO)
{
close (STDIN_FILE_NO);
dup (input_desc);
close (input_desc);
}
if (output_desc != STDOUT_FILE_NO)
{
close (STDOUT_FILE_NO);
dup (output_desc);
close (output_desc);
}
/* Close the parent's descs that aren't wanted here. */
if (last_pipe_input != STDIN_FILE_NO)
close (last_pipe_input);
/* Exec the program. */
(*func) (program, argv);
/* Note: Calling fprintf and exit here doesn't seem right for vfork. */
fprintf (stderr, "%s: ", this_pname);
fprintf (stderr, install_error_msg, program);
fprintf (stderr, ": %s\n", xstrerror (errno));
exit (-1);
/* NOTREACHED */
return 0;
default:
/* In the parent, after forking.
Close the descriptors that we made for this child. */
if (input_desc != STDIN_FILE_NO)
close (input_desc);
if (output_desc != STDOUT_FILE_NO)
close (output_desc);
/* Return child's process number. */
return pid;
}
}
int
pwait (pid, status, flags)
int pid;
int *status;
int flags;
{
/* ??? Here's an opportunity to canonicalize the values in STATUS.
Needed? */
#ifdef VMS
pid = waitpid (-1, status, 0);
#else
pid = wait (status);
#endif
return pid;
}
#endif /* ! __MSDOS__ && ! OS2 && ! MPW && ! _WIN32 */

377
agbcc/libiberty/random.c Executable file
View File

@ -0,0 +1,377 @@
/*
* Copyright (c) 1983 Regents of the University of California.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted
* provided that the above copyright notice and this paragraph are
* duplicated in all such forms and that any documentation,
* advertising materials, and other materials related to such
* distribution and use acknowledge that the software was developed
* by the University of California, Berkeley. The name of the
* University may not be used to endorse or promote products derived
* from this software without specific prior written permission.
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*/
/*
* 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.
*/
#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 ();
/* 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 (x)
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 (seed, arg_state, n)
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 (arg_state)
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 ()
{
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;
}
}

22
agbcc/libiberty/rename.c Executable file
View File

@ -0,0 +1,22 @@
/* rename -- rename a file
This function is in the public domain. */
/* Rename a file. */
#include <errno.h>
int
rename (zfrom, zto)
char *zfrom;
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);
}

11
agbcc/libiberty/rindex.c Executable file
View File

@ -0,0 +1,11 @@
/* Stub implementation of (obsolete) rindex(). */
extern char *strrchr ();
char *
rindex (s, c)
char *s;
int c;
{
return strrchr (s, c);
}

30
agbcc/libiberty/sigsetmask.c Executable file
View File

@ -0,0 +1,30 @@
/* Version of sigsetmask.c
Written by Steve Chamberlain (sac@cygnus.com).
Contributed by Cygnus Support.
This file is in the public doamin. */
/* Set the current signal mask to the set provided, and return the
previous value */
#define _POSIX_SOURCE
#include <ansidecl.h>
/* Including <sys/types.h> seems to be needed by ISC. */
#include <sys/types.h>
#include <signal.h>
#ifdef SIG_SETMASK
int
DEFUN(sigsetmask,(set),
int set)
{
sigset_t new;
sigset_t old;
sigemptyset (&new);
if (set != 0) {
abort(); /* FIXME, we don't know how to translate old mask to new */
}
sigprocmask(SIG_SETMASK, &new, &old);
return 1; /* FIXME, we always return 1 as old value. */
}
#endif

78
agbcc/libiberty/spaces.c Executable file
View File

@ -0,0 +1,78 @@
/* 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
/*
NAME
spaces -- return a pointer to a buffer full of spaces
SYNOPSIS
char *spaces (int count)
DESCRIPTION
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.
BUGS
*/
#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 PARAMS ((size_t));
extern void free PARAMS ((PTR));
#endif
const char *
spaces (count)
int count;
{
register char *t;
static char *buf;
static int maxsize;
if (count > maxsize)
{
if (buf)
{
free (buf);
}
buf = 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);
}

337
agbcc/libiberty/splay-tree.c Executable file
View File

@ -0,0 +1,337 @@
/* A splay-tree datatype.
Copyright (C) 1998 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, 675 Mass Ave, Cambridge, MA 02139, 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 "libiberty.h"
#include "splay-tree.h"
static void splay_tree_delete_helper PARAMS((splay_tree,
splay_tree_node));
static void splay_tree_splay PARAMS((splay_tree,
splay_tree_key));
static splay_tree_node splay_tree_splay_helper
PARAMS((splay_tree,
splay_tree_key,
splay_tree_node*,
splay_tree_node*,
splay_tree_node*));
static int splay_tree_foreach_helper PARAMS((splay_tree,
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 (sp, node)
splay_tree sp;
splay_tree_node node;
{
if (!node)
return;
splay_tree_delete_helper (sp, node->left);
splay_tree_delete_helper (sp, node->right);
if (sp->delete_key)
(*sp->delete_key)(node->key);
if (sp->delete_value)
(*sp->delete_value)(node->value);
free ((char*) node);
}
/* Help splay SP around KEY. PARENT and GRANDPARENT are the parent
and grandparent, respectively, of NODE. */
static splay_tree_node
splay_tree_splay_helper (sp, key, node, parent, grandparent)
splay_tree sp;
splay_tree_key key;
splay_tree_node *node;
splay_tree_node *parent;
splay_tree_node *grandparent;
{
splay_tree_node *next;
splay_tree_node n;
int comparison;
n = *node;
if (!n)
return *parent;
comparison = (*sp->comp) (key, n->key);
if (comparison == 0)
/* We've found the target. */
next = 0;
else if (comparison < 0)
/* The target is to the left. */
next = &n->left;
else
/* The target is to the right. */
next = &n->right;
if (next)
{
/* Continue down the tree. */
n = splay_tree_splay_helper (sp, key, next, node, parent);
/* The recursive call will change the place to which NODE
points. */
if (*node != n)
return n;
}
if (!parent)
/* NODE is the root. We are done. */
return n;
/* First, handle the case where there is no grandparent (i.e.,
*PARENT is the root of the tree.) */
if (!grandparent)
{
if (n == (*parent)->left)
{
*node = n->right;
n->right = *parent;
}
else
{
*node = n->left;
n->left = *parent;
}
*parent = n;
return n;
}
/* Next handle the cases where both N and *PARENT are left children,
or where both are right children. */
if (n == (*parent)->left && *parent == (*grandparent)->left)
{
splay_tree_node p = *parent;
(*grandparent)->left = p->right;
p->right = *grandparent;
p->left = n->right;
n->right = p;
*grandparent = n;
return n;
}
else if (n == (*parent)->right && *parent == (*grandparent)->right)
{
splay_tree_node p = *parent;
(*grandparent)->right = p->left;
p->left = *grandparent;
p->right = n->left;
n->left = p;
*grandparent = n;
return n;
}
/* Finally, deal with the case where N is a left child, but *PARENT
is a right child, or vice versa. */
if (n == (*parent)->left)
{
(*parent)->left = n->right;
n->right = *parent;
(*grandparent)->right = n->left;
n->left = *grandparent;
*grandparent = n;
return n;
}
else
{
(*parent)->right = n->left;
n->left = *parent;
(*grandparent)->left = n->right;
n->right = *grandparent;
*grandparent = n;
return n;
}
}
/* Splay SP around KEY. */
static void
splay_tree_splay (sp, key)
splay_tree sp;
splay_tree_key key;
{
if (sp->root == 0)
return;
splay_tree_splay_helper (sp, key, &sp->root,
/*grandparent=*/0, /*parent=*/0);
}
/* 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 (sp, node, fn, data)
splay_tree sp;
splay_tree_node node;
splay_tree_foreach_fn fn;
void* data;
{
int val;
if (!node)
return 0;
val = splay_tree_foreach_helper (sp, node->left, fn, data);
if (val)
return val;
val = (*fn)(node, data);
if (val)
return val;
return splay_tree_foreach_helper (sp, node->right, fn, data);
}
/* 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 (compare_fn, delete_key_fn, delete_value_fn)
splay_tree_compare_fn compare_fn;
splay_tree_delete_key_fn delete_key_fn;
splay_tree_delete_value_fn delete_value_fn;
{
splay_tree sp = (splay_tree) xmalloc (sizeof (struct splay_tree));
sp->root = 0;
sp->comp = compare_fn;
sp->delete_key = delete_key_fn;
sp->delete_value = delete_value_fn;
return sp;
}
/* Deallocate SP. */
void
splay_tree_delete (sp)
splay_tree sp;
{
splay_tree_delete_helper (sp, sp->root);
free ((char*) sp);
}
/* 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. */
void
splay_tree_insert (sp, key, value)
splay_tree sp;
splay_tree_key key;
splay_tree_value value;
{
int comparison;
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) xmalloc (sizeof (struct splay_tree_node));
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;
}
}
/* Lookup KEY in SP, returning VALUE if present, and NULL
otherwise. */
splay_tree_node
splay_tree_lookup (sp, key)
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;
}
/* 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 (sp, fn, data)
splay_tree sp;
splay_tree_foreach_fn fn;
void *data;
{
return splay_tree_foreach_helper (sp, sp->root, fn, data);
}

82
agbcc/libiberty/strcasecmp.c Executable file
View File

@ -0,0 +1,82 @@
/*
* 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.
*/
#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>
#ifdef __STDC__
#include <stddef.h>
#else
#define size_t unsigned long
#endif
/*
* 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 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(s1, s2)
const char *s1, *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;
}
}
}

34
agbcc/libiberty/strchr.c Executable file
View File

@ -0,0 +1,34 @@
/* Portable version of strchr()
This function is in the public domain. */
/*
NAME
strchr -- return pointer to first occurance of a character
SYNOPSIS
char *strchr (const char *s, int c)
DESCRIPTION
Returns a pointer to the first occurance of character C in
string S, or a NULL pointer if no occurance is found.
BUGS
Behavior when character is the null character is implementation
dependent.
*/
#include <ansidecl.h>
char *
strchr (s, c)
register const char *s;
int c;
{
do {
if (*s == c)
{
return (char*)s;
}
} while (*s++);
return (0);
}

10
agbcc/libiberty/strdup.c Executable file
View File

@ -0,0 +1,10 @@
char *
strdup(s)
char *s;
{
char *result = (char*)malloc(strlen(s) + 1);
if (result == (char*)0)
return (char*)0;
strcpy(result, s);
return result;
}

831
agbcc/libiberty/strerror.c Executable file
View File

@ -0,0 +1,831 @@
/* Extended support for using errno values.
Written by Fred Fish. fnf@cygnus.com
This file is in the public domain. --Per Bothner. */
#include "ansidecl.h"
#include "libiberty.h"
#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_errlist sys_errlist__
#endif
#include <stdio.h>
#include <errno.h>
#ifdef HAVE_SYS_ERRLIST
#undef sys_errlist
#endif
/* Routines imported from standard C runtime libraries. */
#ifdef __STDC__
#include <stddef.h>
extern void *malloc (size_t size); /* 4.10.3.3 */
extern void *memset (void *s, int c, size_t n); /* 4.11.6.1 */
#else /* !__STDC__ */
extern char *malloc (); /* Standard memory allocater */
extern char *memset ();
#endif /* __STDC__ */
#ifndef MAX
# define MAX(a,b) ((a) > (b) ? (a) : (b))
#endif
static void init_error_tables PARAMS ((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
{
int value; /* The numeric value from <errno.h> */
const char *name; /* The equivalent symbolic value */
#ifndef HAVE_SYS_ERRLIST
const char *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
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 ()
{
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
}
/*
NAME
errno_max -- return the max errno value
SYNOPSIS
int errno_max ();
DESCRIPTION
Returns the maximum errno value for which a corresponding symbolic
name or message is available. Note that in the case where
we use the 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 perror(3C) explicitly warns that one
should check the size of the table (sys_nerr) before indexing it,
since new error codes may be added to the system before they are
added to the table. Thus sys_nerr might be smaller than value
implied by the largest errno value defined in <errno.h>.
We return the maximum value that can be used to obtain a meaningful
symbolic name or message.
*/
int
errno_max ()
{
int maxsize;
if (error_names == NULL)
{
init_error_tables ();
}
maxsize = MAX (sys_nerr, num_error_names);
return (maxsize - 1);
}
#ifndef HAVE_STRERROR
/*
NAME
strerror -- map an error number to an error message string
SYNOPSIS
char *strerror (int errnoval)
DESCRIPTION
Maps an errno number to an error message string, the contents of
which are implementation defined. On systems which have the external
variables sys_nerr and sys_errlist, these strings will be the same
as the ones used by perror().
If the supplied error number is within the valid range of indices
for the sys_errlist, but no message is available for the particular
error number, then returns the string "Error NUM", where NUM is the
error number.
If the supplied error number is not a valid index into sys_errlist,
returns NULL.
The returned string is only guaranteed to be valid only until the
next call to strerror.
*/
char *
strerror (errnoval)
int errnoval;
{
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 */
/*
NAME
strerrno -- map an error number to a symbolic name string
SYNOPSIS
const char *strerrno (int errnoval)
DESCRIPTION
Given an error number returned from a system call (typically
returned in errno), returns a pointer to a string containing the
symbolic name of that error number, as found in <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 "Error NUM", where NUM is
the error number.
If the supplied error number is not within the range of valid
indices, then returns NULL.
BUGS
The contents of the location pointed to are only guaranteed to be
valid until the next call to strerrno.
*/
const char *
strerrno (errnoval)
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);
}
/*
NAME
strtoerrno -- map a symbolic errno name to a numeric value
SYNOPSIS
int strtoerrno (char *name)
DESCRIPTION
Given the symbolic name of a error number, map it to an errno value.
If no translation is found, returns 0.
*/
int
strtoerrno (name)
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 ()
{
int errn;
int errnmax;
const char *name;
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

82
agbcc/libiberty/strncasecmp.c Executable file
View File

@ -0,0 +1,82 @@
/*
* 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.
*/
#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>
#ifdef __STDC__
#include <stddef.h>
#else
#define size_t unsigned long
#endif
/*
* 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 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(s1, s2, n)
const char *s1, *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;
}

34
agbcc/libiberty/strrchr.c Executable file
View File

@ -0,0 +1,34 @@
/* Portable version of strrchr().
This function is in the public domain. */
/*
NAME
strrchr -- return pointer to last occurance of a character
SYNOPSIS
char *strrchr (const char *s, int c)
DESCRIPTION
Returns a pointer to the last occurance of character C in
string S, or a NULL pointer if no occurance is found.
BUGS
Behavior when character is the null character is implementation
dependent.
*/
#include <ansidecl.h>
char *
strrchr (s, c)
register const char *s;
int c;
{
char *rtnval = 0;
do {
if (*s == c)
rtnval = (char*) s;
} while (*s++);
return (rtnval);
}

644
agbcc/libiberty/strsignal.c Executable file
View File

@ -0,0 +1,644 @@
/* Extended support for using signal values.
Written by Fred Fish. fnf@cygnus.com
This file is in the public domain. */
#include "ansidecl.h"
#include "libiberty.h"
#include "config.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). fHowever, 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
#include <stdio.h>
#include <signal.h>
/* Routines imported from standard C runtime libraries. */
#ifdef __STDC__
#include <stddef.h>
extern void *malloc (size_t size); /* 4.10.3.3 */
extern void *memset (void *s, int c, size_t n); /* 4.11.6.1 */
#else /* !__STDC__ */
extern char *malloc (); /* Standard memory allocater */
extern char *memset ();
#endif /* __STDC__ */
/* Undefine the macro we used to hide the definition of sys_siglist
found in the system header files. */
#undef sys_siglist
#ifndef NULL
# ifdef __STDC__
# define NULL (void *) 0
# else
# define NULL 0
# endif
#endif
#ifndef MAX
# define MAX(a,b) ((a) > (b) ? (a) : (b))
#endif
static void init_signal_tables PARAMS ((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
{
int value; /* The numeric value from <signal.h> */
const char *name; /* The equivalent symbolic value */
#ifndef HAVE_SYS_SIGLIST
const char *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 ()
{
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
}
/*
NAME
signo_max -- return the max signo value
SYNOPSIS
int signo_max ();
DESCRIPTION
Returns the maximum signo value for which a corresponding symbolic
name or message is available. Note that in the case where
we use the 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 psignal(3b) explicitly warns that one
should check the size of the table (NSIG) before indexing it,
since new signal codes may be added to the system before they are
added to the table. Thus NSIG might be smaller than value
implied by the largest signo value defined in <signal.h>.
We return the maximum value that can be used to obtain a meaningful
symbolic name or message.
*/
int
signo_max ()
{
int maxsize;
if (signal_names == NULL)
{
init_signal_tables ();
}
maxsize = MAX (sys_nsig, num_signal_names);
return (maxsize - 1);
}
/*
NAME
strsignal -- map a signal number to a signal message string
SYNOPSIS
const char *strsignal (int signo)
DESCRIPTION
Maps an signal number to an signal message string, the contents of
which are implementation defined. On systems which have the external
variable sys_siglist, these strings will be the same as the ones used
by psignal().
If the supplied signal number is within the valid range of indices
for the sys_siglist, but no message is available for the particular
signal number, then returns the string "Signal NUM", where NUM is the
signal number.
If the supplied signal number is not a valid index into sys_siglist,
returns NULL.
The returned string is only guaranteed to be valid only until the
next call to strsignal.
*/
#ifndef HAVE_STRSIGNAL
const char *
strsignal (signo)
int signo;
{
const 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 = (const char *) buf;
}
else
{
/* In range, and a valid message. Just return the message. */
msg = (const char *) sys_siglist[signo];
}
return (msg);
}
#endif /* ! HAVE_STRSIGNAL */
/*
NAME
strsigno -- map an signal number to a symbolic name string
SYNOPSIS
const char *strsigno (int signo)
DESCRIPTION
Given an signal number, returns a pointer to a string containing
the symbolic name of that signal number, as found in <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 "Signal NUM", where NUM is
the signal number.
If the supplied signal number is not within the range of valid
indices, then returns NULL.
BUGS
The contents of the location pointed to are only guaranteed to be
valid until the next call to strsigno.
*/
const char *
strsigno (signo)
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);
}
/*
NAME
strtosigno -- map a symbolic signal name to a numeric value
SYNOPSIS
int strtosigno (char *name)
DESCRIPTION
Given the symbolic name of a signal, map it to a signal number.
If no translation is found, returns 0.
*/
int
strtosigno (name)
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);
}
/*
NAME
psignal -- print message about signal to stderr
SYNOPSIS
void psignal (unsigned signo, char *message);
DESCRIPTION
Print to the standard error the message, followed by a colon,
followed by the description of the signal specified by signo,
followed by a newline.
*/
#ifndef HAVE_PSIGNAL
void
psignal (signo, message)
unsigned 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 ()
{
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

51
agbcc/libiberty/strstr.c Executable file
View File

@ -0,0 +1,51 @@
/* Simple implementation of strstr for systems without it.
This function is in the public domain. */
/*
NAME
strstr -- locate first occurance of a substring
SYNOPSIS
#include <string.h>
char *strstr (char *s1, char *s2)
DESCRIPTION
Locates the first occurance in the string pointed to by S1 of
the string pointed to by S2. Returns a pointer to the substring
found, or a NULL pointer if not found. If S2 points to a string
with zero length, the function returns S1.
BUGS
*/
/* FIXME: The above description is ANSI compiliant. This routine has not
been validated to comply with it. -fnf */
char *
strstr (s1, s2)
char *s1, *s2;
{
register char *p = s1;
extern char *strchr ();
extern int strncmp ();
#if __GNUC__==2
extern __SIZE_TYPE__ strlen ();
#endif
register int len = strlen (s2);
for (; (p = strchr (p, *s2)) != 0; p++)
{
if (strncmp (p, s2, len) == 0)
{
return (p);
}
}
return (0);
}

122
agbcc/libiberty/strtod.c Executable file
View File

@ -0,0 +1,122 @@
/* Implementation of strtod for systems with atof.
Copyright (C) 1991, 1995 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 <ctype.h>
extern double atof ();
/* 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 (str, ptr)
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 + 7;
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;
}

143
agbcc/libiberty/strtol.c Executable file
View File

@ -0,0 +1,143 @@
/*-
* 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. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 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.
*/
#include <limits.h>
#include <ctype.h>
#include <errno.h>
#if 0
#include <stdlib.h>
#endif
#include "ansidecl.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(nptr, endptr, base)
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);
}

110
agbcc/libiberty/strtoul.c Executable file
View File

@ -0,0 +1,110 @@
/*
* 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. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 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.
*/
#include <limits.h>
#include <ctype.h>
#include <errno.h>
#if 0
#include <stdlib.h>
#endif
#include "ansidecl.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(nptr, endptr, base)
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);
}

39
agbcc/libiberty/tmpnam.c Executable file
View File

@ -0,0 +1,39 @@
#include <stdio.h>
#ifndef L_tmpnam
#define L_tmpname 100
#endif
#ifndef P_tmpdir
#define P_tmpdir "/usr/tmp"
#endif
static char tmpnam_buffer[L_tmpnam];
static int tmpnam_counter;
extern int getpid ();
char *
tmpnam (s)
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;
}

172
agbcc/libiberty/vasprintf.c Executable file
View File

@ -0,0 +1,172 @@
/* Like vsprintf but provides a pointer to malloc'd storage, which must
be freed by the caller.
Copyright (C) 1994 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
#include <stdio.h>
#include <string.h>
#include <ansidecl.h>
#ifdef TEST
int global_total_width;
#endif
unsigned long strtoul ();
char *malloc ();
static int
int_vasprintf (result, format, args)
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;
memcpy ((PTR) &ap, (PTR) args, sizeof (va_list));
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, &p, 10);
if (*p == '.')
{
++p;
if (*p == '*')
{
++p;
total_width += abs (va_arg (ap, int));
}
else
total_width += strtoul (p, &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;
}
}
}
#ifdef TEST
global_total_width = total_width;
#endif
*result = malloc (total_width);
if (*result != NULL)
return vsprintf (*result, format, *args);
else
return 0;
}
int
vasprintf (result, format, args)
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
void
checkit
#ifdef __STDC__
(const char* format, ...)
#else
(va_alist)
va_dcl
#endif
{
va_list args;
char *result;
#ifdef __STDC__
va_start (args, format);
#else
char *format;
va_start (args);
format = va_arg (args, char *);
#endif
vasprintf (&result, format, args);
if (strlen (result) < global_total_width)
printf ("PASS: ");
else
printf ("FAIL: ");
printf ("%d %s\n", global_total_width, result);
}
int
main ()
{
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");
}
#endif /* TEST */

8
agbcc/libiberty/vfork.c Executable file
View File

@ -0,0 +1,8 @@
/* Emulate vfork using just plain fork, for systems without a real vfork.
This function is in the public domain. */
int
vfork ()
{
return (fork ());
}

21
agbcc/libiberty/vfprintf.c Executable file
View File

@ -0,0 +1,21 @@
/* 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.
*/
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
#include <stdio.h>
#undef vfprintf
int
vfprintf (stream, format, ap)
FILE * stream;
const char * format;
va_list ap;
{
return _doprnt (format, ap, stream);
}

165
agbcc/libiberty/vmsbuild.com Executable file
View File

@ -0,0 +1,165 @@
$! libiberty/vmsbuild.com -- build liberty.olb for VMS host, VMS target
$!
$ CC = "gcc /noVerbose/Debug/Incl=([],[-.include])"
$ LIBR = "library /Obj"
$ LINK = "link"
$ DELETE= "delete /noConfirm"
$ SEARCH= "search /Exact"
$ ECHO = "write sys$output"
$ ABORT = "exit %x002C"
$!
$ LIB_NAME = "liberty.olb" !this is what we're going to construct
$ WORK_LIB = "new-lib.olb" !used to guard against an incomplete build
$
$! manually copied from Makefile.in
$ REQUIRED_OFILES = "argv.o basename.o choose-temp.o concat.o cplus-dem.o "-
+ "fdmatch.o fnmatch.o getopt.o getopt1.o getruntime.o hex.o "-
+ "floatformat.o objalloc.o obstack.o spaces.o strerror.o strsignal.o "-
+ "xatexit.o xexit.o xmalloc.o xstrdup.o xstrerror.o"
$! anything not caught by link+search of dummy.* should be added here
$ EXTRA_OFILES = ""
$!
$! move to the directory which contains this command procedure
$ old_dir = f$environ("DEFAULT")
$ new_dir = f$parse("_._;",f$environ("PROCEDURE")) - "_._;"
$ set default 'new_dir'
$
$ ECHO "Starting libiberty build..."
$ create config.h
/* libiberty config.h for VMS */
#define NEED_sys_siglist
#define NEED_strsignal
#define NEED_psignal
#define NEED_basename
$ LIBR 'WORK_LIB' /Create
$
$! first pass: compile "required" modules
$ ofiles = REQUIRED_OFILES + " " + EXTRA_OFILES
$ pass = 1
$ gosub do_ofiles
$
$! second pass: process dummy.c, using the first pass' results
$ ECHO " now checking run-time library for missing functionality"
$ if f$search("dummy.obj").nes."" then DELETE dummy.obj;*
$ define/noLog sys$error _NL: !can't use /User_Mode here due to gcc
$ define/noLog sys$output _NL: ! driver's use of multiple image activation
$ on error then continue
$ 'CC' dummy.c
$ deassign sys$error !restore, more or less
$ deassign sys$output
$ if f$search("dummy.obj").eqs."" then goto pass2_failure1
$! link dummy.obj, capturing full linker feedback in dummy.map
$ oldmsg = f$environ("MESSAGE")
$ set message /Facility/Severity/Identification/Text
$ define/User sys$output _NL:
$ define/User sys$error _NL:
$ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
$ set message 'oldmsg'
$ if f$search("dummy.map").eqs."" then goto pass2_failure2
$ DELETE dummy.obj;*
$ SEARCH dummy.map "%LINK-I-UDFSYM" /Output=dummy.list
$ DELETE dummy.map;*
$ ECHO " check completed"
$! we now have a file with one entry per line of unresolvable symbols
$ ofiles = ""
$ if f$trnlnm("IFILE$").nes."" then close/noLog ifile$
$ open/Read ifile$ dummy.list
$iloop: read/End=idone ifile$ iline
$ iline = f$edit(iline,"COMPRESS,TRIM,LOWERCASE")
$ ofiles = ofiles + " " + f$element(1," ",iline) + ".o"
$ goto iloop
$idone: close ifile$
$ DELETE dummy.list;*
$ on error then ABORT
$
$! third pass: compile "missing" modules collected in pass 2
$ pass = 3
$ gosub do_ofiles
$
$! finish up
$ LIBR 'WORK_LIB' /Compress /Output='LIB_NAME' !new-lib.olb -> liberty.olb
$ DELETE 'WORK_LIB';*
$
$! all done
$ ECHO "Completed libiberty build."
$ type sys$input:
You many wish to do
$ COPY LIBERTY.OLB GNU_CC:[000000]
so that this run-time library resides in the same location as gcc's
support library. When building gas, be sure to leave the original
copy of liberty.olb here so that gas's build procedure can find it.
$ set default 'old_dir'
$ exit
$
$!
$! compile each element of the space-delimited list 'ofiles'
$!
$do_ofiles:
$ ofiles = f$edit(ofiles,"COMPRESS,TRIM")
$ i = 0
$oloop:
$ f = f$element(i," ",ofiles)
$ if f.eqs." " then goto odone
$ f = f - ".o" !strip dummy suffix
$ ECHO " ''f'"
$ skip_f = 0
$ if pass.eq.3 .and. f$search("''f'.c").eqs."" then gosub chk_deffunc
$ if .not.skip_f
$ then
$ 'CC' 'f'.c
$ LIBR 'WORK_LIB' 'f'.obj /Insert
$ DELETE 'f'.obj;*
$ endif
$ i = i + 1
$ goto oloop
$odone:
$ return
$
$!
$! check functions.def for a DEFFUNC() entry corresponding to missing file 'f'.c
$!
$chk_deffunc:
$ define/User sys$output _NL:
$ define/User sys$error _NL:
$ SEARCH functions.def "DEFFUNC","''f'" /Match=AND
$ if (($status.and.%x7FFFFFFF) .eq. 1)
$ then
$ skip_f = 1
$ open/Append config_h config.h
$ write config_h "#define NEED_''f'"
$ close config_h
$ endif
$ return
$
$!
$pass2_failure1:
$! if we reach here, dummy.c failed to compile and we're really stuck
$ type sys$input:
Cannot compile the library contents checker (dummy.c + functions.def),
so cannot continue!
$! attempt the compile again, without suppressing diagnostic messages this time
$ on error then ABORT +0*f$verify(v)
$ v = f$verify(1)
$ 'CC' dummy.c
$ ABORT +0*f$verify(v) !'f$verify(0)'
$!
$pass2_failure2:
$! should never reach here..
$ type sys$input:
Cannot link the library contents checker (dummy.obj), so cannot continue!
$! attempt the link again, without suppressing diagnostic messages this time
$ on error then ABORT +0*f$verify(v)
$ v = f$verify(1)
$ LINK/Map=dummy.map/noExe dummy.obj,'WORK_LIB'/Libr,-
gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr
$ ABORT +0*f$verify(v) !'f$verify(0)'
$
$! not reached
$ exit

15
agbcc/libiberty/vprintf.c Executable file
View File

@ -0,0 +1,15 @@
#ifdef __STDC__
#include <stdarg.h>
#else
#include <varargs.h>
#endif
#include <stdio.h>
#include <ansidecl.h>
#undef vprintf
int
vprintf (format, ap)
const char *format;
va_list ap;
{
return vfprintf (stdout, format, ap);
}

55
agbcc/libiberty/vsprintf.c Executable file
View File

@ -0,0 +1,55 @@
/* 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 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, 59 Temple Place - Suite 330, Boston, MA 02111-1307, 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 <varargs.h>
#include <stdio.h>
#include <ansidecl.h>
#undef vsprintf
int
vsprintf (buf, format, ap)
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;
}

11
agbcc/libiberty/waitpid.c Executable file
View File

@ -0,0 +1,11 @@
int
waitpid (pid, stat_loc, options)
int pid, *stat_loc, options;
{
for (;;)
{
int wpid = wait(stat_loc);
if (wpid == pid || wpid == -1)
return wpid;
}
}

82
agbcc/libiberty/xatexit.c Executable file
View File

@ -0,0 +1,82 @@
/*
* Copyright (c) 1990 Regents of the University of California.
* All rights reserved.
*
* %sccs.include.redist.c%
*/
/* Adapted from newlib/libc/stdlib/{,at}exit.[ch].
If you use xatexit, you must call xexit instead of exit. */
#include "ansidecl.h"
#include "libiberty.h"
#include <stdio.h>
#ifdef __STDC__
#include <stddef.h>
#else
#define size_t unsigned long
#endif
/* For systems with larger pointers than ints, this must be declared. */
PTR malloc PARAMS ((size_t));
static void xatexit_cleanup PARAMS ((void));
/* Pointer to function run by xexit. */
extern void (*_xexit_cleanup) PARAMS ((void));
#define XATEXIT_SIZE 32
struct xatexit {
struct xatexit *next; /* next in list */
int ind; /* next index in this table */
void (*fns[XATEXIT_SIZE]) PARAMS ((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 (fn)
void (*fn) PARAMS ((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 ()
{
register struct xatexit *p;
register int n;
for (p = xatexit_head; p; p = p->next)
for (n = p->ind; --n >= 0;)
(*p->fns[n]) ();
}

36
agbcc/libiberty/xexit.c Executable file
View File

@ -0,0 +1,36 @@
/* 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "ansidecl.h"
#include "libiberty.h"
#include <stdio.h>
/* This variable is set by xatexit if it is called. This way, xmalloc
doesn't drag xatexit into the link. */
void (*_xexit_cleanup) PARAMS ((void));
void
xexit (code)
int code;
{
if (_xexit_cleanup != NULL)
(*_xexit_cleanup) ();
exit (code);
}

169
agbcc/libiberty/xmalloc.c Executable file
View File

@ -0,0 +1,169 @@
/* 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., 59 Temple Place - Suite 330,
Boston, MA 02111-1307, USA. */
#include "ansidecl.h"
#include "libiberty.h"
#include <stdio.h>
#ifdef __STDC__
#include <stddef.h>
#else
#define size_t unsigned long
#define ptrdiff_t long
#endif
#if VMS
#include <stdlib.h>
#include <unixlib.h>
#else
/* For systems with larger pointers than ints, these must be declared. */
PTR malloc PARAMS ((size_t));
PTR realloc PARAMS ((PTR, size_t));
PTR calloc PARAMS ((size_t, size_t));
PTR sbrk PARAMS ((ptrdiff_t));
#endif
/* The program name if set. */
static const char *name = "";
#if ! defined (_WIN32) || defined (__CYGWIN32__)
/* The initial sbrk, set when the program name is set. Not used for win32
ports other than cygwin32. */
static char *first_break = NULL;
#endif
void
xmalloc_set_program_name (s)
const char *s;
{
name = s;
#if ! defined (_WIN32) || defined (__CYGWIN32__)
/* Win32 ports other than cygwin32 don't have brk() */
if (first_break == NULL)
first_break = (char *) sbrk (0);
#endif /* ! _WIN32 || __CYGWIN32 __ */
}
PTR
xmalloc (size)
size_t size;
{
PTR newmem;
if (size == 0)
size = 1;
newmem = malloc (size);
if (!newmem)
{
#if ! defined (_WIN32) || defined (__CYGWIN32__)
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%sCan not allocate %lu bytes after allocating %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) size, (unsigned long) allocated);
#else
fprintf (stderr,
"\n%s%sCan not allocate %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) size);
#endif /* ! _WIN32 || __CYGWIN32 __ */
xexit (1);
}
return (newmem);
}
PTR
xcalloc (nelem, elsize)
size_t nelem, elsize;
{
PTR newmem;
if (nelem == 0 || elsize == 0)
nelem = elsize = 1;
newmem = calloc (nelem, elsize);
if (!newmem)
{
#if ! defined (_WIN32) || defined (__CYGWIN32__)
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%sCan not allocate %lu bytes after allocating %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) (nelem * elsize), (unsigned long) allocated);
#else
fprintf (stderr,
"\n%s%sCan not allocate %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) (nelem * elsize));
#endif /* ! _WIN32 || __CYGWIN32 __ */
xexit (1);
}
return (newmem);
}
PTR
xrealloc (oldmem, size)
PTR oldmem;
size_t size;
{
PTR newmem;
if (size == 0)
size = 1;
if (!oldmem)
newmem = malloc (size);
else
newmem = realloc (oldmem, size);
if (!newmem)
{
#ifndef __MINGW32__
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%sCan not reallocate %lu bytes after allocating %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) size, (unsigned long) allocated);
#else
fprintf (stderr,
"\n%s%sCan not reallocate %lu bytes\n",
name, *name ? ": " : "",
(unsigned long) size);
#endif /* __MINGW32__ */
xexit (1);
}
return (newmem);
}

17
agbcc/libiberty/xstrdup.c Executable file
View File

@ -0,0 +1,17 @@
/* xstrdup.c -- Duplicate a string in memory, using xmalloc.
This trivial function is in the public domain.
Ian Lance Taylor, Cygnus Support, December 1995. */
#include "ansidecl.h"
#include "libiberty.h"
char *
xstrdup (s)
const char *s;
{
char *ret;
ret = xmalloc (strlen (s) + 1);
strcpy (ret, s);
return ret;
}

56
agbcc/libiberty/xstrerror.c Executable file
View File

@ -0,0 +1,56 @@
/* 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. */
#include <stdio.h>
#include "libiberty.h"
#include "config.h"
#ifdef VMS
#include <errno.h>
#if !defined (__STRICT_ANSI__) && !defined (__HIDE_FORBIDDEN_NAMES)
extern char *strerror PARAMS ((int,...));
#define DONT_DECLARE_STRERROR
#endif
#endif /* VMS */
#ifndef DONT_DECLARE_STRERROR
extern char *strerror PARAMS ((int));
#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 (errnum)
int errnum;
{
char *errstr;
#ifdef VMS
char *(*vmslib_strerror) PARAMS ((int,...));
/* Override any possibly-conflicting declaration from system header. */
vmslib_strerror = (char *(*) PARAMS ((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;
}