mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-24 12:25:35 +08:00
Update.
1998-03-25 Ulrich Drepper <drepper@cygnus.com> * glibcbug.in: Create files safely when mktemp is not available. * sysdeps/unix/sysv/linux/adjtime.c: Make weak alias appear again. Patch by a sun <asun@saul1.u.washington.edu>. 1998-03-25 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> * libc.map: Rename getname to getnetname. 1998-03-25 13:35 Ulrich Drepper <drepper@cygnus.com> * manual/maint.texi: Use supported platform in examples. * manual/install.texi: Document some installation tips. 1998-03-25 10:56 Ulrich Drepper <drepper@cygnus.com> * posix/wordexp.c: Fix some memory leaks and makes $* more efficient. Fix a bug so that it returns an error if a numeric parameter is unset and WRDE_UNDEF is set. Patch by Andreas Schwab and Tim Waugh. * posix/wordexp-test.c: Add new new test. 1998-03-25 Ulrich Drepper <drepper@cygnus.com> * posix/regex.c (regex_compile): Last patch wasn't entirely correct. Patch by Alain Magloire <alainm@rcsm.ece.mcgill.ca>. 1998-03-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * manual/filesys.texi (Scanning Directory Content): Fix typo. 1998-03-25 09:24 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE> * sysdeps/i386/bits/string.h: Fix all assembler statements so that clobbered registers don't appear as operands.
This commit is contained in:
parent
0669867278
commit
68b5060455
39
ChangeLog
39
ChangeLog
@ -1,3 +1,42 @@
|
||||
1998-03-25 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* glibcbug.in: Create files safely when mktemp is not available.
|
||||
|
||||
* sysdeps/unix/sysv/linux/adjtime.c: Make weak alias appear again.
|
||||
Patch by a sun <asun@saul1.u.washington.edu>.
|
||||
|
||||
1998-03-25 Thorsten Kukuk <kukuk@vt.uni-paderborn.de>
|
||||
|
||||
* libc.map: Rename getname to getnetname.
|
||||
|
||||
1998-03-25 13:35 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* manual/maint.texi: Use supported platform in examples.
|
||||
|
||||
* manual/install.texi: Document some installation tips.
|
||||
|
||||
1998-03-25 10:56 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* posix/wordexp.c: Fix some memory leaks and makes $* more efficient.
|
||||
Fix a bug so that it returns an error if a numeric parameter is
|
||||
unset and WRDE_UNDEF is set.
|
||||
Patch by Andreas Schwab and Tim Waugh.
|
||||
* posix/wordexp-test.c: Add new new test.
|
||||
|
||||
1998-03-25 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* posix/regex.c (regex_compile): Last patch wasn't entirely
|
||||
correct. Patch by Alain Magloire <alainm@rcsm.ece.mcgill.ca>.
|
||||
|
||||
1998-03-24 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de>
|
||||
|
||||
* manual/filesys.texi (Scanning Directory Content): Fix typo.
|
||||
|
||||
1998-03-25 09:24 Bernd Schmidt <crux@Pool.Informatik.RWTH-Aachen.DE>
|
||||
|
||||
* sysdeps/i386/bits/string.h: Fix all assembler statements so that
|
||||
clobbered registers don't appear as operands.
|
||||
|
||||
1998-03-24 Ulrich Drepper <drepper@cygnus.com>
|
||||
|
||||
* posix/regex.c: Undefine ISASCII and ISPRINT before defining for
|
||||
|
794
INSTALL
794
INSTALL
@ -1,313 +1,6 @@
|
||||
Library Maintenance
|
||||
*******************
|
||||
|
||||
How to Install the GNU C Library
|
||||
================================
|
||||
|
||||
Installation of the GNU C library is relatively simple, but usually
|
||||
requires several GNU tools to be installed already.
|
||||
|
||||
To configure the GNU C library for your system, run the shell script
|
||||
`configure' with `sh'. Use an argument which is the conventional GNU
|
||||
name for your system configuration--for example, `sparc-sun-sunos4.1',
|
||||
for a Sun 4 running SunOS 4.1. *Note Installation:
|
||||
(gcc.info)Installation, for a full description of standard GNU
|
||||
configuration names. If you omit the configuration name, `configure'
|
||||
will try to guess one for you by inspecting the system it is running
|
||||
on. It may or may not be able to come up with a guess, and the its
|
||||
guess might be wrong. `configure' will tell you the canonical name of
|
||||
the chosen configuration before proceeding.
|
||||
|
||||
Here are some options that you should specify (if appropriate) when
|
||||
you run `configure':
|
||||
|
||||
`--with-binutils=DIRECTORY'
|
||||
Use the binutils (assembler and linker) in `DIRECTORY', not the
|
||||
ones the C compiler would default to. You could use this option if
|
||||
the default binutils on your system cannot deal with all the
|
||||
constructs in the GNU C library. (`configure' will detect the
|
||||
problem and suppress these constructs, so the library will still
|
||||
be usable, but functionality may be lost--for example, you can not
|
||||
build a shared libc with old binutils.)
|
||||
|
||||
`--without-fp'
|
||||
`--nfp'
|
||||
Use this option if your computer lacks hardware floating-point
|
||||
support and your operating system does not emulate an FPU.
|
||||
|
||||
`--prefix=DIRECTORY'
|
||||
Install machine-independent data files in subdirectories of
|
||||
`DIRECTORY'. (You can also set this in `configparms'; see below.)
|
||||
The default is to install in `/usr/local'.
|
||||
|
||||
`--exec-prefix=DIRECTORY'
|
||||
Install the library and other machine-dependent files in
|
||||
subdirectories of `DIRECTORY'. (You can also set this in
|
||||
`configparms'; see below.) The default is to use <prefix>/bin and
|
||||
<prefix>/sbin.
|
||||
|
||||
`--enable-shared'
|
||||
`--disable-shared'
|
||||
Enable or disable building of an ELF shared library on systems that
|
||||
support it. The default is to build the shared library on systems
|
||||
using ELF when the GNU `binutils' are available.
|
||||
|
||||
`--enable-profile'
|
||||
`--disable-profile'
|
||||
Enable or disable building of the profiled C library, `-lc_p'. The
|
||||
default is to build the profiled library. You may wish to disable
|
||||
it if you don't plan to do profiling, because it doubles the build
|
||||
time of compiling just the unprofiled static library.
|
||||
|
||||
`--enable-omitfp'
|
||||
Enable building a highly-optimized but possibly undebuggable
|
||||
static C library. This causes the normal static and shared (if
|
||||
enabled) C libraries to be compiled with maximal optimization,
|
||||
including the `-fomit-frame-pointer' switch that makes debugging
|
||||
impossible on many machines, and without debugging information
|
||||
(which makes the binaries substantially smaller). An additional
|
||||
static library is compiled with no optimization and full debugging
|
||||
information, and installed as `-lc_g'.
|
||||
|
||||
The simplest way to run `configure' is to do it in the directory
|
||||
that contains the library sources. This prepares to build the library
|
||||
in that very directory.
|
||||
|
||||
You can prepare to build the library in some other directory by going
|
||||
to that other directory to run `configure'. In order to run configure,
|
||||
you will have to specify a directory for it, like this:
|
||||
|
||||
mkdir sun4
|
||||
cd sun4
|
||||
../configure sparc-sun-sunos4.1
|
||||
|
||||
`configure' looks for the sources in whatever directory you specified
|
||||
for finding `configure' itself. It does not matter where in the file
|
||||
system the source and build directories are--as long as you specify the
|
||||
source directory when you run `configure', you will get the proper
|
||||
results.
|
||||
|
||||
This feature lets you keep sources and binaries in different
|
||||
directories, and that makes it easy to build the library for several
|
||||
different machines from the same set of sources. Simply create a build
|
||||
directory for each target machine, and run `configure' in that
|
||||
directory specifying the target machine's configuration name.
|
||||
|
||||
The library has a number of special-purpose configuration parameters.
|
||||
These are defined in the file `Makeconfig'; see the comments in that
|
||||
file for the details.
|
||||
|
||||
But don't edit the file `Makeconfig' yourself--instead, create a
|
||||
file `configparms' in the directory where you are building the library,
|
||||
and define in that file the parameters you want to specify.
|
||||
`configparms' should *not* be an edited copy of `Makeconfig'; specify
|
||||
only the parameters that you want to override. To see how to set these
|
||||
parameters, find the section of `Makeconfig' that says "These are the
|
||||
configuration variables." Then for each parameter that you want to
|
||||
change, copy the definition from `Makeconfig' to your new `configparms'
|
||||
file, and change the value as appropriate for your system.
|
||||
|
||||
It is easy to configure the GNU C library for cross-compilation by
|
||||
setting a few variables in `configparms'. Set `CC' to the
|
||||
cross-compiler for the target you configured the library for; it is
|
||||
important to use this same `CC' value when running `configure', like
|
||||
this: `CC=TARGET-gcc configure TARGET'. Set `BUILD_CC' to the compiler
|
||||
to use for for programs run on the build system as part of compiling
|
||||
the library. You may need to set `AR' and `RANLIB' to cross-compiling
|
||||
versions of `ar' and `ranlib' if the native tools are not configured to
|
||||
work with object files for the target you configured for.
|
||||
|
||||
Some of the machine-dependent code for some machines uses extensions
|
||||
in the GNU C compiler, so you may need to compile the library with GCC.
|
||||
(In fact, all of the existing complete ports require GCC.)
|
||||
|
||||
To build the library and related programs, type `make'. This will
|
||||
produce a lot of output, some of which may look like errors from `make'
|
||||
(but isn't). Look for error messages from `make' containing `***'.
|
||||
Those indicate that something is really wrong.
|
||||
|
||||
To build and run some test programs which exercise some of the
|
||||
library facilities, type `make check'. This will produce several files
|
||||
with names like `PROGRAM.out'.
|
||||
|
||||
To format the `GNU C Library Reference Manual' for printing, type
|
||||
`make dvi'. You need a working TeX installation to do this.
|
||||
|
||||
To install the library and its header files, and the Info files of
|
||||
the manual, type `make install'. This will build things if necessary,
|
||||
before installing them. If you want to install the files in a different
|
||||
place than the one specified at configuration time you can specify a
|
||||
value for the Makefile variable `install_root' on the command line.
|
||||
This is useful to create chroot'ed environment or to prepare binary
|
||||
releases.
|
||||
|
||||
Recommended Tools to Install the GNU C Library
|
||||
----------------------------------------------
|
||||
|
||||
We recommend installing the following GNU tools before attempting to
|
||||
build the GNU C library:
|
||||
|
||||
* `make' 3.76.1
|
||||
|
||||
You need the latest version of GNU `make'. Modifying the GNU C
|
||||
Library to work with other `make' programs would be so hard that we
|
||||
recommend you port GNU `make' instead. *Really.* We recommend
|
||||
version GNU `make' version 3.75, 3.76.1 or later. Version 3.76 is
|
||||
known to have a bug which only shows up in big projects like GNU
|
||||
`libc'.
|
||||
|
||||
* GCC 2.7.2.3
|
||||
|
||||
On most platforms, the GNU C library can only be compiled with the
|
||||
GNU C compiler. We recommend GCC version 2.7.2 or later; earlier
|
||||
versions may have problems.
|
||||
|
||||
On PowerPC, GCC versions dated earlier than 970904 are known not
|
||||
to work (they crash), including 2.7.2.
|
||||
|
||||
* `binutils' 2.8.1
|
||||
|
||||
Using the GNU `binutils' (assembler, linker, and related tools) is
|
||||
preferable when possible, and they are required to build an ELF
|
||||
shared C library. We recommend `binutils' version 2.8.1 or later;
|
||||
earlier versions are known to have problems or to not support all
|
||||
architectures.
|
||||
|
||||
* `texinfo' 3.11
|
||||
|
||||
To correctly translate and install the Texinfo documentation you
|
||||
need this version of the `texinfo' package. Former versions did
|
||||
not understand all the tags used in the document and also the
|
||||
installation mechanisms for the info files was not present or
|
||||
worked differently.
|
||||
|
||||
On some Debian Linux based systems the used `install-info' program
|
||||
works differently. Here you have to run make like this:
|
||||
|
||||
make INSTALL_INFO=/path/to/GNU/install-info install
|
||||
|
||||
If you change any configuration file you will need also
|
||||
|
||||
* `autoconf' 2.12
|
||||
|
||||
and if you change any of the message translation files you will also
|
||||
need
|
||||
|
||||
* `GNU gettext' 0.10 or later
|
||||
|
||||
If you upgrade your source tree using the patches made available you
|
||||
probably will need those package above in any case.
|
||||
|
||||
Supported Configurations
|
||||
------------------------
|
||||
|
||||
The GNU C Library currently supports configurations that match the
|
||||
following patterns:
|
||||
|
||||
alpha-ANYTHING-linux
|
||||
iX86-ANYTHING-gnu
|
||||
iX86-ANYTHING-linux
|
||||
m68k-ANYTHING-linux
|
||||
powerpc-ANYTHING-linux
|
||||
sparc64-ANYTHING-linux
|
||||
|
||||
Former releases of this library (version 1.09.1 and perhaps earlier
|
||||
versions) used to run on the following configurations:
|
||||
|
||||
alpha-dec-osf1
|
||||
alpha-ANYTHING-linuxecoff
|
||||
iX86-ANYTHING-bsd4.3
|
||||
iX86-ANYTHING-isc2.2
|
||||
iX86-ANYTHING-isc3.N
|
||||
iX86-ANYTHING-sco3.2
|
||||
iX86-ANYTHING-sco3.2v4
|
||||
iX86-ANYTHING-sysv
|
||||
iX86-ANYTHING-sysv4
|
||||
iX86-force_cpu386-none
|
||||
iX86-sequent-bsd
|
||||
i960-nindy960-none
|
||||
m68k-hp-bsd4.3
|
||||
m68k-mvme135-none
|
||||
m68k-mvme136-none
|
||||
m68k-sony-newsos3
|
||||
m68k-sony-newsos4
|
||||
m68k-sun-sunos4.N
|
||||
mips-dec-ultrix4.N
|
||||
mips-sgi-irix4.N
|
||||
sparc-sun-solaris2.N
|
||||
sparc-sun-sunos4.N
|
||||
|
||||
Since no one has volunteered to test and fix the above
|
||||
configurations, these are not supported at the moment. It's expected
|
||||
that these don't work anymore. Porting the library is not hard. If
|
||||
you are interested in doing a port, please contact the glibc
|
||||
maintainers by sending electronic mail to <bug-glibc@prep.ai.mit.edu>.
|
||||
|
||||
Each case of `iX86' can be `i386', `i486', `i586', or `i686'. All
|
||||
of those configurations produce a library that can run on any of these
|
||||
processors. The library will be optimized for the specified processor,
|
||||
but will not use instructions not available on all of them.
|
||||
|
||||
While no other configurations are supported, there are handy aliases
|
||||
for these few. (These aliases work in other GNU software as well.)
|
||||
|
||||
decstation
|
||||
hp320-bsd4.3 hp300bsd
|
||||
i486-gnu
|
||||
i586-linux
|
||||
i386-sco
|
||||
i386-sco3.2v4
|
||||
i386-sequent-dynix
|
||||
i386-svr4
|
||||
news
|
||||
sun3-sunos4.N sun3
|
||||
sun4-solaris2.N sun4-sunos5.N
|
||||
sun4-sunos4.N sun4
|
||||
|
||||
Reporting Bugs
|
||||
==============
|
||||
|
||||
There are probably bugs in the GNU C library. There are certainly
|
||||
errors and omissions in this manual. If you report them, they will get
|
||||
fixed. If you don't, no one will ever know about them and they will
|
||||
remain unfixed for all eternity, if not longer.
|
||||
|
||||
To report a bug, first you must find it. Hopefully, this will be the
|
||||
hard part. Once you've found a bug, make sure it's really a bug. A
|
||||
good way to do this is to see if the GNU C library behaves the same way
|
||||
some other C library does. If so, probably you are wrong and the
|
||||
libraries are right (but not necessarily). If not, one of the libraries
|
||||
is probably wrong.
|
||||
|
||||
Once you're sure you've found a bug, try to narrow it down to the
|
||||
smallest test case that reproduces the problem. In the case of a C
|
||||
library, you really only need to narrow it down to one library function
|
||||
call, if possible. This should not be too difficult.
|
||||
|
||||
The final step when you have a simple test case is to report the bug.
|
||||
When reporting a bug, send your test case, the results you got, the
|
||||
results you expected, what you think the problem might be (if you've
|
||||
thought of anything), your system type, and the version of the GNU C
|
||||
library which you are using. Also include the files `config.status'
|
||||
and `config.make' which are created by running `configure'; they will
|
||||
be in whatever directory was current when you ran `configure'.
|
||||
|
||||
If you think you have found some way in which the GNU C library does
|
||||
not conform to the ISO and POSIX standards (*note Standards and
|
||||
Portability::.), that is definitely a bug. Report it!
|
||||
|
||||
Send bug reports to the Internet address <bug-glibc@prep.ai.mit.edu>
|
||||
or the UUCP path <mit-eddie!prep.ai.mit.edu!bug-glibc>. If you have
|
||||
other problems with installation or use, please report those as well.
|
||||
|
||||
If you are not sure how a function should behave, and this manual
|
||||
doesn't tell you, that's a bug in the manual. Report that too! If the
|
||||
function's behavior disagrees with the manual, then either the library
|
||||
or the manual has a bug, so report the disagreement. If you find any
|
||||
errors or omissions in this manual, please report them to the Internet
|
||||
address <bug-glibc-manual@prep.ai.mit.edu> or the UUCP path
|
||||
<mit-eddie!prep.ai.mit.edu!bug-glibc-manual>.
|
||||
|
||||
Adding New Functions
|
||||
====================
|
||||
|
||||
@ -463,8 +156,8 @@ function is used.
|
||||
Some rare functions are only useful on specific systems and aren't
|
||||
defined at all on others; these do not appear anywhere in the
|
||||
system-independent source code or makefiles (including the `generic'
|
||||
and `stub' directories), only in the system-dependent `Makefile' in the
|
||||
specific system's subdirectory.
|
||||
directory), only in the system-dependent `Makefile' in the specific
|
||||
system's subdirectory.
|
||||
|
||||
If you come across a file that is in one of the main source
|
||||
directories (`string', `stdio', etc.), and you want to write a machine-
|
||||
@ -560,73 +253,56 @@ manufacturer's name, and the operating system. `configure' uses these
|
||||
to pick the list of system-dependent directories to look for. If the
|
||||
`--nfp' option is *not* passed to `configure', the directory
|
||||
`MACHINE/fpu' is also used. The operating system often has a "base
|
||||
operating system"; for example, if the operating system is `sunos4.1',
|
||||
the base operating system is `unix/bsd'. The algorithm used to pick
|
||||
the list of directories is simple: `configure' makes a list of the base
|
||||
operating system"; for example, if the operating system is `Linux', the
|
||||
base operating system is `unix/sysv'. The algorithm used to pick the
|
||||
list of directories is simple: `configure' makes a list of the base
|
||||
operating system, manufacturer, CPU type, and operating system, in that
|
||||
order. It then concatenates all these together with slashes in
|
||||
between, to produce a directory name; for example, the configuration
|
||||
`sparc-sun-sunos4.1' results in `unix/bsd/sun/sparc/sunos4.1'.
|
||||
`configure' then tries removing each element of the list in turn, so
|
||||
`unix/bsd/sparc' and `sun/sparc' are also tried, among others. Since
|
||||
`i686-linux-gnu' results in `unix/sysv/linux/i386/i686'. `configure'
|
||||
then tries removing each element of the list in turn, so
|
||||
`unix/sysv/linux' and `unix/sysv' are also tried, among others. Since
|
||||
the precise version number of the operating system is often not
|
||||
important, and it would be very inconvenient, for example, to have
|
||||
identical `sunos4.1.1' and `sunos4.1.2' directories, `configure' tries
|
||||
identical `irix6.2' and `irix6.3' directories, `configure' tries
|
||||
successively less specific operating system names by removing trailing
|
||||
suffixes starting with a period.
|
||||
|
||||
As an example, here is the complete list of directories that would be
|
||||
tried for the configuration `sparc-sun-sunos4.1' (without the `--nfp'
|
||||
option):
|
||||
tried for the configuration `i686-linux-gnu' (with the `crypt' and
|
||||
`linuxthreads' add-on):
|
||||
|
||||
sparc/fpu
|
||||
unix/bsd/sun/sunos4.1/sparc
|
||||
unix/bsd/sun/sunos4.1
|
||||
unix/bsd/sun/sunos4/sparc
|
||||
unix/bsd/sun/sunos4
|
||||
unix/bsd/sun/sunos/sparc
|
||||
unix/bsd/sun/sunos
|
||||
unix/bsd/sun/sparc
|
||||
unix/bsd/sun
|
||||
unix/bsd/sunos4.1/sparc
|
||||
unix/bsd/sunos4.1
|
||||
unix/bsd/sunos4/sparc
|
||||
unix/bsd/sunos4
|
||||
unix/bsd/sunos/sparc
|
||||
unix/bsd/sunos
|
||||
unix/bsd/sparc
|
||||
unix/bsd
|
||||
unix/sun/sunos4.1/sparc
|
||||
unix/sun/sunos4.1
|
||||
unix/sun/sunos4/sparc
|
||||
unix/sun/sunos4
|
||||
unix/sun/sunos/sparc
|
||||
unix/sun/sunos
|
||||
unix/sun/sparc
|
||||
unix/sun
|
||||
unix/sunos4.1/sparc
|
||||
unix/sunos4.1
|
||||
unix/sunos4/sparc
|
||||
unix/sunos4
|
||||
unix/sunos/sparc
|
||||
unix/sunos
|
||||
unix/sparc
|
||||
unix
|
||||
sun/sunos4.1/sparc
|
||||
sun/sunos4.1
|
||||
sun/sunos4/sparc
|
||||
sun/sunos4
|
||||
sun/sunos/sparc
|
||||
sun/sunos
|
||||
sun/sparc
|
||||
sun
|
||||
sunos4.1/sparc
|
||||
sunos4.1
|
||||
sunos4/sparc
|
||||
sunos4
|
||||
sunos/sparc
|
||||
sunos
|
||||
sparc
|
||||
sysdeps/i386/elf
|
||||
crypt/sysdeps/unix
|
||||
linuxthreads/sysdeps/unix/sysv/linux
|
||||
linuxthreads/sysdeps/pthread
|
||||
linuxthreads/sysdeps/unix/sysv
|
||||
linuxthreads/sysdeps/unix
|
||||
linuxthreads/sysdeps/i386/i686
|
||||
linuxthreads/sysdeps/i386
|
||||
linuxthreads/sysdeps/pthread/no-cmpxchg
|
||||
sysdeps/unix/sysv/linux/i386
|
||||
sysdeps/unix/sysv/linux
|
||||
sysdeps/gnu
|
||||
sysdeps/unix/common
|
||||
sysdeps/unix/mman
|
||||
sysdeps/unix/inet
|
||||
sysdeps/unix/sysv/i386/i686
|
||||
sysdeps/unix/sysv/i386
|
||||
sysdeps/unix/sysv
|
||||
sysdeps/unix/i386
|
||||
sysdeps/unix
|
||||
sysdeps/posix
|
||||
sysdeps/i386/i686
|
||||
sysdeps/i386/i486
|
||||
sysdeps/libm-i387/i686
|
||||
sysdeps/i386/fpu
|
||||
sysdeps/libm-i387
|
||||
sysdeps/i386
|
||||
sysdeps/wordsize-32
|
||||
sysdeps/ieee754
|
||||
sysdeps/libm-ieee754
|
||||
sysdeps/generic
|
||||
|
||||
Different machine architectures are conventionally subdirectories at
|
||||
the top level of the `sysdeps' directory tree. For example,
|
||||
@ -651,6 +327,15 @@ hierarchy that are not for particular machine architectures.
|
||||
this directory is referred to in the `Implies' file in a machine
|
||||
architecture-specific directory, such as `m68k/Implies'.
|
||||
|
||||
`libm-ieee754'
|
||||
This directory contains an implementation of a mathematical library
|
||||
usable on platforms which use IEEE 754 conformant floating-point
|
||||
arithmetic.
|
||||
|
||||
`libm-i387'
|
||||
This is a special case. Ideally the code should be in
|
||||
`sysdeps/i386/fpu' but for various reasons it is kept aside.
|
||||
|
||||
`posix'
|
||||
This directory contains implementations of things in the library in
|
||||
terms of POSIX.1 functions. This includes some of the POSIX.1
|
||||
@ -670,8 +355,8 @@ hierarchy that are not for particular machine architectures.
|
||||
|
||||
`unix/inet'
|
||||
This directory is for `socket' and related functions on Unix
|
||||
systems. The `inet' top-level subdirectory is enabled by
|
||||
`unix/inet/Subdirs'. `unix/common' implies `unix/inet'.
|
||||
systems. `unix/inet/Subdirs' enables the `inet' top-level
|
||||
subdirectory. `unix/common' implies `unix/inet'.
|
||||
|
||||
`mach'
|
||||
This is the directory for things based on the Mach microkernel
|
||||
@ -695,10 +380,11 @@ subdirectories (and subdirectory trees) for various Unix variants.
|
||||
|
||||
The functions which are system calls in most Unix systems are
|
||||
implemented in assembly code, which is generated automatically from
|
||||
specifications in the file `sysdeps/unix/syscalls.list'. Some special
|
||||
system calls are implemented in files that are named with a suffix of
|
||||
`.S'; for example, `_exit.S'. Files ending in `.S' are run through the
|
||||
C preprocessor before being fed to the assembler.
|
||||
specifications in files named `syscalls.list'. There are several such
|
||||
files, one in `sysdeps/unix' and others in its subdirectories. Some
|
||||
special system calls are implemented in files that are named with a
|
||||
suffix of `.S'; for example, `_exit.S'. Files ending in `.S' are run
|
||||
through the C preprocessor before being fed to the assembler.
|
||||
|
||||
These files all use a set of macros that should be defined in
|
||||
`sysdep.h'. The `sysdep.h' file in `sysdeps/unix' partially defines
|
||||
@ -707,368 +393,12 @@ for the particular machine and operating system variant. See
|
||||
`sysdeps/unix/sysdep.h' and the machine-specific `sysdep.h'
|
||||
implementations to see what these macros are and what they should do.
|
||||
|
||||
The system-specific makefile for the `unix' directory (that is, the
|
||||
file `sysdeps/unix/Makefile') gives rules to generate several files
|
||||
from the Unix system you are building the library on (which is assumed
|
||||
to be the target system you are building the library *for*). All the
|
||||
The system-specific makefile for the `unix' directory
|
||||
(`sysdeps/unix/Makefile') gives rules to generate several files from
|
||||
the Unix system you are building the library on (which is assumed to be
|
||||
the target system you are building the library *for*). All the
|
||||
generated files are put in the directory where the object files are
|
||||
kept; they should not affect the source tree itself. The files
|
||||
generated are `ioctls.h', `errnos.h', `sys/param.h', and `errlist.c'
|
||||
(for the `stdio' section of the library).
|
||||
|
||||
Contributors to the GNU C Library
|
||||
=================================
|
||||
|
||||
The GNU C library was written originally by Roland McGrath. Some
|
||||
parts of the library were contributed or worked on by other people.
|
||||
|
||||
* The `getopt' function and related code were written by Richard
|
||||
Stallman, David J. MacKenzie, and Roland McGrath.
|
||||
|
||||
* The merge sort function `qsort' was written by Michael J. Haertel.
|
||||
|
||||
* The quick sort function used as a fallback by `qsort' was written
|
||||
by Douglas C. Schmidt.
|
||||
|
||||
* The memory allocation functions `malloc', `realloc' and `free' and
|
||||
related code were written by Michael J. Haertel.
|
||||
|
||||
* Fast implementations of many of the string functions (`memcpy',
|
||||
`strlen', etc.) were written by Torbj"orn Granlund.
|
||||
|
||||
* The `tar.h' header file was written by David J. MacKenzie.
|
||||
|
||||
* The port to the MIPS DECStation running Ultrix 4
|
||||
(`mips-dec-ultrix4') was contributed by Brendan Kehoe and Ian
|
||||
Lance Taylor.
|
||||
|
||||
* The DES encryption function `crypt' and related functions were
|
||||
contributed by Michael Glad.
|
||||
|
||||
* The `ftw' and `nftw' function was contributed by Ulrich Drepper.
|
||||
|
||||
* The startup code to support SunOS shared libraries was contributed
|
||||
by Tom Quinn.
|
||||
|
||||
* The `mktime' function was contributed by Paul Eggert.
|
||||
|
||||
* The port to the Sequent Symmetry running Dynix version 3
|
||||
(`i386-sequent-bsd') was contributed by Jason Merrill.
|
||||
|
||||
* The timezone support code is derived from the public-domain
|
||||
timezone package by Arthur David Olson and his many contributors.
|
||||
|
||||
* The port to the DEC Alpha running OSF/1 (`alpha-dec-osf1') was
|
||||
contributed by Brendan Kehoe, using some code written by Roland
|
||||
McGrath.
|
||||
|
||||
* The port to SGI machines running Irix 4 (`mips-sgi-irix4') was
|
||||
contributed by Tom Quinn.
|
||||
|
||||
* The port of the Mach and Hurd code to the MIPS architecture
|
||||
(`mips-ANYTHING-gnu') was contributed by Kazumoto Kojima.
|
||||
|
||||
* The floating-point printing function used by `printf' and friends
|
||||
and the floating-point reading function used by `scanf', `strtod'
|
||||
and friends were written by Ulrich Drepper. The multi-precision
|
||||
integer functions used in those functions are taken from GNU MP,
|
||||
which was contributed by Torbj"orn Granlund.
|
||||
|
||||
* The internationalization support in the library, and the support
|
||||
programs `locale' and `localedef', were written by Ulrich Drepper.
|
||||
Ulrich Drepper adapted the support code for message catalogs
|
||||
(`libintl.h', etc.) from the GNU `gettext' package, which he also
|
||||
wrote. He also contributed the `catgets' support and the entire
|
||||
suite of multi-byte and wide-character support functions
|
||||
(`wctype.h', `wchar.h', etc.).
|
||||
|
||||
* The implementations of the `nsswitch.conf' mechanism and the files
|
||||
and DNS backends for it were designed and written by Ulrich
|
||||
Drepper and Roland McGrath, based on a backend interface defined
|
||||
by Peter Eriksson.
|
||||
|
||||
* The port to Linux i386/ELF (`i386-ANYTHING-linux') was contributed
|
||||
by Ulrich Drepper, based in large part on work done in Hongjiu
|
||||
Lu's Linux version of the GNU C Library.
|
||||
|
||||
* The port to Linux/m68k (`m68k-ANYTHING-linux') was contributed by
|
||||
Andreas Schwab.
|
||||
|
||||
* The ports to Linux/ARM (`arm-ANYTHING-linuxaout') and ARM
|
||||
standalone (`arm-ANYTHING-none'), as well as parts of the IPv6
|
||||
support code, were contributed by Philip Blundell.
|
||||
|
||||
* Richard Henderson contributed the ELF dynamic linking code and
|
||||
other support for the Alpha processor.
|
||||
|
||||
* David Mosberger-Tang contributed the port to Linux/Alpha
|
||||
(`alpha-ANYTHING-linux').
|
||||
|
||||
* The port to Linux on PowerPC (`powerpc-ANYTHING-linux') was
|
||||
contributed by Geoffrey Keating.
|
||||
|
||||
* Miles Bader wrote the argp argument-parsing package, and the
|
||||
argz/envz interfaces.
|
||||
|
||||
* Stephen R. van den Berg contributed a highly-optimized `strstr'
|
||||
function.
|
||||
|
||||
* Ulrich Drepper contributed the `hsearch' and `drand48' families of
|
||||
functions; reentrant `...`_r'' versions of the `random' family;
|
||||
System V shared memory and IPC support code; and several
|
||||
highly-optimized string functions for iX86 processors.
|
||||
|
||||
* The math functions are taken from `fdlibm-5.1' by Sun
|
||||
Microsystems, as modified by J.T. Conklin, Ian Lance Taylor,
|
||||
Ulrich Drepper, Andreas Schwab, and Roland McGrath.
|
||||
|
||||
* The `libio' library used to implement `stdio' functions on some
|
||||
platforms was written by Per Bothner and modified by Ulrich
|
||||
Drepper.
|
||||
|
||||
* The Internet-related code (most of the `inet' subdirectory) and
|
||||
several other miscellaneous functions and header files have been
|
||||
included from 4.4 BSD with little or no modification.
|
||||
|
||||
All code incorporated from 4.4 BSD is under the following
|
||||
copyright:
|
||||
|
||||
Copyright (C) 1991 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.
|
||||
|
||||
* The random number generation functions `random', `srandom',
|
||||
`setstate' and `initstate', which are also the basis for the
|
||||
`rand' and `srand' functions, were written by Earl T. Cohen for
|
||||
the University of California at Berkeley and are copyrighted by the
|
||||
Regents of the University of California. They have undergone minor
|
||||
changes to fit into the GNU C library and to fit the ISO C
|
||||
standard, but the functional code is Berkeley's.
|
||||
|
||||
* The Internet resolver code is taken directly from BIND 4.9.5,
|
||||
which is under both the Berkeley copyright above and also:
|
||||
|
||||
Portions Copyright (C) 1993 by Digital Equipment Corporation.
|
||||
|
||||
Permission to use, copy, modify, and distribute this software
|
||||
for any purpose with or without fee is hereby granted,
|
||||
provided that the above copyright notice and this permission
|
||||
notice appear in all copies, and that the name of Digital
|
||||
Equipment Corporation not be used in advertising or publicity
|
||||
pertaining to distribution of the document or software
|
||||
without specific, written prior permission.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP.
|
||||
DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
|
||||
INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT CORPORATION BE
|
||||
LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
|
||||
DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
|
||||
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
|
||||
OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION
|
||||
WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
|
||||
* The code to support Sun RPC is taken verbatim from Sun's
|
||||
RPCSRC-4.0 distribution, and is covered by this copyright:
|
||||
|
||||
Copyright (C) 1984, Sun Microsystems, Inc.
|
||||
|
||||
Sun RPC is a product of Sun Microsystems, Inc. and is
|
||||
provided for unrestricted use provided that this legend is
|
||||
included on all tape media and as a part of the software
|
||||
program in whole or part. Users may copy or modify Sun RPC
|
||||
without charge, but are not authorized to license or
|
||||
distribute it to anyone else except as part of a product or
|
||||
program developed by the user.
|
||||
|
||||
SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND
|
||||
INCLUDING THE WARRANTIES OF DESIGN, MERCHANTIBILITY AND
|
||||
FITNESS FOR A PARTICULAR PURPOSE, OR ARISING FROM A COURSE OF
|
||||
DEALING, USAGE OR TRADE PRACTICE.
|
||||
|
||||
Sun RPC is provided with no support and without any
|
||||
obligation on the part of Sun Microsystems, Inc. to assist in
|
||||
its use, correction, modification or enhancement.
|
||||
|
||||
SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT
|
||||
TO THE INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY
|
||||
PATENTS BY SUN RPC OR ANY PART THEREOF.
|
||||
|
||||
In no event will Sun Microsystems, Inc. be liable for any
|
||||
lost revenue or profits or other special, indirect and
|
||||
consequential damages, even if Sun has been advised of the
|
||||
possibility of such damages.
|
||||
|
||||
Sun Microsystems, Inc.
|
||||
2550 Garcia Avenue
|
||||
Mountain View, California 94043
|
||||
|
||||
* Some of the support code for Mach is taken from Mach 3.0 by CMU,
|
||||
and is under the following copyright terms:
|
||||
|
||||
Mach Operating System
|
||||
Copyright (C) 1991,1990,1989 Carnegie Mellon University
|
||||
All Rights Reserved.
|
||||
|
||||
Permission to use, copy, modify and distribute this software
|
||||
and its documentation is hereby granted, provided that both
|
||||
the copyright notice and this permission notice appear in all
|
||||
copies of the software, derivative works or modified
|
||||
versions, and any portions thereof, and that both notices
|
||||
appear in supporting documentation.
|
||||
|
||||
CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS
|
||||
IS" CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF
|
||||
ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF
|
||||
THIS SOFTWARE.
|
||||
|
||||
Carnegie Mellon requests users of this software to return to
|
||||
|
||||
Software Distribution Coordinator
|
||||
School of Computer Science
|
||||
Carnegie Mellon University
|
||||
Pittsburgh PA 15213-3890
|
||||
|
||||
or <Software.Distribution@CS.CMU.EDU> any improvements or
|
||||
extensions that they make and grant Carnegie Mellon the
|
||||
rights to redistribute these changes.
|
||||
|
||||
* The code for the database library `libdb' comes from the 2.3
|
||||
release of Berkeley DB. That code is under the same copyright as
|
||||
4.4 BSD and also:
|
||||
|
||||
Copyright (C) 1990, 1993, 1994, 1995, 1996, 1997
|
||||
Sleepycat Software. 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. Redistributions in any form must be accompanied by
|
||||
information on how to obtain complete source code for
|
||||
the DB software and any accompanying software that uses
|
||||
the DB software. The source code must either be
|
||||
included in the distribution or be available for no more
|
||||
than the cost of distribution plus a nominal fee, and
|
||||
must be freely redistributable under reasonable
|
||||
conditions. For an executable file, complete source
|
||||
code means the source code for all modules it contains.
|
||||
It does not mean source code for modules or files that
|
||||
typically accompany the operating system on which the
|
||||
executable file runs, e.g., standard library modules or
|
||||
system header files.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY SLEEPYCAT SOFTWARE "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
|
||||
SLEEPYCAT SOFTWARE 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.
|
||||
|
||||
Portions copyright (C) 1995, 1996
|
||||
The President and Fellows of Harvard University.
|
||||
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
|
||||
Harvard University 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 HARVARD AND ITS 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 HARVARD OR ITS 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.
|
||||
|
||||
For a license to use, redistribute or sell DB software under
|
||||
conditions other than those described above, or to purchase
|
||||
support for this software, please contact Sleepycat Software
|
||||
at
|
||||
|
||||
Sleepycat Software
|
||||
394 E. Riding Dr.
|
||||
Carlisle, MA 01741
|
||||
USA
|
||||
+1-508-287-4781
|
||||
|
||||
or <db@sleepycat.com>.
|
||||
|
||||
|
||||
|
2
configure
vendored
2
configure
vendored
@ -1685,7 +1685,7 @@ fi
|
||||
echo $ac_n "checking compiler version""... $ac_c" 1>&6
|
||||
echo "configure:1687: checking compiler version" >&5
|
||||
case `${CC-cc} -v 2>&1` in
|
||||
*egcs-2.91.* | *egcs-1.0.[2-9]* | *egcs-1.1* | *2.8.[1-9]* | *2.9.[0-9] )
|
||||
*egcs-2.91.* | *egcs-1.0.[2-9]* | *egcs-1.1* | *2.8.[1-9]* | *2.9.[0-9]*)
|
||||
cc_is_recent="ok"
|
||||
;;
|
||||
*)
|
||||
|
@ -24,15 +24,17 @@ STDIO="@stdio@"
|
||||
PATH=/bin:/usr/bin:/usr/local/bin:$PATH
|
||||
export PATH
|
||||
|
||||
TEMP=`mktemp -q /tmp/glibcbugXXXXXX`
|
||||
TEMP=`mktemp -q /tmp/glibcbugXXXXXX 2>/dev/null`
|
||||
if test $? -ne 0; then
|
||||
TEMP=/tmp/glibcbug.$$
|
||||
echo > $TEMP
|
||||
chmod 600 $TEMP
|
||||
fi
|
||||
TEMPx=`mktemp -q /tmp/glibcbugXXXXXX`
|
||||
TEMPx=`mktemp -q /tmp/glibcbugXXXXXX 2>/dev/null`
|
||||
if test $? -ne 0; then
|
||||
TEMPx=/tmp/glibcbug.$$.x
|
||||
echo > $TEMPx
|
||||
chmod 600 $TEMPx
|
||||
fi
|
||||
|
||||
BUGADDR=${1-$BUGGLIBC}
|
||||
|
4
libc.map
4
libc.map
@ -498,8 +498,8 @@ GLIBC_2.1 {
|
||||
fopen; fclose; fdopen;
|
||||
|
||||
# g*
|
||||
gai_strerror; getcontext; getdate; getdate_r; getitimer; getname;
|
||||
getnameinfo; getpt; getrlimit64; getrusage; gettimeofday;
|
||||
gai_strerror; getcontext; getdate; getdate_r; getitimer; getnameinfo;
|
||||
getnetname; getpt; getrlimit64; getrusage; gettimeofday;
|
||||
getutxent; getutxid; getutxline; grantpt;
|
||||
|
||||
# New special glibc functions.
|
||||
|
@ -541,7 +541,7 @@ uses the @code{strverscmp} function internally.
|
||||
|
||||
It is important not to mix the use of @code{scandir} and the 64 bits
|
||||
comparison functions or vice versa. There are systems on which this
|
||||
work but on others it will fail miserably.
|
||||
works but on others it will fail miserably.
|
||||
|
||||
@node Simple Directory Lister Mark II
|
||||
@subsection Simple Program to List a Directory, Mark II
|
||||
|
@ -8,6 +8,7 @@
|
||||
@menu
|
||||
* Tools for Installation:: We recommend using these tools to build.
|
||||
* Supported Configurations:: What systems the GNU C library runs on.
|
||||
* Tips for Installation:: Useful hints for the installation.
|
||||
* Reporting Bugs:: How to report bugs (if you want to
|
||||
get them fixed) and other troubles
|
||||
you may have with the GNU C library.
|
||||
@ -325,6 +326,39 @@ sun4-solaris2.@var{n} sun4-sunos5.@var{n}
|
||||
sun4-sunos4.@var{n} sun4
|
||||
@end smallexample
|
||||
|
||||
@node Tips for Installation
|
||||
@appendixsec Useful hints for the installation
|
||||
|
||||
There are a some more or less obvious methods one should know when
|
||||
compiling GNU libc:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Better never compile in the source directory. Create a new directory
|
||||
and run the @file{configure} from there. Everything should happen
|
||||
automagically.
|
||||
|
||||
@item
|
||||
You can use the @code{-j} option of GNU make by changing the line
|
||||
specifying @code{PARALLELMAKE} in the Makefile generated during the
|
||||
configuration.
|
||||
|
||||
It is not useful to start the @code{make} process using the @code{-j}
|
||||
option since this option is not propagated down to the sub-@code{make}s.
|
||||
|
||||
@item
|
||||
If you made some changes after a complete build and only want to check
|
||||
these changes run @code{make} while specifying the list of subdirs it
|
||||
has to visit.
|
||||
|
||||
@smallexample
|
||||
make subdirs="nss elf"
|
||||
@end smallexample
|
||||
|
||||
The above build run will only visit the subdirectories @file{nss} and
|
||||
@file{elf}. Beside this it updates the @file{libc} files itself.
|
||||
@end itemize
|
||||
|
||||
@node Reporting Bugs
|
||||
@appendixsec Reporting Bugs
|
||||
@cindex reporting bugs
|
||||
|
@ -296,74 +296,57 @@ these to pick the list of system-dependent directories to look for. If
|
||||
the @samp{--nfp} option is @emph{not} passed to @file{configure}, the
|
||||
directory @file{@var{machine}/fpu} is also used. The operating system
|
||||
often has a @dfn{base operating system}; for example, if the operating
|
||||
system is @samp{sunos4.1}, the base operating system is @samp{unix/bsd}.
|
||||
system is @samp{Linux}, the base operating system is @samp{unix/sysv}.
|
||||
The algorithm used to pick the list of directories is simple:
|
||||
@file{configure} makes a list of the base operating system,
|
||||
manufacturer, CPU type, and operating system, in that order. It then
|
||||
concatenates all these together with slashes in between, to produce a
|
||||
directory name; for example, the configuration @w{@samp{sparc-sun-sunos4.1}}
|
||||
results in @file{unix/bsd/sun/sparc/sunos4.1}. @file{configure} then
|
||||
directory name; for example, the configuration @w{@samp{i686-linux-gnu}}
|
||||
results in @file{unix/sysv/linux/i386/i686}. @file{configure} then
|
||||
tries removing each element of the list in turn, so
|
||||
@file{unix/bsd/sparc} and @file{sun/sparc} are also tried, among others.
|
||||
@file{unix/sysv/linux} and @file{unix/sysv} are also tried, among others.
|
||||
Since the precise version number of the operating system is often not
|
||||
important, and it would be very inconvenient, for example, to have
|
||||
identical @file{sunos4.1.1} and @file{sunos4.1.2} directories,
|
||||
identical @file{irix6.2} and @file{irix6.3} directories,
|
||||
@file{configure} tries successively less specific operating system names
|
||||
by removing trailing suffixes starting with a period.
|
||||
|
||||
As an example, here is the complete list of directories that would be
|
||||
tried for the configuration @w{@samp{sparc-sun-sunos4.1}} (without the
|
||||
@w{@samp{--nfp}} option):
|
||||
tried for the configuration @w{@samp{i686-linux-gnu}} (with the
|
||||
@file{crypt} and @file{linuxthreads} add-on):
|
||||
|
||||
@smallexample
|
||||
sparc/fpu
|
||||
unix/bsd/sun/sunos4.1/sparc
|
||||
unix/bsd/sun/sunos4.1
|
||||
unix/bsd/sun/sunos4/sparc
|
||||
unix/bsd/sun/sunos4
|
||||
unix/bsd/sun/sunos/sparc
|
||||
unix/bsd/sun/sunos
|
||||
unix/bsd/sun/sparc
|
||||
unix/bsd/sun
|
||||
unix/bsd/sunos4.1/sparc
|
||||
unix/bsd/sunos4.1
|
||||
unix/bsd/sunos4/sparc
|
||||
unix/bsd/sunos4
|
||||
unix/bsd/sunos/sparc
|
||||
unix/bsd/sunos
|
||||
unix/bsd/sparc
|
||||
unix/bsd
|
||||
unix/sun/sunos4.1/sparc
|
||||
unix/sun/sunos4.1
|
||||
unix/sun/sunos4/sparc
|
||||
unix/sun/sunos4
|
||||
unix/sun/sunos/sparc
|
||||
unix/sun/sunos
|
||||
unix/sun/sparc
|
||||
unix/sun
|
||||
unix/sunos4.1/sparc
|
||||
unix/sunos4.1
|
||||
unix/sunos4/sparc
|
||||
unix/sunos4
|
||||
unix/sunos/sparc
|
||||
unix/sunos
|
||||
unix/sparc
|
||||
unix
|
||||
sun/sunos4.1/sparc
|
||||
sun/sunos4.1
|
||||
sun/sunos4/sparc
|
||||
sun/sunos4
|
||||
sun/sunos/sparc
|
||||
sun/sunos
|
||||
sun/sparc
|
||||
sun
|
||||
sunos4.1/sparc
|
||||
sunos4.1
|
||||
sunos4/sparc
|
||||
sunos4
|
||||
sunos/sparc
|
||||
sunos
|
||||
sparc
|
||||
sysdeps/i386/elf
|
||||
crypt/sysdeps/unix
|
||||
linuxthreads/sysdeps/unix/sysv/linux
|
||||
linuxthreads/sysdeps/pthread
|
||||
linuxthreads/sysdeps/unix/sysv
|
||||
linuxthreads/sysdeps/unix
|
||||
linuxthreads/sysdeps/i386/i686
|
||||
linuxthreads/sysdeps/i386
|
||||
linuxthreads/sysdeps/pthread/no-cmpxchg
|
||||
sysdeps/unix/sysv/linux/i386
|
||||
sysdeps/unix/sysv/linux
|
||||
sysdeps/gnu
|
||||
sysdeps/unix/common
|
||||
sysdeps/unix/mman
|
||||
sysdeps/unix/inet
|
||||
sysdeps/unix/sysv/i386/i686
|
||||
sysdeps/unix/sysv/i386
|
||||
sysdeps/unix/sysv
|
||||
sysdeps/unix/i386
|
||||
sysdeps/unix
|
||||
sysdeps/posix
|
||||
sysdeps/i386/i686
|
||||
sysdeps/i386/i486
|
||||
sysdeps/libm-i387/i686
|
||||
sysdeps/i386/fpu
|
||||
sysdeps/libm-i387
|
||||
sysdeps/i386
|
||||
sysdeps/wordsize-32
|
||||
sysdeps/ieee754
|
||||
sysdeps/libm-ieee754
|
||||
sysdeps/generic
|
||||
@end smallexample
|
||||
|
||||
Different machine architectures are conventionally subdirectories at the
|
||||
@ -391,6 +374,15 @@ where the C type @code{float} is IEEE 754 single-precision format, and
|
||||
directory is referred to in the @file{Implies} file in a machine
|
||||
architecture-specific directory, such as @file{m68k/Implies}.
|
||||
|
||||
@item libm-ieee754
|
||||
This directory contains an implementation of a mathematical library
|
||||
usable on platforms which use @w{IEEE 754} conformant floating-point
|
||||
arithmetic.
|
||||
|
||||
@item libm-i387
|
||||
This is a special case. Ideally the code should be in
|
||||
@file{sysdeps/i386/fpu} but for various reasons it is kept aside.
|
||||
|
||||
@item posix
|
||||
This directory contains implementations of things in the library in
|
||||
terms of @sc{POSIX.1} functions. This includes some of the @sc{POSIX.1}
|
||||
@ -466,6 +458,9 @@ generated are @file{ioctls.h}, @file{errnos.h}, @file{sys/param.h}, and
|
||||
|
||||
@c ??? This section is really short now. Want to keep it? --roland
|
||||
|
||||
@c It's not anymore true. glibc 2.1 cannot be used with K&R compilers.
|
||||
@c --drepper
|
||||
|
||||
Although the GNU C library implements the @w{ISO C} library facilities, you
|
||||
@emph{can} use the GNU C library with traditional, ``pre-ISO'' C
|
||||
compilers. However, you need to be careful because the content and
|
||||
|
@ -2171,14 +2171,14 @@ regex_compile (pattern, size, syntax, bufp)
|
||||
for (;;)
|
||||
{
|
||||
PATFETCH (c);
|
||||
if (c == ':' || c == ']' || !isalpha (c) || p == pend
|
||||
if ((c == ':' && *p == ']') || p == pend
|
||||
|| c1 == CHAR_CLASS_MAX_LENGTH)
|
||||
break;
|
||||
str[c1++] = c;
|
||||
}
|
||||
str[c1] = '\0';
|
||||
|
||||
/* If isn't a word bracketed by `[:' and:`]':
|
||||
/* If isn't a word bracketed by `[:' and `:]':
|
||||
undo the ending character, the letters, and leave
|
||||
the leading `:' and `[' (but set bits for them). */
|
||||
if (c == ':' && *p == ']')
|
||||
|
@ -138,6 +138,7 @@ struct test_case_struct
|
||||
{ WRDE_BADCHAR, NULL, "close-brace}", 0, 0, { NULL, } },
|
||||
{ WRDE_CMDSUB, NULL, "$(ls)", WRDE_NOCMD, 0, { NULL, } },
|
||||
{ WRDE_BADVAL, NULL, "$var", WRDE_UNDEF, 0, { NULL, } },
|
||||
{ WRDE_BADVAL, NULL, "$9", WRDE_UNDEF, 0, { NULL, } },
|
||||
{ WRDE_SYNTAX, NULL, "$[50+20))", 0, 0, { NULL, } },
|
||||
{ WRDE_SYNTAX, NULL, "${%%noparam}", 0, 0, { NULL, } },
|
||||
{ WRDE_SYNTAX, NULL, "${missing-brace", 0, 0, { NULL, } },
|
||||
|
@ -1147,7 +1147,7 @@ parse_param (char **word, size_t *word_length, size_t *max_length,
|
||||
switch (words[*offset])
|
||||
{
|
||||
case '}':
|
||||
/* Evalute. */
|
||||
/* Evaluate. */
|
||||
goto envsubst;
|
||||
|
||||
case '#':
|
||||
@ -1295,36 +1295,23 @@ envsubst:
|
||||
/* Is it `$*' or `$@' (unquoted) ? */
|
||||
else if (*env == '*' || (*env == '@' && !quoted))
|
||||
{
|
||||
size_t plist_len = 1;
|
||||
size_t plist_len = 0;
|
||||
int p;
|
||||
char *end;
|
||||
|
||||
/* Build up value parameter by parameter (copy them) */
|
||||
for (p = 1; __libc_argv[p]; ++p)
|
||||
plist_len += strlen (__libc_argv[p]) + 1; /* for space */
|
||||
value = malloc (plist_len);
|
||||
if (value == NULL)
|
||||
goto no_space;
|
||||
end = value;
|
||||
*end = 0;
|
||||
for (p = 1; __libc_argv[p]; ++p)
|
||||
{
|
||||
char *old_pointer = value;
|
||||
size_t argv_len = strlen (__libc_argv[p]);
|
||||
size_t old_plist_len = plist_len;
|
||||
|
||||
if (value)
|
||||
value[plist_len - 1] = 0;
|
||||
|
||||
plist_len += 1 + argv_len;
|
||||
|
||||
/* First realloc will act as malloc because value is
|
||||
* initialised to NULL. */
|
||||
value = realloc (value, plist_len); /* ### re-work this */
|
||||
if (value == NULL)
|
||||
{
|
||||
free (old_pointer);
|
||||
return WRDE_NOSPACE;
|
||||
}
|
||||
|
||||
memcpy (&value[old_plist_len - 1], __libc_argv[p], argv_len + 1);
|
||||
if (__libc_argv[p + 1])
|
||||
{
|
||||
value[plist_len - 1] = '\0';
|
||||
value[plist_len - 2] = ' ';
|
||||
}
|
||||
if (p > 1)
|
||||
*end++ = ' ';
|
||||
end = __stpcpy (end, __libc_argv[p]);
|
||||
}
|
||||
|
||||
free_value = 1;
|
||||
@ -1336,11 +1323,7 @@ envsubst:
|
||||
|
||||
/* Each parameter is a separate word ("$@") */
|
||||
if (__libc_argc == 2)
|
||||
{
|
||||
value = __strdup (__libc_argv[1]);
|
||||
if (value == NULL)
|
||||
goto no_space;
|
||||
}
|
||||
value = __libc_argv[1];
|
||||
else if (__libc_argc > 2)
|
||||
{
|
||||
int p;
|
||||
@ -1361,8 +1344,6 @@ envsubst:
|
||||
/* Start a new word with the last parameter. */
|
||||
*word = w_newword (word_length, max_length);
|
||||
value = __strdup (__libc_argv[p]);
|
||||
if (value == NULL)
|
||||
goto no_space;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1373,11 +1354,16 @@ envsubst:
|
||||
}
|
||||
}
|
||||
else
|
||||
value = getenv (env);
|
||||
|
||||
if (value == NULL && (flags & WRDE_UNDEF))
|
||||
{
|
||||
value = getenv (env);
|
||||
if (value == NULL && (flags & WRDE_UNDEF))
|
||||
/* Variable not defined. */
|
||||
return WRDE_BADVAL;
|
||||
/* Variable not defined. */
|
||||
if (pattern)
|
||||
free (pattern);
|
||||
if (env)
|
||||
free (env);
|
||||
return WRDE_BADVAL;
|
||||
}
|
||||
|
||||
if (action != ACT_NONE)
|
||||
@ -1408,7 +1394,19 @@ envsubst:
|
||||
if (fnmatch (pattern, value, 0) != FNM_NOMATCH)
|
||||
{
|
||||
*p = c;
|
||||
value = p;
|
||||
if (free_value)
|
||||
{
|
||||
char *newval = __strdup (p);
|
||||
if (newval == NULL)
|
||||
{
|
||||
free (value);
|
||||
goto no_space;
|
||||
}
|
||||
free (value);
|
||||
value = newval;
|
||||
}
|
||||
else
|
||||
value = p;
|
||||
break;
|
||||
}
|
||||
*p = c;
|
||||
@ -1424,7 +1422,19 @@ envsubst:
|
||||
if (fnmatch (pattern, value, 0) != FNM_NOMATCH)
|
||||
{
|
||||
*p = c;
|
||||
value = p;
|
||||
if (free_value)
|
||||
{
|
||||
char *newval = __strdup (p);
|
||||
if (newval == NULL)
|
||||
{
|
||||
free (value);
|
||||
goto no_space;
|
||||
}
|
||||
free (value);
|
||||
value = newval;
|
||||
}
|
||||
else
|
||||
value = p;
|
||||
break;
|
||||
}
|
||||
*p = c;
|
||||
@ -1519,6 +1529,8 @@ envsubst:
|
||||
|
||||
free (env);
|
||||
free (pattern);
|
||||
if (free_value)
|
||||
free (value);
|
||||
return error;
|
||||
|
||||
case ACT_NULL_SUBST:
|
||||
@ -1531,6 +1543,8 @@ envsubst:
|
||||
/* Substitute NULL */
|
||||
free (env);
|
||||
free (pattern);
|
||||
if (free_value)
|
||||
free (value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1540,6 +1554,9 @@ envsubst:
|
||||
wordexp_t we;
|
||||
int i;
|
||||
|
||||
if (free_value)
|
||||
free (value);
|
||||
|
||||
if (quoted)
|
||||
{
|
||||
/* No field-splitting is allowed, so imagine
|
||||
@ -1622,6 +1639,8 @@ envsubst:
|
||||
/* Substitute NULL */
|
||||
free (env);
|
||||
free (pattern);
|
||||
if (free_value)
|
||||
free (value);
|
||||
return 0;
|
||||
|
||||
case ACT_NULL_ASSIGN:
|
||||
@ -1634,6 +1653,8 @@ envsubst:
|
||||
/* Substitute NULL */
|
||||
free (env);
|
||||
free (pattern);
|
||||
if (free_value)
|
||||
free (value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -48,6 +48,7 @@
|
||||
__STRING_INLINE void *
|
||||
__memcpy_c (void *__dest, __const void *__src, size_t __n)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2;
|
||||
switch (__n)
|
||||
{
|
||||
case 0:
|
||||
@ -108,9 +109,9 @@ __memcpy_c (void *__dest, __const void *__src, size_t __n)
|
||||
("cld\n\t" \
|
||||
"rep; movsl" \
|
||||
x \
|
||||
: /* no outputs */ \
|
||||
: "c" (__n / 4), "D" (__dest), "S" (__src) \
|
||||
: "cx", "di", "si", "memory");
|
||||
: "=&c" (__d0), "=&D" (__d1), "=&S" (__d2) \
|
||||
: "0" (__n / 4), "1" (__dest), "2" (__src) \
|
||||
: "memory");
|
||||
|
||||
switch (__n % 4)
|
||||
{
|
||||
@ -137,24 +138,25 @@ __memcpy_c (void *__dest, __const void *__src, size_t __n)
|
||||
__STRING_INLINE void *
|
||||
memmove (void *__dest, __const void *__src, size_t __n)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2;
|
||||
if (__dest < __src)
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
"rep\n\t"
|
||||
"movsb"
|
||||
: /* no output */
|
||||
: "c" (__n), "S" (__src),"D" (__dest)
|
||||
: "cx", "si", "di");
|
||||
: "=&c" (__d0), "=&S" (__d1), "=&D" (__d2)
|
||||
: "0" (__n), "1" (__src), "2" (__dest)
|
||||
: "memory");
|
||||
else
|
||||
__asm__ __volatile__
|
||||
("std\n\t"
|
||||
"rep\n\t"
|
||||
"movsb\n\t"
|
||||
"cld"
|
||||
: /* no output */
|
||||
: "c" (__n), "S" (__n - 1 + (const char *) __src),
|
||||
"D" (__n - 1 + (char *) __dest)
|
||||
: "cx", "si", "di", "memory");
|
||||
: "=&c" (__d0), "=&S" (__d1), "=&D" (__d2)
|
||||
: "0" (__n), "1" (__n - 1 + (const char *) __src),
|
||||
"2" (__n - 1 + (char *) __dest)
|
||||
: "memory");
|
||||
return __dest;
|
||||
}
|
||||
|
||||
@ -171,6 +173,7 @@ memmove (void *__dest, __const void *__src, size_t __n)
|
||||
__STRING_INLINE void *
|
||||
__memset_cc (void *__s, unsigned long int __pattern, size_t __n)
|
||||
{
|
||||
unsigned long int __d0, __d1;
|
||||
switch (__n)
|
||||
{
|
||||
case 0:
|
||||
@ -194,9 +197,9 @@ __memset_cc (void *__s, unsigned long int __pattern, size_t __n)
|
||||
("cld\n\t" \
|
||||
"rep; stosl" \
|
||||
x \
|
||||
: /* no outputs */ \
|
||||
: "a" (__pattern),"c" (__n / 4), "D" (__s) \
|
||||
: "cx", "di", "memory")
|
||||
: "=&c" (__d0), "=&D" (__d1) \
|
||||
: "a" (__pattern),"0" (__n / 4), "1" (__s) \
|
||||
: "memory")
|
||||
|
||||
switch (__n % 4)
|
||||
{
|
||||
@ -219,32 +222,34 @@ __memset_cc (void *__s, unsigned long int __pattern, size_t __n)
|
||||
__STRING_INLINE void *
|
||||
__memset_cg (void *__s, unsigned long __c, size_t __n)
|
||||
{
|
||||
unsigned long int __d0, __d1;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
"rep; stosl\n\t"
|
||||
"testb $2,%b1\n\t"
|
||||
"testb $2,%b3\n\t"
|
||||
"je 1f\n\t"
|
||||
"stosw\n"
|
||||
"1:\n\t"
|
||||
"testb $1,%b1\n\t"
|
||||
"testb $1,%b3\n\t"
|
||||
"je 2f\n\t"
|
||||
"stosb\n"
|
||||
"2:"
|
||||
: /* no output */
|
||||
: "a" (__c), "q" (__n), "c" (__n / 4), "D" (__s)
|
||||
: "cx", "di", "memory");
|
||||
: "=&c" (__d0), "=&D" (__d1)
|
||||
: "a" (__c), "q" (__n), "0" (__n / 4), "1" (__s)
|
||||
: "memory");
|
||||
return __s;
|
||||
}
|
||||
|
||||
__STRING_INLINE void *
|
||||
__memset_gg (void *__s, char __c, size_t __n)
|
||||
{
|
||||
unsigned long int __d0, __d1;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
"rep; stosb"
|
||||
: /* no output */
|
||||
: "a" (__c),"D" (__s), "c" (__n)
|
||||
: "cx", "di", "memory");
|
||||
: "=&D" (__d0), "=&c" (__d1)
|
||||
: "a" (__c), "0" (__s), "1" (__n)
|
||||
: "memory");
|
||||
return __s;
|
||||
}
|
||||
|
||||
@ -256,6 +261,7 @@ __memset_gg (void *__s, char __c, size_t __n)
|
||||
__STRING_INLINE void *
|
||||
memchr (__const void *__s, int __c, size_t __n)
|
||||
{
|
||||
unsigned long int __d0;
|
||||
register void *__res;
|
||||
if (count == 0)
|
||||
return NULL;
|
||||
@ -266,9 +272,8 @@ memchr (__const void *__s, int __c, size_t __n)
|
||||
"je 1f\n\t"
|
||||
"movl $1,%0\n"
|
||||
"1:"
|
||||
: "=D" (__res)
|
||||
: "a" (__c), "0" (__s), "c" (__n)
|
||||
: "cx");
|
||||
: "=D" (__res), "=&c" (__d0)
|
||||
: "a" (__c), "0" (__s), "1" (__n));
|
||||
return __res - 1;
|
||||
}
|
||||
|
||||
@ -278,14 +283,15 @@ memchr (__const void *__s, int __c, size_t __n)
|
||||
__STRING_INLINE size_t
|
||||
strlen (__const char *__str)
|
||||
{
|
||||
unsigned long int __d0;
|
||||
register size_t __res;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
"repne; scasb\n\t"
|
||||
"notl %0"
|
||||
: "=c" (__res)
|
||||
: "D" (__str), "a" (0), "0" (0xffffffff)
|
||||
: "di", "cc");
|
||||
: "=c" (__res), "=&D" (__d0)
|
||||
: "1" (__str), "a" (0), "0" (0xffffffff)
|
||||
: "cc");
|
||||
return __res - 1;
|
||||
}
|
||||
|
||||
@ -295,6 +301,7 @@ strlen (__const char *__str)
|
||||
__STRING_INLINE char *
|
||||
strcpy (char *__dest, __const char *__src)
|
||||
{
|
||||
unsigned long int __d0, __d1;
|
||||
__asm__ __volatile__
|
||||
("cld\n"
|
||||
"1:\n\t"
|
||||
@ -302,9 +309,9 @@ strcpy (char *__dest, __const char *__src)
|
||||
"stosb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"jne 1b"
|
||||
: /* no output */
|
||||
: "S" (__src), "D" (__dest)
|
||||
: "si", "di", "ax", "memory", "cc");
|
||||
: "=&S" (__d0), "=&D" (__d1)
|
||||
: "0" (__src), "1" (__dest)
|
||||
: "ax", "memory", "cc");
|
||||
return __dest;
|
||||
}
|
||||
|
||||
@ -314,6 +321,7 @@ strcpy (char *__dest, __const char *__src)
|
||||
__STRING_INLINE char *
|
||||
strncpy (char *__dest, __const char *__src, size_t __n)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2;
|
||||
__asm__ __volatile__
|
||||
("cld\n"
|
||||
"1:\n\t"
|
||||
@ -325,9 +333,9 @@ strncpy (char *__dest, __const char *__src, size_t __n)
|
||||
"jne 1b\n\t"
|
||||
"rep; stosb\n"
|
||||
"2:"
|
||||
: /* no output */
|
||||
: "S" (__src), "D" (__dest), "c" (__n)
|
||||
: "si", "di", "ax", "cx", "memory", "cc");
|
||||
: "=&S" (__d0), "=&D" (__d1), "=&c" (__d2)
|
||||
: "0" (__src), "1" (__dest), "2" (__n)
|
||||
: "ax", "memory", "cc");
|
||||
return __dest;
|
||||
}
|
||||
|
||||
@ -337,6 +345,7 @@ strncpy (char *__dest, __const char *__src, size_t __n)
|
||||
__STRING_INLINE char *
|
||||
strcat (char *__dest, __const char *__src)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2, __d3;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
"repne; scasb\n\t"
|
||||
@ -346,9 +355,9 @@ strcat (char *__dest, __const char *__src)
|
||||
"stosb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"jne 1b"
|
||||
: /* no output */
|
||||
: "S" (__src), "D" (__dest), "a" (0), "c" (0xffffffff)
|
||||
: "si", "di", "ax", "cx", "memory", "cc");
|
||||
: "=&S" (__d0), "=&D" (__d1), "=&c" (__d2), "=&a" (__d3)
|
||||
: "0" (__src), "1" (__dest), "2" (0xffffffff), "3" (0)
|
||||
: "memory", "cc");
|
||||
return __dest;
|
||||
}
|
||||
|
||||
@ -358,11 +367,12 @@ strcat (char *__dest, __const char *__src)
|
||||
__STRING_INLINE char *
|
||||
strncat (char *__dest, __const char *__src, size_t __n)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2, __d3;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
"repne; scasb\n\t"
|
||||
"decl %1\n\t"
|
||||
"movl %4,%3\n"
|
||||
"movl %5,%3\n"
|
||||
"1:\n\t"
|
||||
"decl %3\n\t"
|
||||
"js 2f\n\t"
|
||||
@ -373,9 +383,9 @@ strncat (char *__dest, __const char *__src, size_t __n)
|
||||
"2:\n\t"
|
||||
"xorl %2,%2\n\t"
|
||||
"stosb"
|
||||
: /* no output */
|
||||
: "S" (__src), "D" (__dest), "a" (0), "c" (0xffffffff), "g" (__n)
|
||||
: "si", "di", "ax", "cx", "memory", "cc");
|
||||
: "=&S" (__d0), "=&D" (__d1), "=&c" (__d2), "=&a" (__d3)
|
||||
: "g" (__n), "0" (__src), "1" (__dest), "2" (0xffffffff), "3" (0)
|
||||
: "memory", "cc");
|
||||
return __dest;
|
||||
}
|
||||
|
||||
@ -385,6 +395,7 @@ strncat (char *__dest, __const char *__src, size_t __n)
|
||||
__STRING_INLINE int
|
||||
strcmp (__const char *__s1, __const char *__s2)
|
||||
{
|
||||
unsigned long int __d0, __d1;
|
||||
register int __res;
|
||||
__asm__ __volatile__
|
||||
("cld\n"
|
||||
@ -400,9 +411,9 @@ strcmp (__const char *__s1, __const char *__s2)
|
||||
"sbbl %%eax,%%eax\n\t"
|
||||
"orb $1,%%eax\n"
|
||||
"3:"
|
||||
: "=a" (__res)
|
||||
: "S" (__s1), "D" (__s2)
|
||||
: "si", "di", "cc");
|
||||
: "=a" (__res), "=&S" (__d0), "=&D" (__d1)
|
||||
: "1" (__s1), "2" (__s2)
|
||||
: "cc");
|
||||
return __res;
|
||||
}
|
||||
|
||||
@ -412,6 +423,7 @@ strcmp (__const char *__s1, __const char *__s2)
|
||||
__STRING_INLINE int
|
||||
strncmp (__const char *__s1, __const char *__s2, size_t __n)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2;
|
||||
register int __res;
|
||||
__asm__ __volatile__
|
||||
("cld\n"
|
||||
@ -430,9 +442,9 @@ strncmp (__const char *__s1, __const char *__s2, size_t __n)
|
||||
"sbbl %%eax,%%eax\n\t"
|
||||
"orb $1,%%al\n"
|
||||
"4:"
|
||||
: "=a" (__res)
|
||||
: "S" (__s1), "D" (__s2), "c" (__n)
|
||||
: "si", "di", "cx", "cc");
|
||||
: "=a" (__res), "=&S" (__d0), "=&D" (__d1), "=&c" (__d2)
|
||||
: "1" (__s1), "2" (__s2), "3" (__n)
|
||||
: "cc");
|
||||
return __res;
|
||||
}
|
||||
|
||||
@ -447,6 +459,7 @@ strncmp (__const char *__s1, __const char *__s2, size_t __n)
|
||||
__STRING_INLINE char *
|
||||
__strchr_g (__const char *__s, int __c)
|
||||
{
|
||||
unsigned long int __d0;
|
||||
register char *__res;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
@ -460,15 +473,16 @@ __strchr_g (__const char *__s, int __c)
|
||||
"movl $1,%1\n"
|
||||
"2:\n\t"
|
||||
"movl %1,%0"
|
||||
: "=a" (__res)
|
||||
: "S" (__s), "0" (__c)
|
||||
: "si", "cc");
|
||||
: "=a" (__res), "=&S" (__d0)
|
||||
: "0" (__c), "1" (__s)
|
||||
: "cc");
|
||||
return __res - 1;
|
||||
}
|
||||
|
||||
__STRING_INLINE char *
|
||||
__strchr_c (__const char *__s, int __c)
|
||||
{
|
||||
unsigned long int __d0;
|
||||
register char *__res;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
@ -481,9 +495,9 @@ __strchr_c (__const char *__s, int __c)
|
||||
"movl $1,%1\n"
|
||||
"2:\n\t"
|
||||
"movl %1,%0"
|
||||
: "=a" (__res)
|
||||
: "S" (__s), "0" (__c)
|
||||
: "si", "cc");
|
||||
: "=a" (__res), "=&S" (__d0)
|
||||
: "0" (__c), "1" (__s)
|
||||
: "cc");
|
||||
return __res - 1;
|
||||
}
|
||||
|
||||
@ -495,6 +509,7 @@ __strchr_c (__const char *__s, int __c)
|
||||
__STRING_INLINE size_t
|
||||
strcspn (__const char *__s, __const char *__reject)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2;
|
||||
register char *__res;
|
||||
__asm__ __volatile__
|
||||
("pushl %%ebx\n\t"
|
||||
@ -514,19 +529,20 @@ strcspn (__const char *__s, __const char *__reject)
|
||||
"jne 1b\n"
|
||||
"2:\n\t"
|
||||
"popl %%ebx"
|
||||
: "=S" (__res)
|
||||
: "a" (0), "c" (0xffffffff), "0" (__s), "r" (__reject)
|
||||
: "ax", "cx", "di", "cc");
|
||||
: "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2)
|
||||
: "r" (__reject), "1" (0), "2" (0xffffffff), "3" (__s),
|
||||
: "cc");
|
||||
return (__res - 1) - __s;
|
||||
}
|
||||
#else
|
||||
__STRING_INLINE size_t
|
||||
strcspn (__const char *__s, __const char *__reject)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2, __d3;
|
||||
register char *__res;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %5,%%edi\n\t"
|
||||
"repne; scasb\n\t"
|
||||
"notl %%ecx\n\t"
|
||||
"decl %%ecx\n\t"
|
||||
@ -535,14 +551,14 @@ strcspn (__const char *__s, __const char *__reject)
|
||||
"lodsb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"je 2f\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %5,%%edi\n\t"
|
||||
"movl %%edx,%%ecx\n\t"
|
||||
"repne; scasb\n\t"
|
||||
"jne 1b\n"
|
||||
"2:"
|
||||
: "=S" (__res)
|
||||
: "a" (0), "c" (0xffffffff),"0" (__s), "g" (__reject)
|
||||
: "ax", "cx", "dx", "di", "cc");
|
||||
: "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&d" (__d2), "=&D" (__d3)
|
||||
: "g" (__reject), "0" (__s), "1" (0), "2" (0xffffffff)
|
||||
: "cc");
|
||||
return (__res - 1) - __s;
|
||||
}
|
||||
#endif
|
||||
@ -555,6 +571,7 @@ strcspn (__const char *__s, __const char *__reject)
|
||||
__STRING_INLINE size_t
|
||||
strspn (__const char *__s, __const char *__accept)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2;
|
||||
register char *__res;
|
||||
__asm__ __volatile__
|
||||
("pushl %%ebx\n\t"
|
||||
@ -574,19 +591,20 @@ strspn (__const char *__s, __const char *__accept)
|
||||
"je 1b\n"
|
||||
"2:\n\t"
|
||||
"popl %%ebx"
|
||||
: "=S" (__res)
|
||||
: "a" (0), "c" (0xffffffff), "0" (__s), "r" (__accept)
|
||||
: "ax", "cx", "di", "cc");
|
||||
: "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2)
|
||||
: "r" (__accept), "0" (__s), "1" (0), "2" (0xffffffff)
|
||||
: "cc");
|
||||
return (__res - 1) - __s;
|
||||
}
|
||||
#else
|
||||
__STRING_INLINE size_t
|
||||
strspn (__const char *__s, __const char *__accept)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2, __d3;
|
||||
register char *__res;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %5,%%edi\n\t"
|
||||
"repne; scasb\n\t"
|
||||
"notl %%ecx\n\t"
|
||||
"decl %%ecx\n\t"
|
||||
@ -595,14 +613,14 @@ strspn (__const char *__s, __const char *__accept)
|
||||
"lodsb\n\t"
|
||||
"testb %%al,%%al\n\t"
|
||||
"je 2f\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %5,%%edi\n\t"
|
||||
"movl %%edx,%%ecx\n\t"
|
||||
"repne; scasb\n\t"
|
||||
"je 1b\n"
|
||||
"2:"
|
||||
: "=S" (__res)
|
||||
: "a" (0), "c" (0xffffffff), "0" (__s), "g" (__accept)
|
||||
: "ax", "cx", "dx", "di", "cc");
|
||||
: "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&d" (__d2), "=&D" (__d3)
|
||||
: "g" (__accept), "0" (__s), "a" (0), "c" (0xffffffff)
|
||||
: "cc");
|
||||
return (__res - 1) - __s;
|
||||
}
|
||||
#endif
|
||||
@ -614,6 +632,7 @@ strspn (__const char *__s, __const char *__accept)
|
||||
__STRING_INLINE char *
|
||||
strpbrk (__const char *__s, __const char *__accept)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2;
|
||||
register char *__res;
|
||||
__asm__ __volatile__
|
||||
("pushl %%ebx\n\t"
|
||||
@ -637,15 +656,16 @@ strpbrk (__const char *__s, __const char *__accept)
|
||||
"xorl %0,%0\n"
|
||||
"3:\n\t"
|
||||
"popl %%ebx"
|
||||
: "=S" (__res)
|
||||
: "a" (0), "c" (0xffffffff), "0" (__s), "r" (__accept)
|
||||
: "ax", "cx", "di", "cc");
|
||||
: "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&D" (__d2)
|
||||
: "r" (__accept), "0" (__s), "1" (0), "2" (0xffffffff)
|
||||
: "cc");
|
||||
return __res;
|
||||
}
|
||||
#else
|
||||
__STRING_INLINE char *
|
||||
strpbrk (__const char *__s, __const char *__accept)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2, __d3;
|
||||
register char *__res;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t"
|
||||
@ -667,9 +687,9 @@ strpbrk (__const char *__s, __const char *__accept)
|
||||
"2:\n\t"
|
||||
"xorl %0,%0\n"
|
||||
"3:"
|
||||
: "=S" (__res)
|
||||
: "a" (0), "c" (0xffffffff), "0" (__s), "g" (__accept)
|
||||
: "ax", "cx", "dx", "di", "cc");
|
||||
: "=&S" (__res), "=&a" (__d0), "=&c" (__d1), "=&d" (__d2), "=&D" (__d3)
|
||||
: "g" (__accept), "0" (__s), "1" (0), "2" (0xffffffff)
|
||||
: "cc");
|
||||
return __res;
|
||||
}
|
||||
#endif
|
||||
@ -681,6 +701,7 @@ strpbrk (__const char *__s, __const char *__accept)
|
||||
__STRING_INLINE char *
|
||||
strstr (__const char *__haystack, __const char *__needle)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2, __d3;
|
||||
register char *__res;
|
||||
__asm__ __volatile__
|
||||
("pushl %%ebx\n\t"
|
||||
@ -703,25 +724,26 @@ strstr (__const char *__haystack, __const char *__needle)
|
||||
"xorl %%eax,%%eax\n\t"
|
||||
"2:\n\t"
|
||||
"popl %%ebx"
|
||||
: "=a" (__res)
|
||||
: "0" (0), "c" (0xffffffff), "S" (__haystack), "r" (__needle)
|
||||
: "cx", "di", "si", "cc");
|
||||
: "=&a" (__res), "=&c" (__d0), "=&S" (__d1), "=&D" (__d2)
|
||||
: "r" (__needle), "0" (0), "1" (0xffffffff), "2" (__haystack)
|
||||
: "cc");
|
||||
return __res;
|
||||
}
|
||||
#else
|
||||
__STRING_INLINE char *
|
||||
strstr (__const char *__haystack, __const char *__needle)
|
||||
{
|
||||
unsigned long int __d0, __d1, __d2, __d3;
|
||||
register char *__res;
|
||||
__asm__ __volatile__
|
||||
("cld\n\t" \
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %5,%%edi\n\t"
|
||||
"repne; scasb\n\t"
|
||||
"notl %%ecx\n\t"
|
||||
"decl %%ecx\n\t" /* NOTE! This also sets Z if searchstring='' */
|
||||
"movl %%ecx,%%edx\n"
|
||||
"1:\n\t"
|
||||
"movl %4,%%edi\n\t"
|
||||
"movl %5,%%edi\n\t"
|
||||
"movl %%esi,%%eax\n\t"
|
||||
"movl %%edx,%%ecx\n\t"
|
||||
"repe; cmpsb\n\t"
|
||||
@ -732,9 +754,9 @@ strstr (__const char *__haystack, __const char *__needle)
|
||||
"jne 1b\n\t"
|
||||
"xorl %%eax,%%eax\n\t"
|
||||
"2:"
|
||||
: "=a" (__res)
|
||||
: "0" (0), "c" (0xffffffff), "S" (__haystack), "g" (__needle)
|
||||
: "cx", "dx", "di", "si", "cc");
|
||||
: "=&a" (__res), "=&c" (__d0), "=&S" (__d1), "=&d" (__d2), "=&D" (__d3)
|
||||
: "g" (__needle), "0" (0), "1" (0xffffffff), "2" (__haystack)
|
||||
: "cc");
|
||||
return __res;
|
||||
}
|
||||
#endif
|
||||
|
@ -41,6 +41,7 @@
|
||||
#endif
|
||||
|
||||
#ifndef ADJTIMEX
|
||||
#define NO_LOCAL_ADJTIME
|
||||
#define ADJTIMEX(x) __adjtimex (x)
|
||||
#endif
|
||||
|
||||
@ -91,6 +92,6 @@ ADJTIME (itv, otv)
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifndef ADJTIME
|
||||
#ifdef NO_LOCAL_ADJTIME
|
||||
weak_alias (__adjtime, adjtime)
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user