mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-28 04:03:35 +08:00
4bca4c1748
1998-04-07 08:51 Ulrich Drepper <drepper@cygnus.com> * iconv/gconv.c: Take care for NULL arguments. * iconv/gconv_dl.c: Make find_func function global. * iconv/gconv_int.h: Add prototype for __gconv_find_func. Add prototypes for ASCII conversion functions. * iconv/gconv_simple.c: Add ASCII conversion functions. * locale/C-ctype.c: Correct charset name. * wcsmbs/Makefile (distribute): Add wcsmbsload.h. (routines): Remove wmemrtowcs and wmemrtombs, add wcsnlen and wcsmbsload. * wcsmbs/btowc.c: Rewrite to use iconv functionality. * wcsmbs/mbrtowc.c: Likewise. * wcsmbs/mbsnrtowcs.c: Likewise. * wcsmbs/mbsrtowcs.c: Likewise. * wcsmbs/wcrtomb.c: Likewise. * wcsmbs/wcsnrtombs.c: Likewise. * wcsmbs/wcsrtombs.c: Likewise. * wcsmbs/wctob.c: Likewise. * wcsmbs/wchar.h: Add prototype for __wcslen, wcsnlen. Remove prototypes for wmemr*. * wcsmbs/wcslen.c: Rename to __wcslen and make wcslen weak alias. * wcsmbs/wcsnlen.c: New file. * wcsmbs/wcsmbsload.c: New file. * wcsmbs/wcsmbsload.h: New file. * manual/filesys.texi: Mention risks of tmpnam and mktemp. * manual/install.texi: Describe some more critical points. * string/string.h: Add prototype for __strnlen. * string/strnlen.c: Rename to __strnlen and make strnlen weak alias. * sysdeps/posix/mktemp.c: Rewrite to allow many more files and much less predictable names. * sysdeps/posix/mkstemp.c: Likewise. 1998-04-05 Andreas Jaeger <aj@arthur.rhein-neckar.de> * manual/libc.texinfo (Top): Change "file namespace" to "local namespace". * manual/socket.texi: Change file namespace to local namespace. (Out-of-Band Data): Remove unneeded variable link. (Host Address Functions): Use uint32_t consequently and add a number of clarifications for IPv4/IPv6, classless addresses. (Internet Namespace): Added some paragraphs about IPv6. Based on suggestions by Francesco Potorti` <F.Potorti@cnuce.cnr.it>. 1998-04-05 Philip Blundell <Philip.Blundell@pobox.com> Update for draft-ietf-ipngwg-bsd-api-new-01.txt: * resolv/netdb.h (getnameinfo): Use `socklen_t' not `size_t'. (NI_NUMERICHOST, et al.): Tidy up and add comments. (AI_NUMERICHOST): Define. (getnodebyname): New prototype. (AI_V4MAPPED, et al.): New constants. * sysdeps/unix/bsd/bsd4.4/bits/sockaddr.h (SA_LEN): New macro.< * sysdeps/generic/bits/sockaddr.h (SA_LEN): Likewise. * sysdeps/unix/sysv/linux/Makefile (sysdep_routines): Add sa_len for socket. * sysdeps/unix/sysv/linux/sa_len.c: New file. * sysdeps/unix/sysv/linux/Dist: Add sa_len.c. * sysdeps/unix/sysv/linux/bits/socket.h: Make multiple #inclusion safe. * sysdeps/generic/bits/sockunion.h: New file, defining sockaddr_union. * sysdeps/unix/sysv/linux/bits/sockunion.h: Likewise. * socket/Makefile (headers): Add bits/sockunion.h. * socket/sys/socket.h: Include <bits/sockunion.h> * inet/netinet/in.h: Include <bits/sockaddr.h> rather than <sys/socket.h>, to avoid getting sockaddr_union defined. * sysdeps/generic/bits/socket.h: Allow inclusion from netinet.in.h. * sysdeps/unix/sysv/linux/bits/socket.h: Likewise. * sysdeps/unix/sysv/linux/mips/bits/socket.h: Likewise. * sysdeps/unix/sysv/linux/if_index.c: Remove use of SIOCGIFCOUNT (2.2.x kernels won't have it). 1998-04-06 21:21 Ulrich Drepper <drepper@cygnus.com> * sysdeps/mach/hurd/bits/ioctls.h: Allow inclusion from hurd/ioctl.h. * sysdeps/mach/hurd/dl-sysdep.c: Use __ptr_t not caddr_t. * iconv/gconv_conf.c: Define MAXPATHLEN if not available before. Patches by UCHIYAMA Yasushi <uch@nop.or.jp>. 1998-04-05 Philip Blundell <Philip.Blundell@pobox.com> * manual/socket.texi (Socket Addresses): Fix a typo. (Interface Naming): New section. 1998-04-05 23:29 Zack Weinberg <zack@rabi.phys.columbia.edu> * configure.in: Check for CC using $ac_tool_prefix, to handle cross-compilation. Use AC_CHECK_TOOL to find MiG. * config.make.in: Add MIG to be substituted. * mach/Machrules: Don't define MIG variable. Patch by Gordon Matzigkeit <gord@profitpress.com>. 1998-04-05 Mark Kettenis <kettenis@phys.uva.nl> * elf/dl-load.c (decompose_rpath): Use local_strdup instead of strdupa to copy rpath. 1998-04-05 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * configure.in: Fix gcc version check. * aclocal.m4 (AC_PROG_CHECK_VER): Rewritten to make less confusing. 1998-04-05 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * configure.in: Fix gcc version check. * aclocal.m4 (AC_PROG_CHECK_VER): Rewritten to make less confusing. 1998-04-05 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * configure.in: Fix gcc version check. * aclocal.m4 (AC_PROG_CHECK_VER): Rewritten to make less confusing. 1998-03-31 Mark Kettenis <kettenis@phys.uva.nl> * sysdeps/unix/bsd/unlockpt.c (unlockpt): Call __ptsname_r instead of ptsname_r. * stdlib/stdlib.h: Change prototype of ptsname_r to make it more like ttyname_r. * sysdeps/unix/sysv/linux/ptsname.c (__ptsname_r): Likewise. * sysdeps/generic/ptsname.c (__ptsname_r): Likewise. * sysdeps/unix/grantpt.c (grantpt): Change check of return value of __ptsname_r accordingly. * login/openpty.c (openpty): Likewise. 1998-06-04 18:47 H.J. Lu <hjl@gnu.org> * libio/fileops.c (_IO_file_xsgetn): Adjust pointers. 1998-04-06 13:58 Andreas Schwab <schwab@issan.informatik.uni-dortmund.de> * Makeconfig (libtypes): Redo H.J. Lu's change of 1998-03-27. * Makerules: Readd missing rule for $(objpfx)stamp.oS. 1998-04-06 Thorsten Kukuk <kukuk@vt.uni-paderborn.de> * nis/ypclnt.c: Don't give YPERR_RPC back, use the do_ypcall return value for better error checking. |
||
---|---|---|
.. | ||
Examples | ||
man | ||
sysdeps | ||
attr.c | ||
Banner | ||
cancel.c | ||
ChangeLog | ||
Changes | ||
condvar.c | ||
configure | ||
errno.c | ||
FAQ.html | ||
internals.h | ||
join.c | ||
libpthread.map | ||
LICENSE | ||
lockfile.c | ||
Makefile | ||
manager.c | ||
mutex.c | ||
ptfork.c | ||
pthread.c | ||
queue.h | ||
README | ||
README.Xfree3.2 | ||
restart.h | ||
rwlock.c | ||
semaphore.c | ||
semaphore.h | ||
shlib-versions | ||
signals.c | ||
specific.c | ||
spinlock.h | ||
weaks.c | ||
wrapsyscall.c |
Linuxthreads - POSIX 1003.1c kernel threads for Linux Copyright 1996, 1997 Xavier Leroy (Xavier.Leroy@inria.fr) DESCRIPTION: This is release 0.7 (late beta) of LinuxThreads, a BiCapitalized implementation of the Posix 1003.1c "pthread" interface for Linux. LinuxThreads provides kernel-level threads: each thread is a separate Unix process, sharing its address space with the other threads through the new system call clone(). Scheduling between threads is handled by the kernel scheduler, just like scheduling between Unix processes. REQUIREMENTS: - Linux version 2.0 and up (requires the new clone() system call and the new realtime scheduler). - For Intel platforms: libc 5.2.18 or later is required. 5.2.18 or 5.4.12 or later are recommended; 5.3.12 and 5.4.7 have problems (see the FAQ.html file for more info). - Also supports glibc 2 (a.k.a. libc 6), which actually comes with a specially-adapted version of this library. - Currently supports Intel, Alpha, Sparc, Motorola 68k, ARM and MIPS platforms. - Multiprocessors are supported. INSTALLATION: - Edit the Makefile, set the variables in the "Configuration" section. - Do "make". - Do "make install". USING LINUXTHREADS: gcc -D_REENTRANT ... -lpthread A complete set of manual pages is included. Also see the subdirectory Examples/ for some sample programs. STATUS: - All functions in the Posix 1003.1c base interface implemented. Also supports priority scheduling. - For users of libc 5 (H.J.Lu's libc), a number of C library functions are reimplemented or wrapped to make them thread-safe, including: * malloc functions * stdio functions (define _REENTRANT before including <stdio.h>) * per-thread errno variable (define _REENTRANT before including <errno.h>) * directory reading functions (opendir(), etc) * sleep() * gmtime(), localtime() New library functions provided: * flockfile(), funlockfile(), ftrylockfile() * reentrant versions of network database functions (gethostbyname_r(), etc) and password functions (getpwnam_r(), etc). - libc 6 (glibc 2) provides much better thread support than libc 5, and comes with a specially-adapted version of LinuxThreads. For serious multithreaded programming, you should consider switching to glibc 2. It is available from ftp.gnu.org:/pub/gnu and its mirrors. WARNING: Many existing libraries are not compatible with LinuxThreads, either because they are not inherently thread-safe, or because they have not been compiled with the -D_REENTRANT. For more info, see the FAQ.html file in this directory. A prime example of the latter is Xlib. If you link it with LinuxThreads, you'll probably get an "unknown 0 error" very early. This is just a consequence of the Xlib binaries using the global variable "errno" to fetch error codes, while LinuxThreads and the C library use the per-thread "errno" location. See the file README.Xfree3.3 for info on how to compile the Xfree 3.3 libraries to make them compatible with LinuxThreads. KNOWN BUGS AND LIMITATIONS: - Threads share pretty much everything they should share according to the standard: memory space, file descriptors, signal handlers, current working directory, etc. One thing that they do not share is their pid's and parent pid's. According to the standard, they should have the same, but that's one thing we cannot achieve in this implementation (until the CLONE_PID flag to clone() becomes usable). - The current implementation uses the two signals SIGUSR1 and SIGUSR2, so user-level code cannot employ them. Ideally, there should be two signals reserved for this library. One signal is used for restarting threads blocked on mutexes or conditions; the other is for thread cancellation. *** This is not anymore true when the application runs on a kernel newer than approximately 2.1.60. - The stacks for the threads are allocated high in the memory space, below the stack of the initial process, and spaced 2M apart. Stacks are allocated with the "grow on demand" flag, so they don't use much virtual space initially (4k, currently), but can grow up to 2M if needed. Reserving such a large address space for each thread means that, on a 32-bit architecture, no more than about 1000 threads can coexist (assuming a 2Gb address space for user processes), but this is reasonable, since each thread uses up one entry in the kernel's process table, which is usually limited to 512 processes. Another potential problem of the "grow on demand" scheme is that nothing prevents the user from mmap'ing something in the 2M address window reserved for a thread stack, possibly causing later extensions of that stack to fail. Mapping at fixed addresses should be avoided when using this library. - Signal handling does not fully conform to the Posix standard, due to the fact that threads are here distinct processes that can be sent signals individually, so there's no notion of sending a signal to "the" process (the collection of all threads). More precisely, here is a summary of the standard requirements and how they are met by the implementation: 1- Synchronous signals (generated by the thread execution, e.g. SIGFPE) are delivered to the thread that raised them. (OK.) 2- A fatal asynchronous signal terminates all threads in the process. (OK. The thread manager notices when a thread dies on a signal and kills all other threads with the same signal.) 3- An asynchronous signal will be delivered to one of the threads of the program which does not block the signal (it is unspecified which). (No, the signal is delivered to the thread it's been sent to, based on the pid of the thread. If that thread is currently blocking the signal, the signal remains pending.) 4- The signal will be delivered to at most one thread. (OK, except for signals generated from the terminal or sent to the process group, which will be delivered to all threads.) - The current implementation of the MIPS support assumes a MIPS ISA II processor or better. These processors support atomic operations by ll/sc instructions. Older R2000/R3000 series processors are not supported yet; support for these will have higher overhead. - The current implementation of the ARM support assumes that the SWP (atomic swap register with memory) instruction is available. This is the case for all processors except for the ARM1 and ARM2. On StrongARM, the SWP instruction does not bypass the cache, so multi-processor support will be more troublesome.