1996-05-11 06:55:26 +08:00
|
|
|
|
Frequently Asked Question on GNU C Library
|
|
|
|
|
|
1996-05-25 05:42:06 +08:00
|
|
|
|
As every FAQ this one also tries to answer questions the user might have
|
1996-07-06 19:01:20 +08:00
|
|
|
|
when using the package. Please make sure you read this before sending
|
1996-05-25 05:42:06 +08:00
|
|
|
|
questions or bug reports to the maintainers.
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
The GNU C Library is very complex. The building process exploits the
|
|
|
|
|
features available in tools generally available. But many things can
|
|
|
|
|
only be done using GNU tools. Also the code is sometimes hard to
|
|
|
|
|
understand because it has to be portable but on the other hand must be
|
|
|
|
|
fast. But you need not understand the details to use GNU C Library.
|
|
|
|
|
This will only be necessary if you intend to contribute or change it.
|
|
|
|
|
|
1996-05-25 05:42:06 +08:00
|
|
|
|
If you have any questions you think should be answered in this document,
|
|
|
|
|
please let me know.
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
--drepper@cygnus.com
|
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
1996-05-25 05:42:06 +08:00
|
|
|
|
[Q1] ``What systems does the GNU C Library run on?''
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
1996-05-25 05:42:06 +08:00
|
|
|
|
[Q2] ``What compiler do I need to build GNU libc?''
|
1996-05-25 04:16:39 +08:00
|
|
|
|
|
1996-05-25 05:42:06 +08:00
|
|
|
|
[Q3] ``When starting make I get only error messages.
|
1996-05-25 04:16:39 +08:00
|
|
|
|
What's wrong?''
|
|
|
|
|
|
|
|
|
|
[Q4] ``After I changed configure.in I get `Autoconf version X.Y.
|
|
|
|
|
or higher is required for this script'. What can I do?''
|
|
|
|
|
|
|
|
|
|
[Q5] ``Do I need a special linker or archiver?''
|
|
|
|
|
|
|
|
|
|
[Q6] ``Do I need some more things to compile GNU C Library?''
|
|
|
|
|
|
1996-06-22 23:00:08 +08:00
|
|
|
|
[Q7] ``When I run `nm -u libc.so' on the produced library I still
|
|
|
|
|
find unresolved symbols? Can this be ok?''
|
1996-05-25 04:16:39 +08:00
|
|
|
|
|
1996-07-09 01:45:03 +08:00
|
|
|
|
[Q8] ``Can I replace the libc on my Linux system with GNU libc?''
|
|
|
|
|
|
|
|
|
|
[Q9] ``I expect GNU libc to be 100% source code compatible with
|
1996-05-25 04:16:39 +08:00
|
|
|
|
the old Linux based GNU libc. Why isn't it like this?''
|
|
|
|
|
|
1996-07-09 01:45:03 +08:00
|
|
|
|
[Q10] ``Why does getlogin() always return NULL on my Linux box?''
|
1996-06-22 23:00:08 +08:00
|
|
|
|
|
1996-07-09 01:45:03 +08:00
|
|
|
|
[Q11] ``Where are the DST_* constants found in <sys/time.h> on many
|
1996-07-06 19:01:20 +08:00
|
|
|
|
systems?''
|
1996-07-12 08:43:28 +08:00
|
|
|
|
|
|
|
|
|
[Q12] ``The `gencat' utility cannot process the input which are
|
|
|
|
|
successfully used on my Linux libc based system. Why?''
|
1996-07-16 14:38:54 +08:00
|
|
|
|
|
|
|
|
|
[Q13] ``How do I configure GNU libc so that the essential libraries
|
|
|
|
|
like libc.so go into /lib and the other into /usr/lib?''
|
update from main archive 960921
Sun Sep 22 03:40:52 1996 Ulrich Drepper <drepper@cygnus.com>
* resolv/resolv.h: Update to bind-4.9.5-T4B.
* resolv/base64.c: Likewise.
* resolv/res_debug.c: Likewise.
* resolv/res_query.c: Likewise.
* resolv/gethnamaddr.c: Likewise.
* nss/nss_dns/dns-host.c: Likewise.
* resolv/res_comp.c: Likewise.
* resolv/res_send.c: Likewise.
* resolv/arpa/nameser.h: Likewise. Attention: MAXDNAME is much
higher now.
* resolv/Banner: New file.
* resolv/Makefile (distribute): Add Banner.
Sat Sep 21 19:15:24 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/stub/getsysstats.c: New file.
* sysdeps/unix/sysv/linux/getsysstats.c: New file.
* misc/Makefile (headers): Add sys/sysinfo.h.
(routines): Add getsysstats.
* sysdeps/unix/sysv/linux/Makefile [$(subdir)==misc]
(sysdep_headers): Remove sys/sysinfo.h.
* sysdeps/generic/sys/sysinfo.h: New file.
* sysdeps/unix/sysv/linux/sys/sysinfo.h: Add prototype for get_nprocs,
get_phys_pages, and get_avphys_pages.
* misc/Makefile (routines): Add mntent_r.
* misc/mntent_r.c: New file.
* misc/mntent.c: Remove all functions but getmntent and use
__getmntent_r.
* misc/mntent.h: Add prototype for __getmntent_r.
* misc/fstab.c: Use __getmntent_r function instead of getmntent.
This will not clobber the state in getmntent.
* sysdeps/generic/confname.h: Add _SC_PROCESSORS_CONF,
_SC_NPROCESSORS_ONLN, _SC_PHYS_PAGES, _SC_AVPHYS_PAGES,
_SC_ATEXIT_MAX, and _SC_PASS_MAX.
* sysdeps/stub/sysconf.c: Add handling _SC_PROCESSORS_CONF and
_SC_NPROCESSORS_ONLN by calling __get_nprocs, _SC_PHYS_PAGES by
calling __get_phys_pages, _SY_AVPHYS_PAGES by calling
__get_avphys_pages, _SC_ATEXIT_MAX and _SC_PASS_MAX.
* sysdeps/posix/sysconf.c: Likewise.
* posix/getconf.c (vars): Add _NPROCESSORS_CONF, _NPROCESSORS_ONLN,
_PHYS_PAGES, _AVPHYS_PAGES, ATEXIT_MAX, and PASS_MAX entries.
Sat Sep 21 05:20:36 1996 Ulrich Drepper <drepper@cygnus.com>
* version.h (VERSION): Bump to 1.95.
* Make-dist (+tsrcs): Don't filter out files in subdirs which
match files in the sysdeps hierachy (welcome back,
sys/syscall.h!).
* resolv/Makefile (libresolv-routines): Remove getnetnamad.
Sat Sep 21 03:00:19 1996 Ulrich Drepper <drepper@cygnus.com>
* locale/loadlocale.c (_nl_free_locale): Remove function.
* locale/localeinfo.h: Remove prototype for _nl_free_locale.
* locale/setlocale.c (setlocale): Don't free locale data of
categories which succeeded to load after a wrong or missing data
file was observed.
* locale/setlocale (setlocale): Initialize NEWNAME correctly so
that it works even when the locale data is not used.
* stdlib/random_r.c: Fix typo in comment.
* stdlib/drand48-iter.c: Likewise.
* stdlib/drand48.c: Likewise.
* stdlib/erand48.c: Likewise.
* stdlib/jrand48.c: Likewise.
* stdlib/lcong48.c: Likewise.
* stdlib/lrand48.c: Likewise.
* stdlib/mrand48.c: Likewise.
* stdlib/nrand48.c: Likewise.
* stdlib/random.c: Likewise.
* stdlib/seed48.c: Likewise.
* stdlib/srand48.c: Likewise.
* misc/search.h: Likewise.
* misc/hsearch.c: Likewise.
* misc/hsearch_r.c: Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep.S (__errno_location):
Thu Sep 19 23:36:19 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* hurd/hurdinit.c (__libc_argv): Provide common decl.
(_hurd_setproc): Don't declare __libc_argv here.
1996-09-22 11:06:42 +08:00
|
|
|
|
|
|
|
|
|
[Q14] ``When linking with the new libc I get unresolved symbols
|
|
|
|
|
`crypt' and `setkey'. Why aren't these functions in the
|
|
|
|
|
libc anymore?''
|
|
|
|
|
|
|
|
|
|
[Q15] ``What are these `add-ons'?''
|
1996-05-25 04:16:39 +08:00
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
1996-05-25 05:42:06 +08:00
|
|
|
|
[Q1] ``What systems does the GNU C Library run on?''
|
1996-05-25 04:16:39 +08:00
|
|
|
|
|
1996-05-11 06:55:26 +08:00
|
|
|
|
[A1] {UD} This is difficult to answer. The file `README' lists the
|
|
|
|
|
architectures GNU libc is known to run *at some time*. This does not
|
|
|
|
|
mean that it still can be compiled and run on them in the moment.
|
|
|
|
|
|
|
|
|
|
The systems glibc is known to work on in the moment and most probably
|
|
|
|
|
in the future are:
|
|
|
|
|
|
|
|
|
|
*-*-gnu GNU Hurd
|
|
|
|
|
i[3456]86-*-linux Linux-2.0 on Intel
|
1996-06-22 23:00:08 +08:00
|
|
|
|
m68k-*-linux Linux-2.0 on Motorola 680x0
|
|
|
|
|
alpha-*-linux Linux-2.0 on DEC Alpha
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
Other Linux platforms are also on the way to be supported but I need
|
|
|
|
|
some success reports first.
|
|
|
|
|
|
|
|
|
|
If you have a system not listed above (or in the `README' file) and
|
|
|
|
|
you are really interested in porting it, contact
|
|
|
|
|
|
1996-05-25 05:42:06 +08:00
|
|
|
|
<bug-glibc@prep.ai.mit.edu>
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
1996-05-25 05:42:06 +08:00
|
|
|
|
[Q2] ``What compiler do I need to build GNU libc?''
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
[A2] {UD} It is (almost) impossible to compile GNU C Library using a
|
|
|
|
|
different compiler than GNU CC. A lot of extensions of GNU CC are
|
|
|
|
|
used to increase the portability and speed.
|
|
|
|
|
|
|
|
|
|
But this does not mean you have to use GNU CC for using the GNU C
|
|
|
|
|
Library. In fact you should be able to use the native C compiler
|
|
|
|
|
because the success only depends on the binutils: the linker and
|
|
|
|
|
archiver.
|
|
|
|
|
|
|
|
|
|
The GNU CC is found like all other GNU packages on
|
|
|
|
|
ftp://prep.ai.mit.edu/pub/gnu
|
1996-06-22 23:00:08 +08:00
|
|
|
|
or better one of the many mirror sites.
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
You always should try to use the latest official release. Older
|
|
|
|
|
versions might not have all the features GNU libc could use.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
1996-06-22 23:00:08 +08:00
|
|
|
|
[Q3] ``When starting `make' I get only errors messages.
|
1996-05-11 06:55:26 +08:00
|
|
|
|
What's wrong?''
|
|
|
|
|
|
|
|
|
|
[A3] {UD} You definitely need GNU make to translate GNU libc. No
|
|
|
|
|
other make program has the needed functionality.
|
|
|
|
|
|
|
|
|
|
Versions before 3.74 have bugs which prevent correct execution so you
|
|
|
|
|
should upgrade to the latest version before starting the compilation.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
|
|
|
[Q4] ``After I changed configure.in I get `Autoconf version X.Y.
|
|
|
|
|
or higher is required for this script'. What can I do?''
|
|
|
|
|
|
|
|
|
|
[A4] {UD} You have to get the specified autoconf version (or a later)
|
|
|
|
|
from your favourite mirror of prep.ai.mit.edu.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
|
|
|
[Q5] ``Do I need a special linker or archiver?''
|
|
|
|
|
|
Tue May 28 04:38:10 1996 Ulrich Drepper <drepper@cygnus.com>
* limits.h: Change MB_LEN_MAX to 6. A 31-bit ISO 10646
character in UTF-8 encoding has that many bytes.
* locale/langinfo.h: New element _NL_CTYPE_MB_CUR_MAX.
* locale/categories.def: Add description of field _NL_CTYPE_MB_CUR_MAX.
* locale/Makefile (routines): Add mb_cur_max.
* locale/mb_cur_max.c: New file. This function gets called
when the macro MB_CUR_MAX is used.
* locale/C-ctype.c: Initialize new mb_cur_max field.
* locale/localeinfo.h: Change magic value because of incompatible
change.
* locale/programs/ld-ctype.c: Determine value of mb_cur_max
according to current character set and write it out with the rest.
* stdlib/stdlib.h (MB_CUR_MAX): Not constant anymore. Get value
according to currently used locale for catefory LC_CTYPE by
calling the function __ctype_get_mb_cur_max.
Tue May 28 03:27:46 1996 Ulrich Drepper <drepper@cygnus.com>
* FAQ: Fix some typos.
Tell that for Linux the kernel header files are necessary.
* PROJECTS: New file. List of open jobs for glibc.
* Makefile (distribute): Add PROJECTS.
* crypt/GNUmakefile (headers): New variable. Mention crypt.h.
* crypt/crypt.h: Header for crypt functions.
* elf/elf.h: Add some new constants from recent Cygnus ELF
header files.
* login/getutid_r.c: Test for correct type.
Don't depend on ut_type and ut_id unless _HAVE_UT_TYPE and
_HAVE_UT_ID resp. are defined.
Make really compliant with specification.
* login/getutline_r.c, login/pututline_r.c: Don't depend on
ut_type and ut_id unless _HAVE_UT_TYPE and _HAVE_UT_ID resp. are
defined.
Make really compliant with specification.
* login/setutent_r.c: Don't depend on ut_type and ut_id unless
_HAVE_UT_TYPE and _HAVE_UT_ID resp. are defined.
* login/login.c, login/logout.c, login/logwtmp.c: Complete
rewrite. Now based on getut*/setut* functions.
* stdlib/strtol.c: Undo changes of Wed May 22 01:48:54 1996.
This prevented using this file in other GNU packages.
* sysdeps/gnu/utmpbits.h: Define _HAVE_UT_TYPE, _HAVE_UT_ID,
and _HAVE_UT_TV because struct utmp has these members.
* sysdeps/libm-i387/e_exp.S: Correct exp(+-Inf) case.
* utmp.h: New file. Wrapper around login/utmp.h.
* elf/dl-error.c (struct catch): New type.
(catch): New static variable, struct catch *.
(catch_env, signalled_errstring, signalled_objname): Variables removed.
(_dl_signal_error): If CATCH is non-null, set its errstring and
objname members and jump to CATCH->env. If it is null, call
_dl_sysdep_fatal with a standard message.
* elf/rtld.c (dl_main): Explode `doit' function into dl_main's body.
No longer use _dl_catch_error.
1996-05-29 12:48:04 +08:00
|
|
|
|
[A5] {UD} If your native versions are not too buggy you can probably
|
|
|
|
|
work with them. But GNU libc works best with GNU binutils.
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
On systems where the native linker does not support weak symbols you
|
|
|
|
|
will not get a really ISO C compliant C library. Generally speaking
|
|
|
|
|
you should use the GNU binutils if they provide at least the same
|
|
|
|
|
functionality as your system's tools.
|
|
|
|
|
|
1996-05-25 05:42:06 +08:00
|
|
|
|
Always get the newest release of GNU binutils available.
|
1996-06-22 23:00:08 +08:00
|
|
|
|
Older releases are known to have bugs that affect building the GNU C
|
|
|
|
|
Library.
|
1996-05-25 05:42:06 +08:00
|
|
|
|
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
|
|
|
[Q6] ``Do I need some more things to compile GNU C Library?''
|
|
|
|
|
|
|
|
|
|
[A6] {UD} Yes, there are some more :-).
|
|
|
|
|
|
1996-06-22 23:00:08 +08:00
|
|
|
|
* GNU gettext; the GNU libc is internationalized and partly localized.
|
|
|
|
|
For bringing the messages for the different languages in the needed
|
|
|
|
|
form the tools from the GNU gettext package are necessary. See
|
|
|
|
|
ftp://prep.ai.mit.edu/pub/gnu or better any mirror site.
|
|
|
|
|
|
1996-07-12 08:43:28 +08:00
|
|
|
|
* lots of diskspace (for i?86-linux this means, e.g., ~70MB).
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
You should avoid compiling on a NFS mounted device. This is very
|
|
|
|
|
slow.
|
|
|
|
|
|
1996-07-12 08:43:28 +08:00
|
|
|
|
* plenty of time (approx 1h for i?86-linux on i586@133 or 2.5h on
|
1996-07-09 01:45:03 +08:00
|
|
|
|
i486@66 or 4.5h on i486@33).
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
1996-06-22 23:00:08 +08:00
|
|
|
|
If you have some more measurements let me know.
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
Thu May 30 11:24:05 1996 Roland McGrath <roland@delasyd.gnu.ai.mit.edu>
* po/header.pot: Replace with exact boilerplate pinard dictates.
* sysdeps/i386/strtok.S (Lillegal_argument): Remove this code to set
errno and the check that jumped to it.
* sysdeps/mach/hurd/Makefile (errnos.d): Use $(sed-remove-objpfx).
Thu May 30 03:21:57 1996 Ulrich Drepper <drepper@cygnus.com>
* FAQ: Document need of gperf program for developers.
* elf/elf.h: Fix typos in comments.
* libio/stdio.h [!__STRICT_ANSI__ || _POSIX_SOURCE]: Add
prototypes for `ctermid' and `cuserid'.
* locale/programs/locale.c: Switch to user selected locale
before printing variables.
* math/Makefile [$(long-double-fcts)==yes]: Define long-m-routines
and long-c-routines. Only if the `long double' data type is
available we need to compile the functions.
(libm-routines): Add $(long-m-routines).
(routines): Remove isinfl, isnanl. Use new file s_isinfl and
s_isnanl instead if `long double' is available.
* math/math.h: Include <mathcalls.h> again to define `long double'
functions.
* math/math_private.h: Define data types, prototypes and access
macros for `long double'.
* stdlib/stdlib.h: Add prototypes for `strtoll' and `strtoull'.
[GCC2 && OPTIMIZE]: Define strto{,u}ll as inline function which
calls __strto{,u}q_internal.
* stdlib/strfmon.c: Replace PTR by `void *'.
* stdlib/strtoq.c: Define strtoll as weak alias.
* stdlib/strtouq.c: Define strtoull as weak alias.
* string/tester.c: Correct `strsep' test.
* sysdeps/generic/strsep.c: Make compatible with BSD version.
Trailing characters of skip set are not skipped. In this case
empty tokens are returned.
* sysdeps/i386/isinfl.c, sysdeps/i386/isnanl.c,
sysdeps/ieee754/isinf.c, sysdeps/ieee754/isinfl.c,
sysdeps/ieee754/isnan.c, sysdeps/ieee754/isnanl.c: Removed. We
now use the versions part of libm.
* sysdeps/i386/strsep.S: Removed. Generic C version is of
similar speed.
* sysdeps/i386/strtok.S: Remove support for `strsep'.
* sysdeps/libm-i387/e_acosl.S, sysdeps/libm-i387/s_ceill.S,
sysdeps/libm-i387/s_copysignl.S, sysdeps/libm-i387/s_finitel.S,
sysdeps/libm-i387/s_floorl.S, sysdeps/libm-i387/s_isinfl.c,
sysdeps/libm-i387/s_isnanl.c, sysdeps/libm-i387/s_nextafterl.c,
sysdeps/libm-i387/s_rintl.S, sysdeps/libm-i387/s_significandl.S:
New i387 specific math functions implementing `long double'
versions.
* sysdeps/libm-ieee754/s_ceill.c,
sysdeps/libm-ieee754/s_copysignl.c,
sysdeps/libm-ieee754/s_fabsl.c, sysdeps/libm-ieee754/s_finitel.c,
sysdeps/libm-ieee754/s_floorl.c, sysdeps/libm-ieee754/s_isinfl.c,
sysdeps/libm-ieee754/s_isnanl.c,
sysdeps/libm-ieee754/s_nextafterl.c,
sysdeps/libm-ieee754/s_rintl.c, sysdeps/libm-ieee754/s_scalbnl.c,
sysdeps/libm-ieee754/s_significandl.c: New generic `long double'
versions of libm functions.
* sysdeps/libm-i387/e_exp.S: Add a few comments to explain the
Intel FPU nonsense.
* sysdeps/libm-i387/s_ceil.S, sysdeps/libm-i387/s_ceilf.S,
sysdeps/libm-i387/s_floor.S, sysdeps/libm-i387/s_floorf.S: Correct
handling of local variables. The old version created a stack
frame but stored the values outside.
* sysdeps/libm-ieee754/s_isinf.c, sysdeps/libm-ieee754/s_isnan.c
[!NO_LONG_DOUBLE]: Define alias with `long double' versions name.
* login/pututline_r.c: Include sys/stat.h. Fix typos.
according to currently used locale for category LC_CTYPE by
inet_nsap_ntoa. Now in <arpa/inet.h>.
_IO_dup2 to contain complete parameter list.
1996-05-31 00:12:42 +08:00
|
|
|
|
* Some files depend on special tools. E.g., files ending in .gperf
|
|
|
|
|
need a `gperf' program. The GNU version (part of libg++) is known
|
|
|
|
|
to work while some vendor versions do not.
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
Tue May 28 04:38:10 1996 Ulrich Drepper <drepper@cygnus.com>
* limits.h: Change MB_LEN_MAX to 6. A 31-bit ISO 10646
character in UTF-8 encoding has that many bytes.
* locale/langinfo.h: New element _NL_CTYPE_MB_CUR_MAX.
* locale/categories.def: Add description of field _NL_CTYPE_MB_CUR_MAX.
* locale/Makefile (routines): Add mb_cur_max.
* locale/mb_cur_max.c: New file. This function gets called
when the macro MB_CUR_MAX is used.
* locale/C-ctype.c: Initialize new mb_cur_max field.
* locale/localeinfo.h: Change magic value because of incompatible
change.
* locale/programs/ld-ctype.c: Determine value of mb_cur_max
according to current character set and write it out with the rest.
* stdlib/stdlib.h (MB_CUR_MAX): Not constant anymore. Get value
according to currently used locale for catefory LC_CTYPE by
calling the function __ctype_get_mb_cur_max.
Tue May 28 03:27:46 1996 Ulrich Drepper <drepper@cygnus.com>
* FAQ: Fix some typos.
Tell that for Linux the kernel header files are necessary.
* PROJECTS: New file. List of open jobs for glibc.
* Makefile (distribute): Add PROJECTS.
* crypt/GNUmakefile (headers): New variable. Mention crypt.h.
* crypt/crypt.h: Header for crypt functions.
* elf/elf.h: Add some new constants from recent Cygnus ELF
header files.
* login/getutid_r.c: Test for correct type.
Don't depend on ut_type and ut_id unless _HAVE_UT_TYPE and
_HAVE_UT_ID resp. are defined.
Make really compliant with specification.
* login/getutline_r.c, login/pututline_r.c: Don't depend on
ut_type and ut_id unless _HAVE_UT_TYPE and _HAVE_UT_ID resp. are
defined.
Make really compliant with specification.
* login/setutent_r.c: Don't depend on ut_type and ut_id unless
_HAVE_UT_TYPE and _HAVE_UT_ID resp. are defined.
* login/login.c, login/logout.c, login/logwtmp.c: Complete
rewrite. Now based on getut*/setut* functions.
* stdlib/strtol.c: Undo changes of Wed May 22 01:48:54 1996.
This prevented using this file in other GNU packages.
* sysdeps/gnu/utmpbits.h: Define _HAVE_UT_TYPE, _HAVE_UT_ID,
and _HAVE_UT_TV because struct utmp has these members.
* sysdeps/libm-i387/e_exp.S: Correct exp(+-Inf) case.
* utmp.h: New file. Wrapper around login/utmp.h.
* elf/dl-error.c (struct catch): New type.
(catch): New static variable, struct catch *.
(catch_env, signalled_errstring, signalled_objname): Variables removed.
(_dl_signal_error): If CATCH is non-null, set its errstring and
objname members and jump to CATCH->env. If it is null, call
_dl_sysdep_fatal with a standard message.
* elf/rtld.c (dl_main): Explode `doit' function into dl_main's body.
No longer use _dl_catch_error.
1996-05-29 12:48:04 +08:00
|
|
|
|
* When compiling for Linux:
|
|
|
|
|
|
|
|
|
|
+ the header files of the Linux kernel must be available in the
|
|
|
|
|
search path of the CPP as <linux/*.h> and <asm/*.h>.
|
|
|
|
|
|
1996-06-22 23:00:08 +08:00
|
|
|
|
* Some files depend on special tools. E.g., files ending in .gperf
|
|
|
|
|
need a `gperf' program. The GNU version (part of libg++) is known
|
|
|
|
|
to work while some vendor versions do not.
|
Tue May 28 04:38:10 1996 Ulrich Drepper <drepper@cygnus.com>
* limits.h: Change MB_LEN_MAX to 6. A 31-bit ISO 10646
character in UTF-8 encoding has that many bytes.
* locale/langinfo.h: New element _NL_CTYPE_MB_CUR_MAX.
* locale/categories.def: Add description of field _NL_CTYPE_MB_CUR_MAX.
* locale/Makefile (routines): Add mb_cur_max.
* locale/mb_cur_max.c: New file. This function gets called
when the macro MB_CUR_MAX is used.
* locale/C-ctype.c: Initialize new mb_cur_max field.
* locale/localeinfo.h: Change magic value because of incompatible
change.
* locale/programs/ld-ctype.c: Determine value of mb_cur_max
according to current character set and write it out with the rest.
* stdlib/stdlib.h (MB_CUR_MAX): Not constant anymore. Get value
according to currently used locale for catefory LC_CTYPE by
calling the function __ctype_get_mb_cur_max.
Tue May 28 03:27:46 1996 Ulrich Drepper <drepper@cygnus.com>
* FAQ: Fix some typos.
Tell that for Linux the kernel header files are necessary.
* PROJECTS: New file. List of open jobs for glibc.
* Makefile (distribute): Add PROJECTS.
* crypt/GNUmakefile (headers): New variable. Mention crypt.h.
* crypt/crypt.h: Header for crypt functions.
* elf/elf.h: Add some new constants from recent Cygnus ELF
header files.
* login/getutid_r.c: Test for correct type.
Don't depend on ut_type and ut_id unless _HAVE_UT_TYPE and
_HAVE_UT_ID resp. are defined.
Make really compliant with specification.
* login/getutline_r.c, login/pututline_r.c: Don't depend on
ut_type and ut_id unless _HAVE_UT_TYPE and _HAVE_UT_ID resp. are
defined.
Make really compliant with specification.
* login/setutent_r.c: Don't depend on ut_type and ut_id unless
_HAVE_UT_TYPE and _HAVE_UT_ID resp. are defined.
* login/login.c, login/logout.c, login/logwtmp.c: Complete
rewrite. Now based on getut*/setut* functions.
* stdlib/strtol.c: Undo changes of Wed May 22 01:48:54 1996.
This prevented using this file in other GNU packages.
* sysdeps/gnu/utmpbits.h: Define _HAVE_UT_TYPE, _HAVE_UT_ID,
and _HAVE_UT_TV because struct utmp has these members.
* sysdeps/libm-i387/e_exp.S: Correct exp(+-Inf) case.
* utmp.h: New file. Wrapper around login/utmp.h.
* elf/dl-error.c (struct catch): New type.
(catch): New static variable, struct catch *.
(catch_env, signalled_errstring, signalled_objname): Variables removed.
(_dl_signal_error): If CATCH is non-null, set its errstring and
objname members and jump to CATCH->env. If it is null, call
_dl_sysdep_fatal with a standard message.
* elf/rtld.c (dl_main): Explode `doit' function into dl_main's body.
No longer use _dl_catch_error.
1996-05-29 12:48:04 +08:00
|
|
|
|
|
1996-05-11 06:55:26 +08:00
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
1996-06-22 23:00:08 +08:00
|
|
|
|
[Q7] ``When I run `nm -u libc.so' on the produced library I still
|
|
|
|
|
find unresolved symbols? Can this be ok?''
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
[A7] {UD} Yes, this is ok. There can be several kinds of unresolved
|
|
|
|
|
symbols:
|
|
|
|
|
|
|
|
|
|
* magic symbols automatically generated by the linker. Names are
|
Tue May 28 04:38:10 1996 Ulrich Drepper <drepper@cygnus.com>
* limits.h: Change MB_LEN_MAX to 6. A 31-bit ISO 10646
character in UTF-8 encoding has that many bytes.
* locale/langinfo.h: New element _NL_CTYPE_MB_CUR_MAX.
* locale/categories.def: Add description of field _NL_CTYPE_MB_CUR_MAX.
* locale/Makefile (routines): Add mb_cur_max.
* locale/mb_cur_max.c: New file. This function gets called
when the macro MB_CUR_MAX is used.
* locale/C-ctype.c: Initialize new mb_cur_max field.
* locale/localeinfo.h: Change magic value because of incompatible
change.
* locale/programs/ld-ctype.c: Determine value of mb_cur_max
according to current character set and write it out with the rest.
* stdlib/stdlib.h (MB_CUR_MAX): Not constant anymore. Get value
according to currently used locale for catefory LC_CTYPE by
calling the function __ctype_get_mb_cur_max.
Tue May 28 03:27:46 1996 Ulrich Drepper <drepper@cygnus.com>
* FAQ: Fix some typos.
Tell that for Linux the kernel header files are necessary.
* PROJECTS: New file. List of open jobs for glibc.
* Makefile (distribute): Add PROJECTS.
* crypt/GNUmakefile (headers): New variable. Mention crypt.h.
* crypt/crypt.h: Header for crypt functions.
* elf/elf.h: Add some new constants from recent Cygnus ELF
header files.
* login/getutid_r.c: Test for correct type.
Don't depend on ut_type and ut_id unless _HAVE_UT_TYPE and
_HAVE_UT_ID resp. are defined.
Make really compliant with specification.
* login/getutline_r.c, login/pututline_r.c: Don't depend on
ut_type and ut_id unless _HAVE_UT_TYPE and _HAVE_UT_ID resp. are
defined.
Make really compliant with specification.
* login/setutent_r.c: Don't depend on ut_type and ut_id unless
_HAVE_UT_TYPE and _HAVE_UT_ID resp. are defined.
* login/login.c, login/logout.c, login/logwtmp.c: Complete
rewrite. Now based on getut*/setut* functions.
* stdlib/strtol.c: Undo changes of Wed May 22 01:48:54 1996.
This prevented using this file in other GNU packages.
* sysdeps/gnu/utmpbits.h: Define _HAVE_UT_TYPE, _HAVE_UT_ID,
and _HAVE_UT_TV because struct utmp has these members.
* sysdeps/libm-i387/e_exp.S: Correct exp(+-Inf) case.
* utmp.h: New file. Wrapper around login/utmp.h.
* elf/dl-error.c (struct catch): New type.
(catch): New static variable, struct catch *.
(catch_env, signalled_errstring, signalled_objname): Variables removed.
(_dl_signal_error): If CATCH is non-null, set its errstring and
objname members and jump to CATCH->env. If it is null, call
_dl_sysdep_fatal with a standard message.
* elf/rtld.c (dl_main): Explode `doit' function into dl_main's body.
No longer use _dl_catch_error.
1996-05-29 12:48:04 +08:00
|
|
|
|
often like __start_* and __stop_*
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
1996-06-22 23:00:08 +08:00
|
|
|
|
* symbols starting with _dl_* come from the dynamic linker
|
|
|
|
|
|
1996-05-11 06:55:26 +08:00
|
|
|
|
* symbols resolved by using libgcc.a
|
|
|
|
|
(__udivdi3, __umoddi3, or similar)
|
|
|
|
|
|
|
|
|
|
* weak symbols, which need not be resolved at all
|
|
|
|
|
(currently fabs among others; this gets resolved if the program
|
|
|
|
|
is linked against libm, too.)
|
|
|
|
|
|
|
|
|
|
Generally, you should make sure you find a real program which produces
|
1996-05-25 05:42:06 +08:00
|
|
|
|
errors while linking before deciding there is a problem.
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
1996-07-09 01:45:03 +08:00
|
|
|
|
[Q8] ``Can I replace the libc on my Linux system with GNU libc?''
|
|
|
|
|
|
|
|
|
|
[A8] {UD} You cannot replace any existing libc for Linux with GNU
|
|
|
|
|
libc. There are different versions of C libraries and you can run
|
|
|
|
|
libcs with different major version independently.
|
|
|
|
|
|
|
|
|
|
For Linux there are today two libc versions:
|
|
|
|
|
libc-4 old a.out libc
|
|
|
|
|
libc-5 current ELF libc
|
|
|
|
|
|
|
|
|
|
GNU libc will have the major number 6 and therefore you can have this
|
1996-07-12 08:43:28 +08:00
|
|
|
|
additionally installed. For more information consult documentation for
|
1996-07-09 01:45:03 +08:00
|
|
|
|
shared library handling. The Makefiles of GNU libc will automatically
|
|
|
|
|
generate the needed symbolic links which the linker will use.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
|
|
|
[Q9] ``I expect GNU libc to be 100% source code compatible with
|
1996-05-25 04:16:39 +08:00
|
|
|
|
the old Linux based GNU libc. Why isn't it like this?''
|
|
|
|
|
|
1996-07-09 01:45:03 +08:00
|
|
|
|
[A9] {DMT,UD} Not every extension in Linux libc's history was well
|
1996-05-25 05:42:06 +08:00
|
|
|
|
thought-out. In fact it had a lot of problems with standards compliance
|
|
|
|
|
and with cleanliness. With the introduction of a new version number these
|
|
|
|
|
errors now can be corrected. Here is a list of the known source code
|
|
|
|
|
incompatibilities:
|
|
|
|
|
|
Tue May 28 04:38:10 1996 Ulrich Drepper <drepper@cygnus.com>
* limits.h: Change MB_LEN_MAX to 6. A 31-bit ISO 10646
character in UTF-8 encoding has that many bytes.
* locale/langinfo.h: New element _NL_CTYPE_MB_CUR_MAX.
* locale/categories.def: Add description of field _NL_CTYPE_MB_CUR_MAX.
* locale/Makefile (routines): Add mb_cur_max.
* locale/mb_cur_max.c: New file. This function gets called
when the macro MB_CUR_MAX is used.
* locale/C-ctype.c: Initialize new mb_cur_max field.
* locale/localeinfo.h: Change magic value because of incompatible
change.
* locale/programs/ld-ctype.c: Determine value of mb_cur_max
according to current character set and write it out with the rest.
* stdlib/stdlib.h (MB_CUR_MAX): Not constant anymore. Get value
according to currently used locale for catefory LC_CTYPE by
calling the function __ctype_get_mb_cur_max.
Tue May 28 03:27:46 1996 Ulrich Drepper <drepper@cygnus.com>
* FAQ: Fix some typos.
Tell that for Linux the kernel header files are necessary.
* PROJECTS: New file. List of open jobs for glibc.
* Makefile (distribute): Add PROJECTS.
* crypt/GNUmakefile (headers): New variable. Mention crypt.h.
* crypt/crypt.h: Header for crypt functions.
* elf/elf.h: Add some new constants from recent Cygnus ELF
header files.
* login/getutid_r.c: Test for correct type.
Don't depend on ut_type and ut_id unless _HAVE_UT_TYPE and
_HAVE_UT_ID resp. are defined.
Make really compliant with specification.
* login/getutline_r.c, login/pututline_r.c: Don't depend on
ut_type and ut_id unless _HAVE_UT_TYPE and _HAVE_UT_ID resp. are
defined.
Make really compliant with specification.
* login/setutent_r.c: Don't depend on ut_type and ut_id unless
_HAVE_UT_TYPE and _HAVE_UT_ID resp. are defined.
* login/login.c, login/logout.c, login/logwtmp.c: Complete
rewrite. Now based on getut*/setut* functions.
* stdlib/strtol.c: Undo changes of Wed May 22 01:48:54 1996.
This prevented using this file in other GNU packages.
* sysdeps/gnu/utmpbits.h: Define _HAVE_UT_TYPE, _HAVE_UT_ID,
and _HAVE_UT_TV because struct utmp has these members.
* sysdeps/libm-i387/e_exp.S: Correct exp(+-Inf) case.
* utmp.h: New file. Wrapper around login/utmp.h.
* elf/dl-error.c (struct catch): New type.
(catch): New static variable, struct catch *.
(catch_env, signalled_errstring, signalled_objname): Variables removed.
(_dl_signal_error): If CATCH is non-null, set its errstring and
objname members and jump to CATCH->env. If it is null, call
_dl_sysdep_fatal with a standard message.
* elf/rtld.c (dl_main): Explode `doit' function into dl_main's body.
No longer use _dl_catch_error.
1996-05-29 12:48:04 +08:00
|
|
|
|
* _GNU_SOURCE: glibc does not automatically define _GNU_SOURCE. Thus,
|
|
|
|
|
if a program depends on GNU extensions or some other non-standard
|
|
|
|
|
functionality, it is necessary to compile it with C compiler option
|
|
|
|
|
-D_GNU_SOURCE, or better, to put `#define _GNU_SOURCE' at the beginning
|
|
|
|
|
of your source files, before any C library header files are included.
|
|
|
|
|
This difference normally manifests itself in the form of missing
|
|
|
|
|
prototypes and/or data type definitions. Thus, if you get such errors,
|
|
|
|
|
the first thing you should do is try defining _GNU_SOURCE and see if
|
|
|
|
|
that makes the problem go away.
|
|
|
|
|
|
|
|
|
|
For more information consult the file `NOTES' part of the GNU C
|
|
|
|
|
library sources.
|
1996-05-25 04:16:39 +08:00
|
|
|
|
|
|
|
|
|
* reboot(): GNU libc sanitizes the interface of reboot() to be more
|
|
|
|
|
compatible with the interface used on other OSes. In particular,
|
|
|
|
|
reboot() as implemented in glibc takes just one argument. This argument
|
|
|
|
|
corresponds to the third argument of the Linux reboot system call.
|
|
|
|
|
That is, a call of the form reboot(a, b, c) needs to be changed into
|
|
|
|
|
reboot(c).
|
1996-06-22 23:00:08 +08:00
|
|
|
|
Beside this the header <sys/reboot.h> defines the needed constants
|
|
|
|
|
for the argument. These RB_* constants should be used instead of the
|
|
|
|
|
cryptic magic numbers.
|
|
|
|
|
|
|
|
|
|
* swapon(): the interface of this function didn't changed, but the
|
|
|
|
|
prototype is in a separate header file <sys/swap.h>. For the additional
|
|
|
|
|
argument of of swapon() you should use the SWAP_* constants from
|
|
|
|
|
<linux/swap.h>, which get defined when <sys/swap.h> is included.
|
1996-05-25 04:16:39 +08:00
|
|
|
|
|
|
|
|
|
* errno: If a program uses variable "errno", then it _must_ include header
|
|
|
|
|
file <errno.h>. The old libc often (erroneously) declared this variable
|
|
|
|
|
implicitly as a side-effect of including other libc header files. glibc
|
|
|
|
|
is careful to avoid such namespace pollution, which, in turn, means that
|
|
|
|
|
you really need to include the header files that you depend on. This
|
|
|
|
|
difference normally manifests itself in the form of the compiler
|
|
|
|
|
complaining about the references of the undeclared symbol "errno".
|
|
|
|
|
|
|
|
|
|
* Linux-specific syscalls: All Linux system calls now have appropriate
|
|
|
|
|
library wrappers and corresponding declarations in various header files.
|
|
|
|
|
This is because the syscall() macro that was traditionally used to
|
|
|
|
|
work around missing syscall wrappers are inherently non-portable and
|
|
|
|
|
error-prone. The following tables lists all the new syscall stubs,
|
|
|
|
|
the header-file declaring their interface and the system call name.
|
|
|
|
|
|
|
|
|
|
syscall name: wrapper name: declaring header file:
|
|
|
|
|
------------- ------------- ----------------------
|
1996-06-03 03:47:36 +08:00
|
|
|
|
bdflush bdflush <sys/kdaemon.h>
|
1996-05-25 04:16:39 +08:00
|
|
|
|
create_module create_module <sys/module.h>
|
|
|
|
|
delete_module delete_module <sys/module.h>
|
|
|
|
|
get_kernel_syms get_kernel_syms <sys/module.h>
|
|
|
|
|
init_module init_module <sys/module.h>
|
1996-06-03 03:47:36 +08:00
|
|
|
|
syslog ksyslog_ctl <sys/klog.h>
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
1996-06-22 23:00:08 +08:00
|
|
|
|
* lpd: Older versions of lpd depend on a routine called _validuser().
|
Thu Jun 13 17:25:11 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/generic/memcmp.c: Add prototype decls for internal fns.
* locale/programs/locale.c: Include string.h.
* sunrpc/xdr_stdio.c (xdrstdio_getlong), sunrpc/xdr_rec.c
(xdrrec_getlong), sunrpc/xdr_mem.c (xdrmem_getlong): Make sure
appropriate sign-extension is performed on machines with
sizeof(long) > 4.
* sunrpc/xdr.c (xdr_int, xdr_u_int): If sizeof(long)==8 and
sizeof(int)<sizeof(long), we need to go through a temporary
variable.
* locale/programs/ld-numeric.c: Include <alloca.h>
* libio/stdio.h (__libc_fatal): Add prototype.
* libio/cleanup.c: Use __P() to declare prototype when __STDC__ is
in efect.
* libio/iopopen.c (read_or_write, parent_end, child_end): Declare
volatile to avoid "might get clobbered by longjmp" warning.
* features.h (__KERNEL_STRICT_NAMES): Define __KERNEL_STRICT_NAMES
unless _LOOSE_KERNEL_NAMES is in effect (which, with high
probability is a sure loser).
* sysdeps/unix/sysv/linux/gnu/types.h (__KERNEL_STRICT_NAMES): Remove.
* sysdeps/unix/bsd/osf/alpha/start.S (errno): Removed.
* sysdeps/unix/sysv/linux/alpha/start.S: Ditto.
* misc/paths.h (_PATH_MAN): Change from /usr/share/man to /usr/man
to be Linux FSSTND compliant.
Mon Jun 10 17:50:31 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/pipe.S: Use PSEUDO.
* sysdeps/unix/sysv/linux/alpha/sysdep.S,
sysdeps/unix/sysv/linux/alpha/brk.S,
sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
sysdeps/unix/sysv/linux/alpha/llseek.S,
sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
sysdeps/unix/sysv/linux/alpha/syscall.S: Rename syscall_error to
__syscall_error to avoid intruding application name space.
* sysdeps/unix/sysv/linux/alpha/sysdep.h: Rename __NR_get?id
to SYS_get?id so that syscall stubs in sysdeps/unix define
these syscalls in terms of getxpid/getxuid/getxgid.
* sysdeps/unix/_exit.S, sysdeps/unix/getegid.S,
sysdeps/unix/geteuid.S, sysdeps/unix/getppid.S,
sysdeps/unix/execve.S, sysdeps/unix/fork.S,
sysdeps/unix/syscall.S: Terminate syscall with PSEUDO_END.
* sysdeps/unix/make-syscalls.sh, sysdeps/unix/sysdep.h
(PSEUDO_END): Rename END() to PSEUDO_END().
* sysdeps/unix/alpha/sysdep.h: Move error-handling code in PSEUDO
to PSEUDO_END to improve branch-prediction. Include .frame
directive to make syscalls debugabble.
(PSEUDO_END): New macro.
* sysdeps/unix/alpha/sysdep.h, sysdeps/alpha/bb_init_func.S,
sysdeps/unix/sysv/linux/alpha/brk.S: Use ldiq instead of ldi since
latter is illegal under DEC Unix.
* sysdeps/unix/alpha/sysdep.S: Renamed from
sysdeps/unix/sysv/linux/alpha/sysdep.S. This file works for OSF/1
as well.
* sysdeps/unix/bsd/osf/alpha/sysdep.S: Remove (note that the
EWOULDBLOCK -> EAGAIN mapping was unnecessary since
EWOULDBLOCK==EAGAIN under DEC Unix and Linux/Alpha).
* sysdeps/alpha/divrem.h: Use retaddr instead of ra as the return
address register in the .frame directive.
* sysdeps/alpha/copysign.c: Remove.
* sunrpc/rpc/types.h: Include <sys/param.h> and <netinet/in.h> to
avoid RPC definitions of INADDR_LOOPBACK and/or MAXHOSTNAMELEN.
* errno.h: Move __END_DECLS to correct place to make file
compilable under c++.
* dirent/dirent.h: Document _DIRENT_HAVE_D_OFF macro. Define
d_ino only if <direntry.h> hasn't defined d_fileno.
* configure.in (HAVE_ASM_WEAKEXT_DIRECTIVE): Reverse order of
arguments to weakext to make .weakext detection work on ECOFF systems.
* FAQ: Add Linux/Alpha to list of supported platforms. Mention
that _validuser() has been replaced by __ivaliduser().
Thu Jun 6 21:39:38 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/bsd/sun/sunos4/tcsetattr.c (tcsetattr): Declare cmd
as unsigned long, not as int (to avoid incorrect int->long
promotion).
1996-06-19 14:54:12 +08:00
|
|
|
|
The library does not provide this function, but instead provides
|
|
|
|
|
__ivaliduser() which has a slightly different interfaces. Simply
|
1996-06-22 23:00:08 +08:00
|
|
|
|
upgrading to a newer lpd should fix this problem (e.g., the 4.4BSD
|
Thu Jun 13 17:25:11 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/generic/memcmp.c: Add prototype decls for internal fns.
* locale/programs/locale.c: Include string.h.
* sunrpc/xdr_stdio.c (xdrstdio_getlong), sunrpc/xdr_rec.c
(xdrrec_getlong), sunrpc/xdr_mem.c (xdrmem_getlong): Make sure
appropriate sign-extension is performed on machines with
sizeof(long) > 4.
* sunrpc/xdr.c (xdr_int, xdr_u_int): If sizeof(long)==8 and
sizeof(int)<sizeof(long), we need to go through a temporary
variable.
* locale/programs/ld-numeric.c: Include <alloca.h>
* libio/stdio.h (__libc_fatal): Add prototype.
* libio/cleanup.c: Use __P() to declare prototype when __STDC__ is
in efect.
* libio/iopopen.c (read_or_write, parent_end, child_end): Declare
volatile to avoid "might get clobbered by longjmp" warning.
* features.h (__KERNEL_STRICT_NAMES): Define __KERNEL_STRICT_NAMES
unless _LOOSE_KERNEL_NAMES is in effect (which, with high
probability is a sure loser).
* sysdeps/unix/sysv/linux/gnu/types.h (__KERNEL_STRICT_NAMES): Remove.
* sysdeps/unix/bsd/osf/alpha/start.S (errno): Removed.
* sysdeps/unix/sysv/linux/alpha/start.S: Ditto.
* misc/paths.h (_PATH_MAN): Change from /usr/share/man to /usr/man
to be Linux FSSTND compliant.
Mon Jun 10 17:50:31 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/sysv/linux/alpha/pipe.S: Use PSEUDO.
* sysdeps/unix/sysv/linux/alpha/sysdep.S,
sysdeps/unix/sysv/linux/alpha/brk.S,
sysdeps/unix/sysv/linux/alpha/ieee_get_fp_control.S,
sysdeps/unix/sysv/linux/alpha/ieee_set_fp_control.S,
sysdeps/unix/sysv/linux/alpha/llseek.S,
sysdeps/unix/sysv/linux/alpha/sigsuspend.S,
sysdeps/unix/sysv/linux/alpha/syscall.S: Rename syscall_error to
__syscall_error to avoid intruding application name space.
* sysdeps/unix/sysv/linux/alpha/sysdep.h: Rename __NR_get?id
to SYS_get?id so that syscall stubs in sysdeps/unix define
these syscalls in terms of getxpid/getxuid/getxgid.
* sysdeps/unix/_exit.S, sysdeps/unix/getegid.S,
sysdeps/unix/geteuid.S, sysdeps/unix/getppid.S,
sysdeps/unix/execve.S, sysdeps/unix/fork.S,
sysdeps/unix/syscall.S: Terminate syscall with PSEUDO_END.
* sysdeps/unix/make-syscalls.sh, sysdeps/unix/sysdep.h
(PSEUDO_END): Rename END() to PSEUDO_END().
* sysdeps/unix/alpha/sysdep.h: Move error-handling code in PSEUDO
to PSEUDO_END to improve branch-prediction. Include .frame
directive to make syscalls debugabble.
(PSEUDO_END): New macro.
* sysdeps/unix/alpha/sysdep.h, sysdeps/alpha/bb_init_func.S,
sysdeps/unix/sysv/linux/alpha/brk.S: Use ldiq instead of ldi since
latter is illegal under DEC Unix.
* sysdeps/unix/alpha/sysdep.S: Renamed from
sysdeps/unix/sysv/linux/alpha/sysdep.S. This file works for OSF/1
as well.
* sysdeps/unix/bsd/osf/alpha/sysdep.S: Remove (note that the
EWOULDBLOCK -> EAGAIN mapping was unnecessary since
EWOULDBLOCK==EAGAIN under DEC Unix and Linux/Alpha).
* sysdeps/alpha/divrem.h: Use retaddr instead of ra as the return
address register in the .frame directive.
* sysdeps/alpha/copysign.c: Remove.
* sunrpc/rpc/types.h: Include <sys/param.h> and <netinet/in.h> to
avoid RPC definitions of INADDR_LOOPBACK and/or MAXHOSTNAMELEN.
* errno.h: Move __END_DECLS to correct place to make file
compilable under c++.
* dirent/dirent.h: Document _DIRENT_HAVE_D_OFF macro. Define
d_ino only if <direntry.h> hasn't defined d_fileno.
* configure.in (HAVE_ASM_WEAKEXT_DIRECTIVE): Reverse order of
arguments to weakext to make .weakext detection work on ECOFF systems.
* FAQ: Add Linux/Alpha to list of supported platforms. Mention
that _validuser() has been replaced by __ivaliduser().
Thu Jun 6 21:39:38 1996 David Mosberger-Tang <davidm@azstarnet.com>
* sysdeps/unix/bsd/sun/sunos4/tcsetattr.c (tcsetattr): Declare cmd
as unsigned long, not as int (to avoid incorrect int->long
promotion).
1996-06-19 14:54:12 +08:00
|
|
|
|
lpd is known to be working).
|
|
|
|
|
|
1996-07-09 01:45:03 +08:00
|
|
|
|
* resolver functions/BIND: like on many other systems the functions of
|
|
|
|
|
the resolver library are not included in the libc itself. There is
|
|
|
|
|
a separate library libresolv. If you find some symbols starting with
|
|
|
|
|
`res_*' undefined simply add -lresolv to your call of the linker.
|
|
|
|
|
|
1996-06-22 23:00:08 +08:00
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
1996-07-09 01:45:03 +08:00
|
|
|
|
[Q10] ``Why does getlogin() always return NULL on my Linux box?''
|
1996-06-22 23:00:08 +08:00
|
|
|
|
|
1996-07-09 01:45:03 +08:00
|
|
|
|
[A10] {UD} The GNU C library has a format for the UTMP and WTMP file
|
1996-06-22 23:00:08 +08:00
|
|
|
|
which differs from what your system currently has. It was extended to
|
|
|
|
|
fulfill the needs of the next years when IPv6 is introduced. So the
|
|
|
|
|
record size is different, fields might have a different position and
|
|
|
|
|
so reading the files written by functions from the one library cannot
|
|
|
|
|
be read by functions from the other library. Sorry, but this is what
|
|
|
|
|
a major release is for. It's better to have a cut now than having no
|
|
|
|
|
means to support the new techniques later.
|
|
|
|
|
|
|
|
|
|
|
1996-05-25 04:16:39 +08:00
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
1996-07-09 01:45:03 +08:00
|
|
|
|
[Q11] ``Where are the DST_* constants found in <sys/time.h> on many
|
1996-07-06 19:01:20 +08:00
|
|
|
|
systems?''
|
|
|
|
|
|
1996-07-09 01:45:03 +08:00
|
|
|
|
[A11] {UD} These constants come from the old BSD days and are not used
|
1996-07-06 19:01:20 +08:00
|
|
|
|
today anymore (even the Linux based glibc does not implement the handling
|
1996-07-09 01:45:03 +08:00
|
|
|
|
although the constants are defined).
|
1996-07-06 19:01:20 +08:00
|
|
|
|
|
|
|
|
|
Instead GNU libc contains the zone database handling and compatibility
|
|
|
|
|
code for POSIX TZ environment variable handling.
|
|
|
|
|
|
|
|
|
|
|
1996-07-12 08:43:28 +08:00
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
|
|
|
[Q12] ``The `gencat' utility cannot process the input which are
|
|
|
|
|
successfully used on my Linux libc based system. Why?''
|
|
|
|
|
|
|
|
|
|
[A12] {UD} Unlike the author of the `gencat' program which is distributed
|
|
|
|
|
with Linux libc I have read the underlying standards before writing the
|
|
|
|
|
code. It is completely compatible with the specification given in
|
|
|
|
|
X/Open Portability Guide.
|
|
|
|
|
|
|
|
|
|
To ease the transition from the Linux version some of the non-standard
|
|
|
|
|
features are also present in the `gencat' program of GNU libc. This
|
|
|
|
|
mainly includes the use of symbols for the message number and the automatic
|
|
|
|
|
generation of header files which contain the needed #defines to map the
|
|
|
|
|
symbols to integers.
|
|
|
|
|
|
|
|
|
|
Here is a simple SED script to convert at least some Linux specific
|
|
|
|
|
catalog files to the XPG4 form:
|
|
|
|
|
|
|
|
|
|
-----------------------------------------------------------------------
|
|
|
|
|
# Change catalog source in Linux specific format to standard XPG format.
|
|
|
|
|
# Ulrich Drepper <drepper@cygnus.com>, 1996.
|
|
|
|
|
#
|
|
|
|
|
/^\$ #/ {
|
|
|
|
|
h
|
|
|
|
|
s/\$ #\([^ ]*\).*/\1/
|
|
|
|
|
x
|
|
|
|
|
s/\$ #[^ ]* *\(.*\)/\$ \1/
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/^# / {
|
|
|
|
|
s/^# \(.*\)/\1/
|
|
|
|
|
G
|
|
|
|
|
s/\(.*\)\n\(.*\)/\2 \1/
|
|
|
|
|
}
|
|
|
|
|
-----------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
|
|
1996-07-16 14:38:54 +08:00
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
|
|
|
[Q13] ``How do I configure GNU libc so that the essential libraries
|
|
|
|
|
like libc.so go into /lib and the other into /usr/lib?''
|
|
|
|
|
|
|
|
|
|
[A13] {UD} Like all other GNU packages GNU libc is configured to use a
|
|
|
|
|
base directory and install all files relative to this. If you intend
|
|
|
|
|
to really use GNU libc on your system this base directory is /usr. I.e.,
|
|
|
|
|
you run
|
|
|
|
|
configure --prefix=/usr <other_options>
|
|
|
|
|
|
|
|
|
|
Some systems like Linux have a filesystem standard which makes a
|
|
|
|
|
difference between essential libraries and others. Essential
|
|
|
|
|
libraries are placed in /lib because this directory is required to be
|
|
|
|
|
located on the same disk partition as /. The /usr subtree might be
|
|
|
|
|
found on another partition/disk.
|
|
|
|
|
|
|
|
|
|
To install the essential libraries which come with GNU libc in /lib
|
|
|
|
|
one must explicitly tell this. Autoconf has no option for this so you
|
|
|
|
|
have to use the file where all user supplied additional information
|
|
|
|
|
should go in: `configparms' (see the `INSTALL' file). For Linux the
|
|
|
|
|
`configparms' file should contain:
|
|
|
|
|
|
|
|
|
|
slibdir=/lib
|
|
|
|
|
sysconfdir=/etc
|
|
|
|
|
|
|
|
|
|
The first line specifies the directory for the essential libraries,
|
|
|
|
|
the second line the directory for file which are by tradition placed
|
|
|
|
|
in a directory named /etc.
|
|
|
|
|
|
|
|
|
|
|
update from main archive 960921
Sun Sep 22 03:40:52 1996 Ulrich Drepper <drepper@cygnus.com>
* resolv/resolv.h: Update to bind-4.9.5-T4B.
* resolv/base64.c: Likewise.
* resolv/res_debug.c: Likewise.
* resolv/res_query.c: Likewise.
* resolv/gethnamaddr.c: Likewise.
* nss/nss_dns/dns-host.c: Likewise.
* resolv/res_comp.c: Likewise.
* resolv/res_send.c: Likewise.
* resolv/arpa/nameser.h: Likewise. Attention: MAXDNAME is much
higher now.
* resolv/Banner: New file.
* resolv/Makefile (distribute): Add Banner.
Sat Sep 21 19:15:24 1996 Ulrich Drepper <drepper@cygnus.com>
* sysdeps/stub/getsysstats.c: New file.
* sysdeps/unix/sysv/linux/getsysstats.c: New file.
* misc/Makefile (headers): Add sys/sysinfo.h.
(routines): Add getsysstats.
* sysdeps/unix/sysv/linux/Makefile [$(subdir)==misc]
(sysdep_headers): Remove sys/sysinfo.h.
* sysdeps/generic/sys/sysinfo.h: New file.
* sysdeps/unix/sysv/linux/sys/sysinfo.h: Add prototype for get_nprocs,
get_phys_pages, and get_avphys_pages.
* misc/Makefile (routines): Add mntent_r.
* misc/mntent_r.c: New file.
* misc/mntent.c: Remove all functions but getmntent and use
__getmntent_r.
* misc/mntent.h: Add prototype for __getmntent_r.
* misc/fstab.c: Use __getmntent_r function instead of getmntent.
This will not clobber the state in getmntent.
* sysdeps/generic/confname.h: Add _SC_PROCESSORS_CONF,
_SC_NPROCESSORS_ONLN, _SC_PHYS_PAGES, _SC_AVPHYS_PAGES,
_SC_ATEXIT_MAX, and _SC_PASS_MAX.
* sysdeps/stub/sysconf.c: Add handling _SC_PROCESSORS_CONF and
_SC_NPROCESSORS_ONLN by calling __get_nprocs, _SC_PHYS_PAGES by
calling __get_phys_pages, _SY_AVPHYS_PAGES by calling
__get_avphys_pages, _SC_ATEXIT_MAX and _SC_PASS_MAX.
* sysdeps/posix/sysconf.c: Likewise.
* posix/getconf.c (vars): Add _NPROCESSORS_CONF, _NPROCESSORS_ONLN,
_PHYS_PAGES, _AVPHYS_PAGES, ATEXIT_MAX, and PASS_MAX entries.
Sat Sep 21 05:20:36 1996 Ulrich Drepper <drepper@cygnus.com>
* version.h (VERSION): Bump to 1.95.
* Make-dist (+tsrcs): Don't filter out files in subdirs which
match files in the sysdeps hierachy (welcome back,
sys/syscall.h!).
* resolv/Makefile (libresolv-routines): Remove getnetnamad.
Sat Sep 21 03:00:19 1996 Ulrich Drepper <drepper@cygnus.com>
* locale/loadlocale.c (_nl_free_locale): Remove function.
* locale/localeinfo.h: Remove prototype for _nl_free_locale.
* locale/setlocale.c (setlocale): Don't free locale data of
categories which succeeded to load after a wrong or missing data
file was observed.
* locale/setlocale (setlocale): Initialize NEWNAME correctly so
that it works even when the locale data is not used.
* stdlib/random_r.c: Fix typo in comment.
* stdlib/drand48-iter.c: Likewise.
* stdlib/drand48.c: Likewise.
* stdlib/erand48.c: Likewise.
* stdlib/jrand48.c: Likewise.
* stdlib/lcong48.c: Likewise.
* stdlib/lrand48.c: Likewise.
* stdlib/mrand48.c: Likewise.
* stdlib/nrand48.c: Likewise.
* stdlib/random.c: Likewise.
* stdlib/seed48.c: Likewise.
* stdlib/srand48.c: Likewise.
* misc/search.h: Likewise.
* misc/hsearch.c: Likewise.
* misc/hsearch_r.c: Likewise.
* sysdeps/unix/sysv/linux/m68k/sysdep.S (__errno_location):
Thu Sep 19 23:36:19 1996 Thomas Bushnell, n/BSG <thomas@gnu.ai.mit.edu>
* hurd/hurdinit.c (__libc_argv): Provide common decl.
(_hurd_setproc): Don't declare __libc_argv here.
1996-09-22 11:06:42 +08:00
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
|
|
|
[Q14] ``When linking with the new libc I get unresolved symbols
|
|
|
|
|
`crypt' and `setkey'. Why aren't these functions in the
|
|
|
|
|
libc anymore?''
|
|
|
|
|
|
|
|
|
|
[A14] {UD} Remember the US restrictions of exporting cryptographic
|
|
|
|
|
programs and source code. Until this law gets abolished we cannot
|
|
|
|
|
ship the cryptographic function together with the libc.
|
|
|
|
|
|
|
|
|
|
But of course we provide the code and there is an very easy way to use
|
|
|
|
|
this code. First get the extra package. People in the US way get it
|
|
|
|
|
from the same place they got the GNU libc from. People outside the US
|
|
|
|
|
should get the code from ftp.uni-c.dk [129.142.6.74], or another
|
|
|
|
|
archive site outside the USA. The README explains how to install the
|
|
|
|
|
sources.
|
|
|
|
|
|
|
|
|
|
If you already have the crypt code on your system the reason for the
|
|
|
|
|
failure is probably that you failed to link with -lcrypt. The crypto
|
|
|
|
|
functions are in a separate library to make it possible to export GNU
|
|
|
|
|
libc binaries from the US.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
|
|
|
|
[Q15] ``What are these `add-ons'?''
|
|
|
|
|
|
|
|
|
|
[A15] {UD} To avoid complications with external or external source
|
|
|
|
|
code some optional parts of the libc are distributed as separate
|
|
|
|
|
packages (e.g., the crypt package, see Q14).
|
|
|
|
|
|
|
|
|
|
To ease the use as part of GNU libc the installer just has to unpack
|
|
|
|
|
the package and tell the configuration script about these additional
|
|
|
|
|
subdirectories using the --enable-add-ons option. When you add the
|
|
|
|
|
crypt add-on you just have to use
|
|
|
|
|
|
|
|
|
|
configure --enable-add-ons=crypt,XXX ...
|
|
|
|
|
|
|
|
|
|
where XXX are possible other add-ons and ... means the rest of the
|
|
|
|
|
normal option list.
|
|
|
|
|
|
|
|
|
|
You can use add-ons also to overwrite some files in glibc. The add-on
|
|
|
|
|
system dependent subdirs are search first. It is also possible to add
|
|
|
|
|
banner files (use a file named `Banner') or create shared libraries.
|
|
|
|
|
|
|
|
|
|
Using add-ons has the big advantage that the makefiles of the GNU libc
|
|
|
|
|
can be used. Only some few stub rules must be written to get
|
|
|
|
|
everything running. Even handling of architecture dependent
|
|
|
|
|
compilation is provided. The GNU libc's sysdeps/ directory shows how
|
|
|
|
|
to use this feature.
|
|
|
|
|
|
|
|
|
|
|
1996-07-06 19:01:20 +08:00
|
|
|
|
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
Answers were given by:
|
|
|
|
|
{UD} Ulrich Drepper, <drepper@cygnus.com>
|
1996-05-25 04:16:39 +08:00
|
|
|
|
{DMT} David Mosberger-Tang, <davidm@AZStarNet.com>
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
1996-05-25 05:42:06 +08:00
|
|
|
|
Amended by:
|
Tue May 28 04:38:10 1996 Ulrich Drepper <drepper@cygnus.com>
* limits.h: Change MB_LEN_MAX to 6. A 31-bit ISO 10646
character in UTF-8 encoding has that many bytes.
* locale/langinfo.h: New element _NL_CTYPE_MB_CUR_MAX.
* locale/categories.def: Add description of field _NL_CTYPE_MB_CUR_MAX.
* locale/Makefile (routines): Add mb_cur_max.
* locale/mb_cur_max.c: New file. This function gets called
when the macro MB_CUR_MAX is used.
* locale/C-ctype.c: Initialize new mb_cur_max field.
* locale/localeinfo.h: Change magic value because of incompatible
change.
* locale/programs/ld-ctype.c: Determine value of mb_cur_max
according to current character set and write it out with the rest.
* stdlib/stdlib.h (MB_CUR_MAX): Not constant anymore. Get value
according to currently used locale for catefory LC_CTYPE by
calling the function __ctype_get_mb_cur_max.
Tue May 28 03:27:46 1996 Ulrich Drepper <drepper@cygnus.com>
* FAQ: Fix some typos.
Tell that for Linux the kernel header files are necessary.
* PROJECTS: New file. List of open jobs for glibc.
* Makefile (distribute): Add PROJECTS.
* crypt/GNUmakefile (headers): New variable. Mention crypt.h.
* crypt/crypt.h: Header for crypt functions.
* elf/elf.h: Add some new constants from recent Cygnus ELF
header files.
* login/getutid_r.c: Test for correct type.
Don't depend on ut_type and ut_id unless _HAVE_UT_TYPE and
_HAVE_UT_ID resp. are defined.
Make really compliant with specification.
* login/getutline_r.c, login/pututline_r.c: Don't depend on
ut_type and ut_id unless _HAVE_UT_TYPE and _HAVE_UT_ID resp. are
defined.
Make really compliant with specification.
* login/setutent_r.c: Don't depend on ut_type and ut_id unless
_HAVE_UT_TYPE and _HAVE_UT_ID resp. are defined.
* login/login.c, login/logout.c, login/logwtmp.c: Complete
rewrite. Now based on getut*/setut* functions.
* stdlib/strtol.c: Undo changes of Wed May 22 01:48:54 1996.
This prevented using this file in other GNU packages.
* sysdeps/gnu/utmpbits.h: Define _HAVE_UT_TYPE, _HAVE_UT_ID,
and _HAVE_UT_TV because struct utmp has these members.
* sysdeps/libm-i387/e_exp.S: Correct exp(+-Inf) case.
* utmp.h: New file. Wrapper around login/utmp.h.
* elf/dl-error.c (struct catch): New type.
(catch): New static variable, struct catch *.
(catch_env, signalled_errstring, signalled_objname): Variables removed.
(_dl_signal_error): If CATCH is non-null, set its errstring and
objname members and jump to CATCH->env. If it is null, call
_dl_sysdep_fatal with a standard message.
* elf/rtld.c (dl_main): Explode `doit' function into dl_main's body.
No longer use _dl_catch_error.
1996-05-29 12:48:04 +08:00
|
|
|
|
{RM} Roland McGrath, <roland@gnu.ai.mit.edu>
|
1996-05-11 06:55:26 +08:00
|
|
|
|
|
|
|
|
|
Local Variables:
|
|
|
|
|
mode:text
|
|
|
|
|
End:
|