+2006-03-06 Roland McGrath <roland@redhat.com>
+
+ * version.h (VERSION): 2.4
+ * README.template: Update for 2.4.
+ * README: Regenerated.
+ * manual/install.texi (Configuring and compiling): Separate build
+ directory is mandatory. Use glibc-2.4 in example.
+ Update --enable-add-ons description.
+ (Supported Configurations): Remove section.
+ * INSTALL: Regenerated.
+
+ * sysdeps/unix/sysv/linux/x86_64/sysconf.c
+ (handle_intel, handle_amd): Add __attribute__ ((noinline)).
+ * sysdeps/unix/sysv/linux/i386/sysconf.c
+ (handle_i486, handle_intel, handle_amd): Likewise.
+
+ * sysdeps/unix/sysv/linux/i386/sysconf.c (__sysconf): Don't handle
+ _SC_CPUTIME and _SC_THREAD_CPUTIME here.
+ * sysdeps/unix/sysv/linux/x86_64/sysconf.c (__sysconf): Likewise.
+
2006-03-04 Jakub Jelinek <jakub@redhat.com>
Roland McGrath <roland@redhat.com>
2006-03-05 Roland McGrath <roland@frob.com>
+ * sysdeps/mach/hurd/faccessat.c: New file.
+ * sysdeps/mach/hurd/fchmodat.c: New file.
+ * sysdeps/mach/hurd/fchownat.c: New file.
+ * sysdeps/mach/hurd/fxstatat.c: New file.
+ * sysdeps/mach/hurd/fxstatat64.c: New file.
+ * sysdeps/mach/hurd/linkat.c: New file.
+ * sysdeps/mach/hurd/mkdirat.c: New file.
+ * sysdeps/mach/hurd/openat.c: New file.
+ * sysdeps/mach/hurd/openat64.c: New file.
+ * sysdeps/mach/hurd/symlinkat.c: New file.
+ * sysdeps/mach/hurd/unlinkat.c: New file.
+ * sysdeps/mach/hurd/xmknod.c (__xmknod): Just call __xmknodat.
+ Guts move to ...
+ * sysdeps/mach/hurd/xmknodat.c: ... here, new file.
+
+ * hurd/lookup-at.c: New file.
+ * hurd/Makefile (routines): Add it.
+ * hurd/hurd/fd.h: Declare __file_name_lookup_at,
+ __file_name_split_at and __directory_name_split_at.
+
+ * hurd/hurd/lookup.h: Declare {,__}hurd_directory_name_split.
+
+ * hurd/hurdlookup.c (__hurd_directory_name_split): Use __memrchr
+ unconditionally.
+
+ * sysdeps/mach/hurd/open.c: Define {,__,__libc_,}open64 as aliases.
+ * sysdeps/mach/hurd/open64.c: New file.
+
* sysdeps/posix/sysconf.c (__sysconf): Use #if _POSIX_FOO > 0
rather than #ifdef _POSIX_FOO for options. We should return -1
at runtime for an option defined to 0 at compile time.
Configuring and compiling GNU Libc
==================================
-GNU libc can be compiled in the source directory, but we strongly advise
-building it in a separate build directory. For example, if you have
-unpacked the glibc sources in `/src/gnu/glibc-2.3', create a directory
+GNU libc cannot be compiled in the source directory. You must build it
+in a separate build directory. For example, if you have unpacked the
+glibc sources in `/src/gnu/glibc-2.4', create a directory
`/src/gnu/glibc-build' to put the object files in. This allows
-removing the whole build directory in case an error occurs, which is the
-safest way to get a fresh start and should always be done.
+removing the whole build directory in case an error occurs, which is
+the safest way to get a fresh start and should always be done.
From your object directory, run the shell script `configure' located
at the top level of the source tree. In the scenario above, you'd type
- $ ../glibc-2.3/configure ARGS...
+ $ ../glibc-2.4/configure ARGS...
- Please note that even if you're building in a separate build
+ Please note that even though you're building in a separate build
directory, the compilation needs to modify a few files in the source
directory, especially some files in the manual subdirectory.
-`configure' takes many options, but you can get away with knowing only
-two: `--prefix' and `--enable-add-ons'. The `--prefix' option tells
-`configure' where you want glibc installed. This defaults to
-`/usr/local'. The `--enable-add-ons' option tells `configure' to use
-all the add-on bundles it finds in the source directory. Since
-important functionality is provided in add-ons, you should always
-specify this option.
+`configure' takes many options, but the only one that is usually
+mandatory is `--prefix'. This option tells `configure' where you want
+glibc installed. This defaults to `/usr/local', but the normal setting
+to install as the standard system library is `--prefix=/usr' for
+GNU/Linux systems and `--prefix=' (an empty prefix) for GNU/Hurd
+systems.
It may also be useful to set the CC and CFLAGS variables in the
environment when running `configure'. CC selects the C compiler that
ones found in `/usr/include'.
`--enable-add-ons[=LIST]'
- Enable add-on packages in your source tree. If this option is
+ Specify add-on packages to include in the build. If this option is
specified with no list, it enables all the add-on packages it
- finds. If you do not wish to use some add-on packages that you
- have present in your source tree, give this option a list of the
- add-ons that you _do_ want used, like this: `--enable-add-ons=nptl'
+ finds in the main source directory; this is the default behavior.
+ You may specify an explicit list of add-ons to use in LIST,
+ separated by spaces or commas (if you use spaces, remember to
+ quote them from the shell). Each add-on in LIST can be an
+ absolute directory name or can be a directory name relative to the
+ main source directory, or relative to the build directory (that
+ is, the current working directory). For example,
+ `--enable-add-ons=nptl,../glibc-libidn-2.4'.
`--enable-kernel=VERSION'
This option is currently only useful on GNU/Linux systems. The
but isn't. Look for error messages from `make' containing `***'.
Those indicate that something is seriously wrong.
- The compilation process can take several hours. Expect at least two
-hours for the default configuration on i586 for GNU/Linux. For Hurd,
-times are much longer. Some complex modules may take a very long time
-to compile, as much as several minutes on slower machines. Do not
-panic if the compiler appears to hang.
+ The compilation process can take a long time, depending on the
+configuration and the speed of your machine. Some complex modules may
+take a very long time to compile, as much as several minutes on slower
+machines. Do not panic if the compiler appears to hang.
If you want to run a parallel make, simply pass the `-j' option with
an appropriate numeric parameter to `make'. You need a recent GNU
You may also need these packages if you upgrade your source tree using
patches, although we try to avoid this.
-Supported Configurations
-========================
-
-The GNU C Library currently supports configurations that match the
-following patterns:
-
- alpha*-*-linux
- arm-*-linux
- cris-*-linux
- hppa-*-linux
- iX86-*-gnu
- iX86-*-linux
- ia64-*-linux
- m68k-*-linux
- mips*-*-linux
- powerpc-*-linux
- s390-*-linux
- s390x-*-linux
- sparc-*-linux
- sparc64-*-linux
- x86_64-*-linux
-
- Former releases of this library (version 2.1 and/or 2.0) used to run
-on the following configurations:
-
- arm-*-linuxaout
- arm-*-none
-
- Very early releases (version 1.09.1 and perhaps earlier versions)
-used to run on the following configurations:
-
- alpha-dec-osf1
- alpha-*-linuxecoff
- iX86-*-bsd4.3
- iX86-*-isc2.2
- iX86-*-isc3.N
- iX86-*-sco3.2
- iX86-*-sco3.2v4
- iX86-*-sysv
- iX86-*-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 these configurations,
-they are not supported at the moment. They probably don't compile;
-they definitely don't work anymore. Porting the library is not hard.
-If you are interested in doing a port, please contact the glibc
-maintainers. Start at `http://www.gnu.org/software/libc/' and read the
-references there on how to go about getting involved and contacting the
-developers.
-
- Valid cases of `iX86' include `i386', `i486', `i586', and `i686'.
-All of those configurations produce a library that can run on this
-processor and newer processors. The GCC compiler by default generates
-code that's optimized for the machine it's configured for and will use
-the instructions available on that machine. For example if your GCC is
-configured for `i686', gcc will optimize for `i686' and might issue
-some `i686' specific instructions. To generate code for other models,
-you have to configure for that model and give GCC the appropriate
-`-march=' and `-mcpu=' compiler switches via CFLAGS.
-
Specific advice for GNU/Linux systems
=====================================
-This directory contains the version 2.3.4 release of the GNU C Library.
-Many bugs have been fixed since the last release.
-Some bugs surely remain.
-
-As of this release, the GNU C library is known to run on the following
-configurations:
-
- *-*-gnu GNU Hurd
- i[3456]86-*-linux-gnu Linux-2.x on Intel
- m68k-*-linux-gnu Linux-2.x on Motorola 680x0
- alpha*-*-linux-gnu Linux-2.x on DEC Alpha
- powerpc-*-linux-gnu Linux and MkLinux on PowerPC systems
- powerpc64-*-linux-gnu Linux-2.4.19+ on 64-bit PowerPC systems
- sparc-*-linux-gnu Linux-2.x on SPARC
- sparc64-*-linux-gnu Linux-2.x on UltraSPARC 64-bit
- arm-*-none ARM standalone systems
- arm-*-linux Linux-2.x on ARM
- arm-*-linuxaout Linux-2.x on ARM using a.out binaries
- mips*-*-linux-gnu Linux-2.x on MIPS
- ia64-*-linux-gnu Linux-2.x on ia64
- s390-*-linux-gnu Linux-2.x on IBM S/390
- s390x-*-linux-gnu Linux-2.4+ on IBM S/390 64-bit
- sh-*-linux-gnu Linux-2.x on Super Hitachi
- x86-64-*-linux-gnu Linux-2.4+ on x86-64
-
-Past releases of this library ran on a variety of configurations that are
-no longer supported. Porting the library is not hard. If you are
-interested in doing a port, please contact the glibc maintainers;
-see http://www.gnu.org/software/libc/ for more information.
-
-There are some add-ons which can be used together with GNU libc. They
-are designed in a way to ease the installation by integrating them in
-the libc source tree. Simply get the add-ons you need and use the
---enable-add-ons option of the `configure' script to tell where the
-add-ons are found. Please read the FAQ file for more details.
-
-See the file INSTALL to find out how to configure, build, install, and port
-the GNU C library. You might also consider reading the WWW pages for the
-GNU libc at http://www.gnu.org/software/libc/libc.html.
-
-The GNU C Library is completely documented by the Texinfo manual found
-in the `manual/' subdirectory. The manual is still being updated and
-contains some known errors and omissions; we regret that we do not
-have the resources to work on the manual as much as we would like.
-Please send comments on the manual to <bug-glibc-manual@gnu.org>, and
-not to the library bug-reporting address.
+This directory contains the version 2.4 release of the GNU C Library.
+
+The GNU C Library is the standard system C library for all GNU systems,
+and is an important part of what makes up a GNU system. It provides the
+system API for all programs written in C and C-compatible languages such
+as C++ and Objective C; the runtime facilities of other programming
+languages use the C library to access the underlying operating system.
+
+In GNU/Linux systems, the C library works with the Linux kernel to
+implement the operating system behavior seen by user applications.
+In GNU/Hurd systems, it works with a microkernel and Hurd servers.
+
+Version 2.4 is the first release after a long period of development, and
+introduces changes to the API and a new ABI for all configurations. It
+has been tested and deployed in new production systems, but should still
+be considered somewhat experimental. The stable 2.3 release series
+continues to be maintained, and implements a widely-deployed ABI.
+Version 2.3.6 is available, and we will release 2.3.7 with more bug fixes.
+
+The GNU C Library implements much of the POSIX.1 functionality in the
+GNU/Hurd system, using configurations i[34567]86-*-gnu.
+
+When working with Linux kernels, the GNU C Library version 2.4 is
+intended primarily for use with Linux kernel version 2.6.0 and later.
+We only support using the NPTL implementation of pthreads, which is now
+the default configuration. Most of the C library will continue to work
+on older Linux kernels and many programs will not require a 2.6 kernel
+to run correctly. However, pthreads and related functionality will not
+work at all on old kernels and we do not recommend using glibc 2.4 with
+any Linux kernel prior to 2.6.
+
+All Linux kernel versions prior to 2.6.16 are known to have some bugs that
+may cause some of the tests related to pthreads in "make check" to fail.
+If you see such problems, please try the test suite on the most recent
+Linux kernel version that you can use, before pursuing those bugs further.
+
+The old LinuxThreads add-on implementation of pthreads for older Linux
+kernels is no longer supported, and we are not distributing it with this
+release. Someone has volunteered to revive its maintenance unofficially
+for at least a short time for the benefit of those using Linux kernels
+older than 2.6, but a working version is not presently available. When
+it is in working condition, we will make it available alongside future
+glibc releases. LinuxThreads will not be supported.
+
+The GNU C Library supports these configurations for using Linux kernels:
+
+ i[34567]86-*-linux-gnu
+ x86_64-*-linux-gnu
+ powerpc-*-linux-gnu
+ powerpc64-*-linux-gnu
+ s390-*-linux-gnu
+ s390x-*-linux-gnu
+ ia64-*-linux-gnu
+ sparc*-*-linux-gnu
+ sparc64*-*-linux-gnu
+
+ alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL
+ sh[34]-*-linux-gnu Requires Linux 2.6.11
+
+The code for other CPU configurations supported by volunteers outside of
+the core glibc maintenance effort is contained in the separate `ports'
+add-on. You can find glibc-ports-2.4 distributed separately in the
+same place where you got the main glibc distribution files.
+Currently these configurations are known to work using the `ports' add-on:
+
+ arm-*-linux-gnu Requires Linux 2.6.15 for NPTL, no SMP support
+ arm-*-linux-gnueabi Requires Linux 2.6.16-rc1 for NPTL, no SMP
+ mips-*-linux-gnu Requires Linux 2.6.12 for NPTL
+ mips64-*-linux-gnu Requires Linux 2.6.12 for NPTL
+
+The ports distribution also contains code for other configurations that
+do not work or have not been maintained recently, but will be of use to
+anyone trying to make a new configuration work. If you are interested
+in doing a port, please contact the glibc maintainers; see
+http://www.gnu.org/software/libc/ for more information.
+
+See the file INSTALL to find out how to configure, build, and install
+the GNU C Library. You might also consider reading the WWW pages for
+the C library at http://www.gnu.org/software/libc/.
+
+The GNU C Library is (almost) completely documented by the Texinfo manual
+found in the `manual/' subdirectory. The manual is still being updated
+and contains some known errors and omissions; we regret that we do not
+have the resources to work on the manual as much as we would like. For
+corrections to the manual, please file a bug in the `manual' component,
+following the bug-reporting instructions below. Please be sure to check
+the manual in the current development sources to see if your problem has
+already been corrected.
The file NOTES contains a description of the feature-test macros used
in the GNU C library, explaining how you can tell the library what
This directory contains the version VERSION release of the GNU C Library.
-Many bugs have been fixed since the last release.
-Some bugs surely remain.
-
-As of this release, the GNU C library is known to run on the following
-configurations:
-
- *-*-gnu GNU Hurd
- i[3456]86-*-linux-gnu Linux-2.x on Intel
- m68k-*-linux-gnu Linux-2.x on Motorola 680x0
- alpha*-*-linux-gnu Linux-2.x on DEC Alpha
- powerpc-*-linux-gnu Linux and MkLinux on PowerPC systems
- powerpc64-*-linux-gnu Linux-2.4.19+ on 64-bit PowerPC systems
- sparc-*-linux-gnu Linux-2.x on SPARC
- sparc64-*-linux-gnu Linux-2.x on UltraSPARC 64-bit
- arm-*-none ARM standalone systems
- arm-*-linux Linux-2.x on ARM
- arm-*-linuxaout Linux-2.x on ARM using a.out binaries
- mips*-*-linux-gnu Linux-2.x on MIPS
- ia64-*-linux-gnu Linux-2.x on ia64
- s390-*-linux-gnu Linux-2.x on IBM S/390
- s390x-*-linux-gnu Linux-2.4+ on IBM S/390 64-bit
- sh-*-linux-gnu Linux-2.x on Super Hitachi
- x86-64-*-linux-gnu Linux-2.4+ on x86-64
-
-Past releases of this library ran on a variety of configurations that are
-no longer supported. Porting the library is not hard. If you are
-interested in doing a port, please contact the glibc maintainers;
-see http://www.gnu.org/software/libc/ for more information.
-
-There are some add-ons which can be used together with GNU libc. They
-are designed in a way to ease the installation by integrating them in
-the libc source tree. Simply get the add-ons you need and use the
---enable-add-ons option of the `configure' script to tell where the
-add-ons are found. Please read the FAQ file for more details.
-
-See the file INSTALL to find out how to configure, build, install, and port
-the GNU C library. You might also consider reading the WWW pages for the
-GNU libc at http://www.gnu.org/software/libc/libc.html.
-
-The GNU C Library is completely documented by the Texinfo manual found
-in the `manual/' subdirectory. The manual is still being updated and
-contains some known errors and omissions; we regret that we do not
-have the resources to work on the manual as much as we would like.
-Please send comments on the manual to <bug-glibc-manual@gnu.org>, and
-not to the library bug-reporting address.
+
+The GNU C Library is the standard system C library for all GNU systems,
+and is an important part of what makes up a GNU system. It provides the
+system API for all programs written in C and C-compatible languages such
+as C++ and Objective C; the runtime facilities of other programming
+languages use the C library to access the underlying operating system.
+
+In GNU/Linux systems, the C library works with the Linux kernel to
+implement the operating system behavior seen by user applications.
+In GNU/Hurd systems, it works with a microkernel and Hurd servers.
+
+Version 2.4 is the first release after a long period of development, and
+introduces changes to the API and a new ABI for all configurations. It
+has been tested and deployed in new production systems, but should still
+be considered somewhat experimental. The stable 2.3 release series
+continues to be maintained, and implements a widely-deployed ABI.
+Version 2.3.6 is available, and we will release 2.3.7 with more bug fixes.
+
+The GNU C Library implements much of the POSIX.1 functionality in the
+GNU/Hurd system, using configurations i[34567]86-*-gnu.
+
+When working with Linux kernels, the GNU C Library version 2.4 is
+intended primarily for use with Linux kernel version 2.6.0 and later.
+We only support using the NPTL implementation of pthreads, which is now
+the default configuration. Most of the C library will continue to work
+on older Linux kernels and many programs will not require a 2.6 kernel
+to run correctly. However, pthreads and related functionality will not
+work at all on old kernels and we do not recommend using glibc 2.4 with
+any Linux kernel prior to 2.6.
+
+All Linux kernel versions prior to 2.6.16 are known to have some bugs that
+may cause some of the tests related to pthreads in "make check" to fail.
+If you see such problems, please try the test suite on the most recent
+Linux kernel version that you can use, before pursuing those bugs further.
+
+The old LinuxThreads add-on implementation of pthreads for older Linux
+kernels is no longer supported, and we are not distributing it with this
+release. Someone has volunteered to revive its maintenance unofficially
+for at least a short time for the benefit of those using Linux kernels
+older than 2.6, but a working version is not presently available. When
+it is in working condition, we will make it available alongside future
+glibc releases. LinuxThreads will not be supported.
+
+The GNU C Library supports these configurations for using Linux kernels:
+
+ i[34567]86-*-linux-gnu
+ x86_64-*-linux-gnu
+ powerpc-*-linux-gnu
+ powerpc64-*-linux-gnu
+ s390-*-linux-gnu
+ s390x-*-linux-gnu
+ ia64-*-linux-gnu
+ sparc*-*-linux-gnu
+ sparc64*-*-linux-gnu
+
+ alpha*-*-linux-gnu Requires Linux 2.6.9 for NPTL
+ sh[34]-*-linux-gnu Requires Linux 2.6.11
+
+The code for other CPU configurations supported by volunteers outside of
+the core glibc maintenance effort is contained in the separate `ports'
+add-on. You can find glibc-ports-VERSION distributed separately in the
+same place where you got the main glibc distribution files.
+Currently these configurations are known to work using the `ports' add-on:
+
+ arm-*-linux-gnu Requires Linux 2.6.15 for NPTL, no SMP support
+ arm-*-linux-gnueabi Requires Linux 2.6.16-rc1 for NPTL, no SMP
+ mips-*-linux-gnu Requires Linux 2.6.12 for NPTL
+ mips64-*-linux-gnu Requires Linux 2.6.12 for NPTL
+
+The ports distribution also contains code for other configurations that
+do not work or have not been maintained recently, but will be of use to
+anyone trying to make a new configuration work. If you are interested
+in doing a port, please contact the glibc maintainers; see
+http://www.gnu.org/software/libc/ for more information.
+
+See the file INSTALL to find out how to configure, build, and install
+the GNU C Library. You might also consider reading the WWW pages for
+the C library at http://www.gnu.org/software/libc/.
+
+The GNU C Library is (almost) completely documented by the Texinfo manual
+found in the `manual/' subdirectory. The manual is still being updated
+and contains some known errors and omissions; we regret that we do not
+have the resources to work on the manual as much as we would like. For
+corrections to the manual, please file a bug in the `manual' component,
+following the bug-reporting instructions below. Please be sure to check
+the manual in the current development sources to see if your problem has
+already been corrected.
The file NOTES contains a description of the feature-test macros used
in the GNU C library, explaining how you can tell the library what
!is_hwcap_platform (direntry->d_name)))
continue;
len = strlen (direntry->d_name);
+ /* Skip temporary files created by the prelink program. Files with
+ names like these are never really DSOs we want to look at. */
if (len >= sizeof (".#prelink#") - 1)
{
if (strcmp (direntry->d_name + len - sizeof (".#prelink#") + 1,
glibc-base := HEAD
DIST_BRANCH := devel
COLLECTION := dist-fc4
-fedora-sync-date := 2006-03-06 07:20 UTC
-fedora-sync-tag := fedora-glibc-20060306T0720
+fedora-sync-date := 2006-03-06 12:39 UTC
+fedora-sync-tag := fedora-glibc-20060306T1239
-%define glibcrelease 2
+%define glibcrelease 1
%define auxarches i586 i686 athlon sparcv9 alphaev6
%define prelinkarches noarch
%define xenarches i686 athlon
%endif
%changelog
+* Mon Mar 6 2006 Jakub Jelinek <jakub@redhat.com> 2.4-1
+- update from CVS
+ - glibc 2.4 release
+
* Mon Mar 6 2006 Jakub Jelinek <jakub@redhat.com> 2.3.91-2
- update from CVS
- fix sYSMALLOc for MALLOC_ALIGNMENT > 2 * SIZE_SZ (#183895)
-# Copyright (C) 1991,92,93,94,95,96,97,98,99,2001,2002,2004
+# Copyright (C) 1991,92,93,94,95,96,97,98,99,2001,2002,2004,2006
# Free Software Foundation, Inc.
# This file is part of the GNU C Library.
routines = hurdstartup hurdinit \
hurdid hurdpid hurdrlimit hurdprio hurdexec hurdselect \
- hurdlookup lookup-retry \
+ hurdlookup lookup-retry lookup-at \
get-host set-host \
path-lookup \
setauth \
/* File descriptors.
- Copyright (C) 1993,94,95,96,97,98,99,2000,01,02
+ Copyright (C) 1993,1994,1995,1996,1997,1998,1999,2000,2001,2002,2006
Free Software Foundation, Inc.
This file is part of the GNU C Library.
const struct timespec *timeout,
const sigset_t *sigmask);
+/* Variant of file_name_lookup used in *at function implementations.
+ AT_FLAGS should contain only AT_SYMLINK_NOFOLLOW; other bits
+ cause EINVAL. */
+extern file_t __file_name_lookup_at (int fd, int at_flags,
+ const char *file_name,
+ int flags, mode_t mode);
+
+/* Variant of file_name_split used in *at function implementations. */
+extern file_t __file_name_split_at (int fd, const char *file_name,
+ char **name);
+
+/* Variant of directory_name_split used in *at function implementations. */
+extern file_t __directory_name_split_at (int fd, const char *directory_name,
+ char **name);
+
+
#endif /* hurd/fd.h */
/* Declarations of file name translation functions for the GNU Hurd.
- Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
(int which,
error_t (*operate) (mach_port_t)),
file_t (*get_dtable_port) (int fd),
- error_t (*lookup)
- (file_t dir, char *name, int flags, mode_t mode,
+ error_t (*lookup) (file_t dir, char *name,
+ int flags, mode_t mode,
retry_type *do_retry, string_t retry_name,
mach_port_t *result),
const char *file_name,
(int which,
error_t (*operate) (mach_port_t)),
file_t (*get_dtable_port) (int fd),
- error_t (*lookup)
- (file_t dir, char *name, int flags, mode_t mode,
+ error_t (*lookup) (file_t dir, char *name,
+ int flags, mode_t mode,
retry_type *do_retry, string_t retry_name,
mach_port_t *result),
const char *file_name,
file_t *dir, char **name);
+/* Split DIRECTORY into a parent directory and a name within the directory.
+ This is the same as hurd_file_name_split, but ignores trailing slashes. */
+
+error_t __hurd_directory_name_split (error_t (*use_init_port)
+ (int which,
+ error_t (*operate) (mach_port_t)),
+ file_t (*get_dtable_port) (int fd),
+ error_t (*lookup) (file_t dir, char *name,
+ int flags, mode_t mode,
+ retry_type *do_retry, string_t retry_name,
+ mach_port_t *result),
+ const char *directory_name,
+ file_t *dir, char **name);
+error_t hurd_directory_name_split (error_t (*use_init_port)
+ (int which,
+ error_t (*operate) (mach_port_t)),
+ file_t (*get_dtable_port) (int fd),
+ error_t (*lookup) (file_t dir, char *name,
+ int flags, mode_t mode,
+ retry_type *do_retry, string_t retry_name,
+ mach_port_t *result),
+ const char *directory_name,
+ file_t *dir, char **name);
+
/* Process the values returned by `dir_lookup' et al, and loop doing
`dir_lookup' calls until one returns FS_RETRY_NONE. The arguments
-/* Copyright (C) 1992,93,94,95,96,97,99,2001,2004
+/* Copyright (C) 1992,1993,1994,1995,1996,1997,1999,2001,2004,2006
Free Software Foundation, Inc.
This file is part of the GNU C Library.
--lastslash;
/* Find the last one earlier in the string, before the trailing ones. */
-#if __GLIBC__ > 2 || __GLIBC_MINOR__ >= 2
lastslash = __memrchr (file_name, '/', lastslash - file_name);
-#else
- /* Keep backing up, looking for a slash. */
- do
- if (lastslash == file_name)
- {
- /* Hit the start with no slash. */
- lastslash = NULL;
- break;
- }
- while (*lastslash-- != '/');
-#endif
}
if (lastslash != NULL)
--- /dev/null
+/* Lookup helper function for Hurd implementation of *at functions.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <hurd.h>
+#include <hurd/lookup.h>
+#include <hurd/fd.h>
+#include <string.h>
+#include <fcntl.h>
+
+file_t
+__file_name_lookup_at (int fd, int at_flags,
+ const char *file_name, int flags, mode_t mode)
+{
+ error_t err;
+ file_t result;
+
+ flags |= (at_flags & AT_SYMLINK_NOFOLLOW) ? O_NOLINK : 0;
+ at_flags &= ~AT_SYMLINK_NOFOLLOW;
+ if (at_flags != 0)
+ return __hurd_fail (EINVAL);
+
+ if (fd == AT_FDCWD || file_name[0] == '/')
+ return __file_name_lookup (file_name, flags, mode);
+
+ file_t startdir;
+ error_t use_init_port (int which, error_t (*operate) (mach_port_t))
+ {
+ return (which == INIT_PORT_CWDIR ? (*operate) (startdir) :
+ _hurd_ports_use (which, operate));
+ }
+
+ err = HURD_DPORT_USE (fd, (startdir = port,
+ __hurd_file_name_lookup (&use_init_port,
+ &__getdport, NULL,
+ file_name,
+ flags,
+ mode & ~_hurd_umask,
+ &result)));
+
+ return err ? (__hurd_dfail (fd, err), MACH_PORT_NULL) : result;
+}
+
+file_t
+__file_name_split_at (int fd, const char *file_name, char **name)
+{
+ error_t err;
+ file_t result;
+
+ if (fd == AT_FDCWD || file_name[0] == '/')
+ return __file_name_split (file_name, name);
+
+ err = __hurd_file_name_split (&_hurd_ports_use, &__getdport, 0,
+ file_name, &result, name);
+
+ file_t startdir;
+ error_t use_init_port (int which, error_t (*operate) (mach_port_t))
+ {
+ return (which == INIT_PORT_CWDIR ? (*operate) (startdir) :
+ _hurd_ports_use (which, operate));
+ }
+
+ err = HURD_DPORT_USE (fd, (startdir = port,
+ __hurd_file_name_split (&use_init_port,
+ &__getdport, 0,
+ file_name,
+ &result, name)));
+
+ return err ? (__hurd_dfail (fd, err), MACH_PORT_NULL) : result;
+}
+
+file_t
+__directory_name_split_at (int fd, const char *directory_name, char **name)
+{
+ error_t err;
+ file_t result;
+
+ if (fd == AT_FDCWD || directory_name[0] == '/')
+ return __directory_name_split (directory_name, name);
+
+ file_t startdir;
+ error_t use_init_port (int which, error_t (*operate) (mach_port_t))
+ {
+ return (which == INIT_PORT_CWDIR ? (*operate) (startdir) :
+ _hurd_ports_use (which, operate));
+ }
+
+ err = HURD_DPORT_USE (fd, (startdir = port,
+ __hurd_directory_name_split (&use_init_port,
+ &__getdport, 0,
+ directory_name,
+ &result, name)));
+
+ return err ? (__hurd_dfail (fd, err), MACH_PORT_NULL) : result;
+}
* Running make install:: How to install it once you've got it
compiled.
* Tools for Compilation:: You'll need these first.
-* Supported Configurations:: What it runs on, what it doesn't.
* Linux:: Specific advice for GNU/Linux systems.
* Reporting Bugs:: So they'll get fixed.
@end menu
@cindex configuring
@cindex compiling
-GNU libc can be compiled in the source directory, but we strongly advise
-building it in a separate build directory. For example, if you have
- unpacked
-the glibc sources in @file{/src/gnu/glibc-2.3}, create a directory
+GNU libc cannot be compiled in the source directory. You must build
+it in a separate build directory. For example, if you have unpacked
+the glibc sources in @file{/src/gnu/glibc-2.4}, create a directory
@file{/src/gnu/glibc-build} to put the object files in. This allows
-removing the whole build directory in case an error occurs, which is the
-safest way to get a fresh start and should always be done.
+removing the whole build directory in case an error occurs, which is
+the safest way to get a fresh start and should always be done.
From your object directory, run the shell script @file{configure} located
at the top level of the source tree. In the scenario above, you'd type
@smallexample
-$ ../glibc-2.3/configure @var{args@dots{}}
+$ ../glibc-2.4/configure @var{args@dots{}}
@end smallexample
-Please note that even if you're building in a separate build directory,
-the compilation needs to modify a few files in the source
+Please note that even though you're building in a separate build
+directory, the compilation needs to modify a few files in the source
directory, especially some files in the manual subdirectory.
@noindent
-@code{configure} takes many options, but you can get away with knowing
-only two: @samp{--prefix} and @samp{--enable-add-ons}. The
-@code{--prefix} option tells @code{configure} where you want glibc
-installed. This defaults to @file{/usr/local}. The
-@samp{--enable-add-ons} option tells @code{configure} to use all the
-add-on bundles it finds in the source directory. Since important
-functionality is provided in add-ons, you should always specify this
-option.
+@code{configure} takes many options, but the only one that is usually
+mandatory is @samp{--prefix}. This option tells @code{configure}
+where you want glibc installed. This defaults to @file{/usr/local},
+but the normal setting to install as the standard system library is
+@samp{--prefix=/usr} for GNU/Linux systems and @samp{--prefix=} (an
+empty prefix) for GNU/Hurd systems.
It may also be useful to set the @var{CC} and @var{CFLAGS} variables in
the environment when running @code{configure}. @var{CC} selects the C
@file{/usr/include}.
@item --enable-add-ons[=@var{list}]
-Enable add-on packages in your source tree. If this option is specified
-with no list, it enables all the add-on packages it finds. If you do
-not wish to use some add-on packages that you have present in your source
-tree, give this option a list of the add-ons that you @emph{do} want
-used, like this: @samp{--enable-add-ons=nptl}
+Specify add-on packages to include in the build. If this option is
+specified with no list, it enables all the add-on packages it finds in
+the main source directory; this is the default behavior. You may
+specify an explicit list of add-ons to use in @var{list}, separated by
+spaces or commas (if you use spaces, remember to quote them from the
+shell). Each add-on in @var{list} can be an absolute directory name
+or can be a directory name relative to the main source directory, or
+relative to the build directory (that is, the current working directory).
+For example, @samp{--enable-add-ons=nptl,../glibc-libidn-2.4}.
@item --enable-kernel=@var{version}
This option is currently only useful on GNU/Linux systems. The
@code{make} but isn't. Look for error messages from @code{make}
containing @samp{***}. Those indicate that something is seriously wrong.
-The compilation process can take several hours. Expect at least two
-hours for the default configuration on i586 for GNU/Linux. For Hurd,
-times are much longer. Some complex modules may take a very long time
-to compile, as much as several minutes on slower machines. Do not
-panic if the compiler appears to hang.
+The compilation process can take a long time, depending on the
+configuration and the speed of your machine. Some complex modules may
+take a very long time to compile, as much as several minutes on slower
+machines. Do not panic if the compiler appears to hang.
If you want to run a parallel make, simply pass the @samp{-j} option
with an appropriate numeric parameter to @code{make}. You need a recent
You may also need these packages if you upgrade your source tree using
patches, although we try to avoid this.
-@node Supported Configurations
-@appendixsec Supported Configurations
-@cindex configurations, all supported
-
-The GNU C Library currently supports configurations that match the
-following patterns:
-
-@smallexample
-alpha@var{*}-@var{*}-linux
-arm-@var{*}-linux
-cris-@var{*}-linux
-hppa-@var{*}-linux
-i@var{x}86-@var{*}-gnu
-i@var{x}86-@var{*}-linux
-ia64-@var{*}-linux
-m68k-@var{*}-linux
-mips@var{*}-@var{*}-linux
-powerpc-@var{*}-linux
-s390-@var{*}-linux
-s390x-@var{*}-linux
-sparc-@var{*}-linux
-sparc64-@var{*}-linux
-x86_64-@var{*}-linux
-@end smallexample
-
-Former releases of this library (version 2.1 and/or 2.0) used to run on
-the following configurations:
-
-@smallexample
-arm-@var{*}-linuxaout
-arm-@var{*}-none
-@end smallexample
-
-Very early releases (version 1.09.1 and perhaps earlier versions) used
-to run on the following configurations:
-
-@smallexample
-alpha-dec-osf1
-alpha-@var{*}-linuxecoff
-i@var{x}86-@var{*}-bsd4.3
-i@var{x}86-@var{*}-isc2.2
-i@var{x}86-@var{*}-isc3.@var{n}
-i@var{x}86-@var{*}-sco3.2
-i@var{x}86-@var{*}-sco3.2v4
-i@var{x}86-@var{*}-sysv
-i@var{x}86-@var{*}-sysv4
-i@var{x}86-force_cpu386-none
-i@var{x}86-sequent-bsd
-i960-nindy960-none
-m68k-hp-bsd4.3
-m68k-mvme135-none
-m68k-mvme136-none
-m68k-sony-newsos3
-m68k-sony-newsos4
-m68k-sun-sunos4.@var{n}
-mips-dec-ultrix4.@var{n}
-mips-sgi-irix4.@var{n}
-sparc-sun-solaris2.@var{n}
-sparc-sun-sunos4.@var{n}
-@end smallexample
-
-Since no one has volunteered to test and fix these configurations,
-they are not supported at the moment. They probably don't compile;
-they definitely don't work anymore. Porting the library is not hard.
-If you are interested in doing a port, please contact the glibc
-maintainers. Start at @url{http://www.gnu.org/software/libc/} and
-read the references there on how to go about getting involved and
-contacting the developers.
-
-Valid cases of @samp{i@var{x}86} include @samp{i386}, @samp{i486},
-@samp{i586}, and @samp{i686}. All of those configurations produce a
-library that can run on this processor and newer processors. The GCC
-compiler by default generates code that's optimized for the machine it's
-configured for and will use the instructions available on that machine.
-For example if your GCC is configured for @samp{i686}, gcc will optimize
-for @samp{i686} and might issue some @samp{i686} specific instructions.
-To generate code for other models, you have to configure for that model
-and give GCC the appropriate @samp{-march=} and @samp{-mcpu=} compiler
-switches via @var{CFLAGS}.
-
@node Linux
@appendixsec Specific advice for GNU/Linux systems
@cindex upgrading from libc5
--- /dev/null
+/* Test for access to file, relative to open directory. Hurd version.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <hurd.h>
+#include <hurd/fd.h>
+
+int
+faccessat (fd, file, type, flag)
+ int fd;
+ const char *file;
+ int type;
+ int flag;
+{
+ error_t err;
+ file_t port;
+ int allowed, flags;
+
+ if ((flag & AT_EACCESS) == 0)
+ {
+ if (fd == AT_FDCWD || file[0] == '/')
+ return __access (file, type);
+ __set_errno (ENOTSUP); /* XXX later */
+ return -1;
+ }
+
+ port = __file_name_lookup_at (fd, flag &~ AT_EACCESS, file, 0, 0);
+ if (port == MACH_PORT_NULL)
+ return -1;
+
+ /* Find out what types of access we are allowed to this file. */
+ err = __file_check_access (port, &allowed);
+ __mach_port_deallocate (__mach_task_self (), port);
+ if (err)
+ return __hurd_fail (err);
+
+ flags = 0;
+ if (type & R_OK)
+ flags |= O_READ;
+ if (type & W_OK)
+ flags |= O_WRITE;
+ if (type & X_OK)
+ flags |= O_EXEC;
+
+ if (flags & ~allowed)
+ /* We are not allowed all the requested types of access. */
+ return __hurd_fail (EACCES);
+
+ return 0;
+}
--- /dev/null
+/* Change the protections of file relative to open directory. Hurd version.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <hurd.h>
+#include <hurd/fd.h>
+
+int
+fchmodat (fd, file, mode, flag)
+ int fd;
+ const char *file;
+ mode_t mode;
+ int flag;
+{
+ error_t err;
+ file_t port = __file_name_lookup_at (fd, flag, file, 0, 0);
+ if (port == MACH_PORT_NULL)
+ return -1;
+ err = __file_chmod (port, mode);
+ __mach_port_deallocate (__mach_task_self (), port);
+ if (err)
+ return __hurd_fail (err);
+ return 0;
+}
--- /dev/null
+/* Change owner and group of a file relative to open directory. Hurd version.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <hurd.h>
+#include <hurd/fd.h>
+
+/* Change the owner and group of FILE. */
+int
+fchownat (fd, file, owner, group, flag)
+ int fd;
+ const char *file;
+ uid_t owner;
+ gid_t group;
+ int flag;
+{
+ error_t err;
+ file_t port = __file_name_lookup_at (fd, flag, file, 0, 0);
+ if (port == MACH_PORT_NULL)
+ return -1;
+ err = __file_chown (port, owner, group);
+ __mach_port_deallocate (__mach_task_self (), port);
+ if (err)
+ return __hurd_fail (err);
+ return 0;
+}
--- /dev/null
+/* Get information about file named relative to open directory. Hurd version.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <stddef.h>
+#include <sys/stat.h>
+
+#include "xstatconv.c"
+
+int
+__fxstatat (int vers, int fd, const char *filename, struct stat *buf, int flag)
+{
+ struct stat64 buf64;
+ return (__fxstatat64 (vers, fd, filename, &buf64, flag)
+ ?: xstat64_conv (buf, &buf64));
+}
+libc_hidden_def (__fxstatat)
--- /dev/null
+/* Get information about file named relative to open directory. Hurd version.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <sys/stat.h>
+#include <hurd.h>
+#include <hurd/fd.h>
+
+/* Get information about the file descriptor FD in BUF. */
+int
+__fxstatat64 (int vers, int fd, const char *filename, struct stat64 *buf,
+ int flag)
+{
+ error_t err;
+ io_t port;
+
+ if (vers != _STAT_VER)
+ return __hurd_fail (EINVAL);
+
+ port = __file_name_lookup_at (fd, flag, filename, 0, 0);
+ if (port == MACH_PORT_NULL)
+ return -1;
+
+ err = __io_stat (port, buf);
+ __mach_port_deallocate (__mach_task_self (), port);
+
+ return __hurd_fail (err);
+}
--- /dev/null
+/* Make a link between file names relative to open directories. Hurd version.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <hurd.h>
+#include <hurd/fd.h>
+
+
+/* Make a link to FROM relative to FROMFD called TO relative to TOFD. */
+int
+linkat (fromfd, from, tofd, to, flags)
+ int fromfd;
+ const char *from;
+ int tofd;
+ const char *to;
+ int flags;
+{
+ error_t err;
+ file_t oldfile, linknode, todir;
+ char *toname;
+
+ oldfile = __file_name_lookup_at (fromfd, flags, from, 0, 0);
+ if (oldfile == MACH_PORT_NULL)
+ return -1;
+
+ /* The file_getlinknode RPC returns the port that should be passed to
+ the receiving filesystem (the one containing TODIR) in dir_link. */
+
+ err = __file_getlinknode (oldfile, &linknode);
+ __mach_port_deallocate (__mach_task_self (), oldfile);
+ if (err)
+ return __hurd_fail (err);
+
+ todir = __file_name_split_at (tofd, to, &toname);
+ if (todir != MACH_PORT_NULL)
+ {
+ err = __dir_link (todir, linknode, toname, 1);
+ __mach_port_deallocate (__mach_task_self (), todir);
+ }
+ __mach_port_deallocate (__mach_task_self (), linknode);
+ if (todir == MACH_PORT_NULL)
+ return -1;
+
+ if (err)
+ return __hurd_fail (err);
+ return 0;
+}
--- /dev/null
+/* Create a directory named relative to another open directory. Hurd version.
+ Copyright (C) 1991,1993,1994,1995,1996,1997,2002,2006
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <stddef.h>
+#include <sys/stat.h>
+#include <hurd.h>
+
+int
+mkdirat (fd, path, mode)
+ int fd;
+ const char *path;
+ mode_t mode;
+{
+ error_t err;
+ const char *name;
+ file_t parent = __directory_name_split (path, (char **) &name);
+ if (parent == MACH_PORT_NULL)
+ return -1;
+ err = __dir_mkdir (parent, name, mode & ~_hurd_umask);
+ __mach_port_deallocate (__mach_task_self (), parent);
+ if (err)
+ return __hurd_fail (err);
+ return 0;
+}
-/* Copyright (C) 1992,93,94,95,97,2000,2002 Free Software Foundation, Inc.
+/* Copyright (C) 1992,93,94,95,97,2000,2002,2006 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
weak_alias (__libc_open, __open)
libc_hidden_weak (__open)
weak_alias (__libc_open, open)
+
+/* open64 is just the same as open for us. */
+weak_alias (__libc_open, __libc_open64)
+weak_alias (__libc_open, __open64)
+libc_hidden_weak (_open64)
+weak_alias (__libc_open, open64)
--- /dev/null
+/* open64 is defined in open.c as an alias. */
--- /dev/null
+/* openat -- Open a file named relative to an open directory. Hurd version.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stdarg.h>
+#include <stddef.h>
+#include <sys/stat.h>
+#include <hurd.h>
+#include <hurd/fd.h>
+
+/* Open FILE with access OFLAG. Interpret relative paths relative to
+ the directory associated with FD. If OFLAG includes O_CREAT, a
+ third argument is the file protection. */
+int
+__openat (fd, file, oflag)
+ int fd;
+ const char *file;
+ int oflag;
+{
+ int mode;
+ io_t port;
+
+ if (oflag & O_CREAT)
+ {
+ va_list arg;
+ va_start (arg, oflag);
+ mode = va_arg (arg, int);
+ va_end (arg);
+ }
+ else
+ mode = 0;
+
+ port = __file_name_lookup_at (fd, 0, file, oflag, mode);
+ if (port == MACH_PORT_NULL)
+ return -1;
+
+ return _hurd_intern_fd (port, oflag, 1);
+}
+libc_hidden_def (__openat)
+weak_alias (__openat, openat)
+
+/* openat64 is just the same as openat for us. */
+weak_alias (__openat, __openat64)
+libc_hidden_weak (__openat64)
+weak_alias (__openat, openat64)
--- /dev/null
+/* openat64 is defined in openat.c as an alias. */
--- /dev/null
+/* Create a symbolic link named relative to an open directory. Hurd version.
+ Copyright (C) 1991,1992,1993,1994,1995,1996,1997,2006
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <hurd.h>
+#include <hurd/paths.h>
+#include <hurd/fd.h>
+#include <string.h>
+
+
+/* Make a link to FROM called TO relative to FD. */
+int
+symlinkat (from, fd, to)
+ const char *from;
+ int fd;
+ const char *to;
+{
+ error_t err;
+ file_t dir, node;
+ char *name;
+ const size_t len = strlen (from) + 1;
+ char buf[sizeof (_HURD_SYMLINK) + len];
+
+ /* A symlink is a file whose translator is "/hurd/symlink\0target\0". */
+
+ memcpy (buf, _HURD_SYMLINK, sizeof (_HURD_SYMLINK));
+ memcpy (&buf[sizeof (_HURD_SYMLINK)], from, len);
+
+ dir = __file_name_split_at (fd, to, &name);
+ if (dir == MACH_PORT_NULL)
+ return -1;
+
+ /* Create a new, unlinked node in the target directory. */
+ err = __dir_mkfile (dir, O_WRITE, 0777 & ~_hurd_umask, &node);
+
+ if (! err)
+ /* Set the node's translator to make it a symlink. */
+ err = __file_set_translator (node,
+ FS_TRANS_EXCL|FS_TRANS_SET,
+ FS_TRANS_EXCL|FS_TRANS_SET, 0,
+ buf, sizeof (_HURD_SYMLINK) + len,
+ MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND);
+
+ if (! err)
+ /* Link the node, now a valid symlink, into the target directory. */
+ err = __dir_link (dir, node, name, 1);
+
+ __mach_port_deallocate (__mach_task_self (), dir);
+ __mach_port_deallocate (__mach_task_self (), node);
+
+ if (err)
+ return __hurd_fail (err);
+ return 0;
+}
--- /dev/null
+/* unlinkat -- Remove a name relative to an open directory. Hurd version.
+ Copyright (C) 2006 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <fcntl.h>
+#include <stddef.h>
+#include <unistd.h>
+#include <hurd.h>
+#include <hurd/fd.h>
+
+
+/* Remove the link named NAME. */
+int
+unlinkat (fd, name, flag)
+ int fd;
+ const char *name;
+ int flag;
+{
+ error_t err;
+ file_t dir;
+ const char *file;
+
+ if ((flag &~ AT_REMOVEDIR) != 0)
+ {
+ __set_errno (EINVAL);
+ return -1;
+ }
+
+ dir = __directory_name_split_at (fd, name, (char **) &file);
+ if (dir == MACH_PORT_NULL)
+ return -1;
+
+ err = ((flag & AT_REMOVEDIR) ? __dir_rmdir : __dir_unlink) (dir, file);
+ __mach_port_deallocate (__mach_task_self (), dir);
+
+ if (err)
+ return __hurd_fail (err);
+ return 0;
+}
-/* Copyright (C) 1991,1992,1993,1994,1995,1996,1999,2002,2005
+/* Copyright (C) 1991,1992,1993,1994,1995,1996,1999,2002,2005,2006
Free Software Foundation, Inc.
This file is part of the GNU C Library.
02111-1307 USA. */
#include <errno.h>
-#include <sys/stat.h>
-#include <hurd.h>
-#include <hurd/paths.h>
#include <fcntl.h>
-#include "stdio-common/_itoa.h"
-#include <string.h>
+#include <stddef.h>
#include <sys/types.h>
+#include <sys/stat.h>
/* Create a device file named FILE_NAME, with permission and special bits MODE
int
__xmknod (int vers, const char *file_name, mode_t mode, dev_t *dev)
{
- error_t err;
- file_t dir, node;
- char *name;
- char buf[100], *bp;
- const char *translator;
- size_t len;
-
- if (vers != _MKNOD_VER)
- return __hurd_fail (EINVAL);
-
- if (S_ISCHR (mode))
- {
- translator = _HURD_CHRDEV;
- len = sizeof (_HURD_CHRDEV);
- }
- else if (S_ISBLK (mode))
- {
- translator = _HURD_BLKDEV;
- len = sizeof (_HURD_BLKDEV);
- }
- else if (S_ISFIFO (mode))
- {
- translator = _HURD_FIFO;
- len = sizeof (_HURD_FIFO);
- }
- else if (S_ISREG (mode))
- {
- translator = NULL;
- len = 0;
- }
- else
- {
- errno = EINVAL;
- return -1;
- }
-
- if (translator != NULL && ! S_ISFIFO (mode))
- {
- /* We set the translator to "ifmt\0major\0minor\0", where IFMT
- depends on the S_IFMT bits of our MODE argument, and MAJOR and
- MINOR are ASCII decimal (octal or hex would do as well)
- representations of our arguments. Thus the convention is that
- CHRDEV and BLKDEV translators are invoked with two non-switch
- arguments, giving the major and minor device numbers in %i format. */
-
- bp = buf + sizeof (buf);
- *--bp = '\0';
- bp = _itoa (minor (*dev), bp, 10, 0);
- *--bp = '\0';
- bp = _itoa (major (*dev), bp, 10, 0);
- memcpy (bp - len, translator, len);
- translator = bp - len;
- len = buf + sizeof (buf) - translator;
- }
-
- dir = __file_name_split (file_name, &name);
- if (dir == MACH_PORT_NULL)
- return -1;
-
- /* Create a new, unlinked node in the target directory. */
- err = __dir_mkfile (dir, O_WRITE, (mode & ~S_IFMT) & ~_hurd_umask, &node);
-
- if (! err && translator != NULL)
- /* Set the node's translator to make it a device. */
- err = __file_set_translator (node,
- FS_TRANS_EXCL | FS_TRANS_SET,
- FS_TRANS_EXCL | FS_TRANS_SET, 0,
- translator, len,
- MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND);
-
- if (! err)
- /* Link the node, now a valid device, into the target directory. */
- err = __dir_link (dir, node, name, 1);
-
- __mach_port_deallocate (__mach_task_self (), dir);
- __mach_port_deallocate (__mach_task_self (), node);
-
- if (err)
- return __hurd_fail (err);
- return 0;
+ return __xmknodat (vers, AT_FDCWD, file_name, mode, dev);
}
libc_hidden_def (__xmknod)
--- /dev/null
+/* Create a device file relative to an open directory. Hurd version.
+ Copyright (C) 1991,1992,1993,1994,1995,1996,1999,2002,2005,2006
+ Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
+
+#include <errno.h>
+#include <sys/stat.h>
+#include <hurd.h>
+#include <hurd/fd.h>
+#include <hurd/paths.h>
+#include <fcntl.h>
+#include "stdio-common/_itoa.h"
+#include <string.h>
+#include <sys/types.h>
+
+/* Create a device file named PATH relative to FD, with permission and
+ special bits MODE and device number DEV (which can be constructed
+ from major and minor device numbers with the `makedev' macro
+ above). */
+int
+__xmknodat (int vers, int fd, const char *path, mode_t mode, dev_t *dev)
+{
+ error_t err;
+ file_t dir, node;
+ char *name;
+ char buf[100], *bp;
+ const char *translator;
+ size_t len;
+
+ if (vers != _MKNOD_VER)
+ return __hurd_fail (EINVAL);
+
+ if (S_ISCHR (mode))
+ {
+ translator = _HURD_CHRDEV;
+ len = sizeof (_HURD_CHRDEV);
+ }
+ else if (S_ISBLK (mode))
+ {
+ translator = _HURD_BLKDEV;
+ len = sizeof (_HURD_BLKDEV);
+ }
+ else if (S_ISFIFO (mode))
+ {
+ translator = _HURD_FIFO;
+ len = sizeof (_HURD_FIFO);
+ }
+ else if (S_ISREG (mode))
+ {
+ translator = NULL;
+ len = 0;
+ }
+ else
+ {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (translator != NULL && ! S_ISFIFO (mode))
+ {
+ /* We set the translator to "ifmt\0major\0minor\0", where IFMT
+ depends on the S_IFMT bits of our MODE argument, and MAJOR and
+ MINOR are ASCII decimal (octal or hex would do as well)
+ representations of our arguments. Thus the convention is that
+ CHRDEV and BLKDEV translators are invoked with two non-switch
+ arguments, giving the major and minor device numbers in %i format. */
+
+ bp = buf + sizeof (buf);
+ *--bp = '\0';
+ bp = _itoa (minor (*dev), bp, 10, 0);
+ *--bp = '\0';
+ bp = _itoa (major (*dev), bp, 10, 0);
+ memcpy (bp - len, translator, len);
+ translator = bp - len;
+ len = buf + sizeof (buf) - translator;
+ }
+
+ dir = __file_name_split_at (fd, path, &name);
+ if (dir == MACH_PORT_NULL)
+ return -1;
+
+ /* Create a new, unlinked node in the target directory. */
+ err = __dir_mkfile (dir, O_WRITE, (mode & ~S_IFMT) & ~_hurd_umask, &node);
+
+ if (! err && translator != NULL)
+ /* Set the node's translator to make it a device. */
+ err = __file_set_translator (node,
+ FS_TRANS_EXCL | FS_TRANS_SET,
+ FS_TRANS_EXCL | FS_TRANS_SET, 0,
+ translator, len,
+ MACH_PORT_NULL, MACH_MSG_TYPE_COPY_SEND);
+
+ if (! err)
+ /* Link the node, now a valid device, into the target directory. */
+ err = __dir_link (dir, node, name, 1);
+
+ __mach_port_deallocate (__mach_task_self (), dir);
+ __mach_port_deallocate (__mach_task_self (), node);
+
+ if (err)
+ return __hurd_fail (err);
+ return 0;
+}
static long int linux_sysconf (int name);
-static long int
+static long int __attribute__ ((noinline))
handle_i486 (int name)
{
/* The processor only has a unified level 1 cache of 8k. */
}
-static long int
+static long int __attribute__ ((noinline))
handle_intel (int name, unsigned int maxidx)
{
if (maxidx < 2)
}
-static long int
+static long int __attribute__ ((noinline))
handle_amd (int name)
{
unsigned int eax;
long int
__sysconf (int name)
{
- if (name == _SC_CPUTIME || name == _SC_THREAD_CPUTIME)
- {
-#if HP_TIMING_AVAIL
- // XXX We can add here test for machines which cannot support a
- // XXX usable TSC.
- return 200112L;
-#else
- return -1;
-#endif
- }
-
/* All the remainder, except the cache information, is handled in
the generic code. */
if (name < _SC_LEVEL1_ICACHE_SIZE || name > _SC_LEVEL4_CACHE_LINESIZE)
}
-static long int
+static long int __attribute__ ((noinline))
handle_intel (int name, unsigned int maxidx)
{
assert (maxidx >= 2);
}
-static long int
+static long int __attribute__ ((noinline))
handle_amd (int name)
{
unsigned int eax;
long int
__sysconf (int name)
{
- if (name == _SC_CPUTIME || name == _SC_THREAD_CPUTIME)
- {
- /* XXX Test whether TSC is usable. */
- return 200112L;
- }
-
/* We only handle the cache information here (for now). */
if (name < _SC_LEVEL1_ICACHE_SIZE || name > _SC_LEVEL4_CACHE_LINESIZE)
return linux_sysconf (name);
/* This file just defines the current version number of libc. */
#define RELEASE "development"
-#define VERSION "2.3.91"
+#define VERSION "2.4"