summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Andersen <andersen@codepoet.org>2002-08-08 07:32:52 +0000
committerEric Andersen <andersen@codepoet.org>2002-08-08 07:32:52 +0000
commitd9ae112a7000708c217d9021d17b0ff10155ee15 (patch)
treed4bbd73418cda9fc65128bd70fb021ca0470873d
parent3d90de2751df9de4e303018670c0bf6dbbd122ee (diff)
Update status of reentrance support
-rw-r--r--docs/threads.txt2169
1 files changed, 23 insertions, 2146 deletions
diff --git a/docs/threads.txt b/docs/threads.txt
index d31a56d58..4669f3761 100644
--- a/docs/threads.txt
+++ b/docs/threads.txt
@@ -1,1357 +1,45 @@
uClibc thread-safety analysis
-By Steve Thayer <sthayer@coactive.com>
-with updates by Erik Andersen <andersee@debian.org>
-Introduction:
+Things that are still known to be needed for thread safety:
-The purpose of this document is to identify the things that need to be done
-to the uClibc C library in order to make it thread-safe. The goal is to be
-able to use a pthreads thread implementation under uClinux, using the uClibc
-C library. To help identify the things that require changing, I used David R.
-Butenhof's book Programming With POSIX Threads, the source code for the
-glibc 2.1.3 C library, and the source code for the C library included in the
-Proventhreads distribution.
+ getgrgid_r <not implemented, required by SuSv3>
+ getgrnam_r <not implemented, required by SuSv3>
-References:
-Butenhof, David R., Programming With POSIX Threads, Addison Wesley Longman, Inc., Reading, MA, ISBN 0-201-63392-2, 1997.
-The GNU C library is available from the Free Software Foundation
-http://www.gnu.org/software/libc/libc.html
-Proventhreads is part of the Inferno Operating system.
-http://www.vitanuova.com/inferno/index.html
+Things that might be nice, but are not required:
+ gethostent_r <desired, but not required for SuSv3>
+ getnetbyaddr_r <desired, but not required for SuSv3>
+ getnetent_r <desired, but not required for SuSv3>
+ getnetbyname_r <desired, but not required for SuSv3>
+ getprotobynumber_r <desired, but not required for SuSv3>
+ getprotoent_r <desired, but not required for SuSv3>
+ getprotobyname_r <desired, but not required for SuSv3>
+ getnetbyaddr_r <desired, but not required for SuSv3>
+ getnetbyname_r <desired, but not required for SuSv3>
+ getnetent_r <desired, but not required for SuSv3>
+ getprotobynumber_r <desired, but not required for SuSv3>
+ getprotoent_r <desired, but not required for SuSv3>
+ getprotobyname_r <desired, but not required for SuSv3>
-1. Stdio:
-1.1 Buffer access mutexes
- The following functions are required in order to protect shared
- I/O buffers from being accessed by more than one thread at a time.
- None of these functions are currently implemented in the uClibc
- library, so they must be added.
+Functions that use static data and may still need locking:
- flockfile <implemented>
- ftrylockfile <implemented>
- funlockfile <implemented>
-
-1.2 Functions that must use buffer access mutexes, according to Butenhof
-
- The following functions are identified by Butenhof as needing to use
- buffer access mutexes. This does not represent all functions that
- need to use the mutexes.
-
- getc <mutex required>
- getchar <mutex required>
- putc <mutex required>
- putchar <mutex required>
-
-1.3 Functions from glibc (libio) that use buffer access mutexes
-
- The following functions are functions found in glibc that currently
- use the buffer access mutexes. Comments in brackets represent
- status of uClibc with regard to these functions. Most of these
- functions aren't even supported under uClibc, so no work is required.
- The rest may require the access mutex. (These must be analyzed on a
- case-by-case basis.)
-
- clearerr <mutex required>
- feof <mutex required>
- ferror <mutex required>
- fputc <mutex required>
- fputwc <not supported>
- freopen <mutex required>
- freopen64 <mutex required>
- fseek <mutex required>
- fseeko <mutex required>
- fseeko64 <mutex required>
- ftello <mutex required>
- ftello64 <mutex required>
- fwide <not supported>
- getc <mutex required>
- getchar <mutex required>
- getwc <not supported>
- getwchar <not supported>
- iofclose <not supported>
- iofflush <not supported>
- iofgetpos <not supported>
- iofgetpos64 <not supported>
- iofgets <not supported>
- iofgetws <not supported>
- iofputs <not supported>
- iofputws <not supported>
- iofread <not supported>
- iofsetpos <not supported>
- iofsetpos64 <not supported>
- ioftell <not supported>
- iofwrite <not supported>
- iogetdelim <not supported>
- iogets <not supported>
- ioputs <not supported>
- ioseekoff <not supported>
- ioseekpos <not supported>
- iosetbuffer <not supported>
- iosetvbuf <not supported>
- ioungetc <not supported>
- ioungetwc <not supported>
- oldiofclose <not supported>
- oldiofgetpos <not supported>
- oldiofgetpos64 <not supported>
- oldiofsetpos <not supported>
- oldiofsetpos64 <not supported>
- peekc <not supported>
- putc <mutex required>
- putchar <mutex required>
- putwc <not supported>
- putwchar <not supported>
- rewind <mutex required>
-
-1.4 Functions from Proventhreads that use buffer access mutexes
-
- See description above. This applies only to the C library included
- in the proventhreads distribution.
-
- clearerr <mutex required>
- fclose <mutex required>
- fflush <mutex required>
- fgetc <mutex required>
- __getc <not supported>
- fgetline <not supported>
- fgetpos <mutex required>
- fgetpos64 <mutex required>
- fgets <mutex required>
- fpurge <not supported>
- fputc <mutex required>
- __putc <not supported>
- fputs <mutex required>
- fread <mutex required>
- freopen <mutex required>
- fscanf <mutex required>
- fseek <mutex required>
- ftell <mutex required>
- fwalk <not supported>
- fwrite <mutex required>
- getc <mutex required>
- getchar <mutex required>
- putc <mutex required>
- putchar <mutex required>
- puts <mutex required>
- putw <mutex _not_ required>
- refill <not supported>
- rewind <mutex required>
- scanf <mutex required>
- setvbuf <mutex required>
- ungetc <mutex required>
- vfprintf <mutex required>
- vscanf <mutex required>
-
-1.5 Unlocked buffer access
-
- These functions get used in situations where speed is important,
- and locking isn't necessary, or for use in a section of code that
- is already locked. For example, a for-loop that makes multiple calls
- to getc could make an exlicit call to flockfile outside the loop, and
- then use getc_unlocked within the loop for speed. That way, the lock
- only needs to be grabbed and released once, rather than for each call.
-
- getc_unlocked <implemented
- getchar_unlocked <implemented
- putc_unlocked <implemented
- putchar_unlocked <implemented
-
-1.6 Additional unlocked calls made in glibc
-
- These are additional functions (not mentioned by Butenhof) that the
- glibc library uses for unlocked buffer access. Though not strictly
- necessary, these may be nice to have in uClibc.
-
- fileno_unlocked <implemented
- clearerr_unlocked <implemented
- feof_unlocked <implemented
- ferror_unlocked <implemented
- fputc_unlocked <implemented
- fgetc_unlocked <implemented
- fflush_unlocked <implemented
- fread_unlocked <implemented
- fwrite_unlocked <implemented
- fgets_unlocked <implemented
- fputs_unlocked <implemented
-
-1.7 Additional unlocked calls made in Proventhreads
-
- Proventhreads only provides the four unlocked function calls above.
-
- <none>
-
-
-2. Thread-safe functions:
-
- There are some functions in the C library standard that are
- simply not thread-safe and cannot be thread-safe using their
- current interface. For example, any function that returns a
- pointer to static data, or requires static context between
- calls. To resolve this problem, new functions were added to
- the standard that perform the same basic task, but use a new
- interface that does not require static data. These functions
- share their name with the old unsafe functions, but have an
- "_r" appended to the name. By definition, these functions are
- reentrant and thread-safe. It is important to note that these
- functions to do not depend on <pthread.h> and can be used even
- if threading is not supported.
-
-2.1 User and terminal identification:
-
- getlogin_r <implemented>
- ctermid <implemented>
- ttyname_r <implemented>
-
-
-2.2 Directory searching
-
- readdir_r <implemented>
-
-2.3 String token
-
- strtok_r <implemented>
-
-2.4 Time representation
-
- asctime_r <implemented>
- ctime_r <implemented>
- gmtime_r <implemented>
- localtime_r <implemented>
-
-2.5 Random number generation
-
- rand_r <implemented
-
-2.6 Group and user database
-
- getgrgid_r <required> <---
- getgrnam_r <required> <---
- getpwuid_r <implemented>
- getpwnam_r <implemented>
-
-2.7 Additional thread-safe functions implemented by glibc
-
- The following is a list of additional functions implemented by glibc
- that also provide thread-safe functionality. Most of these functions
- are not supported by uClibc, so there is no need to implement the
- thread-safe version. Those that do apply, but have not been
- implemented yet are highlighted.
-
- fgetpwent_r <implemented>
- getttyname_r <not supported>
- getmntent_r <implemented>
- ecvt_r <not supported>
- fcvt_r <not supported>
- qecvt_r <not supported>
- qfcvt_r <not supported>
- hcreate_r <not supported>
- hdestroy_r <not supported>
- hsearch_r <not supported>
- getspent_r <implemented>
- getspnam_r <implemented>
- sgetspent_r <implemented>
- fgetspent_r <implemented>
- gethostbyaddr_r <implemented>
- gethostbyname2_r <implemented>
- gethostbyname_r <implemented>
- gethostent_r <desired> <---
- getnetbyaddr_r <desired> <---
- getnetent_r <desired> <---
- getnetbyname_r <desired> <---
- getprotobynumber_r <desired> <---
- getprotoent_r <desired> <---
- getprotobyname_r <desired> <---
- getservbyname_r <implemented>
- getservbyport_r <implemented>
- getservent_r <implemented>
- getrpcent_r <desired> <---
- getrpcbyname_r <desired> <---
- getrpcbynumber_r <implemented>
- ether_aton_r <not supported>
- ether_ntoa_r <not supported>
- getnetgrent_r <not supported>
- getaliasent_r <not supported>
- getaliasbyname_r <not supported>
- nscd_getpw_r <not supported>
- nscd_getgr_r <not supported>
- nscd_gethst_r <not supported>
- getutent_r <desired> <---
- getutent_r_unknown <not supported>
- getutid_r_unknown <not supported>
- getutline_r_unknown <not supported>
- getutid_r <desired> <---
- getutline_r <required> <---
- getutent_r_file <not supported>
- getutid_r_file <not supported>
- getutline_r_file <not supported>
- internal_getut_r <not supported>
- getutent_r_daemon <not supported>
- getutid_r_daemon <not supported>
- getutline_r_daemon <not supported>
- ptsname_r <not supported>
- __fgetpwent_r <not supported>
- __ttyname_r <not supported>
- __getmntent_r <not supported>
- __getspent_r <not supported>
- __getspnam_r <not supported>
- __sgetspent_r <not supported>
- __fgetspent_r <not supported>
- __gethostbyaddr_r <not supported>
- __gethostbyname2_r <not supported>
- __gethostbyname_r <not supported>
- __gethostent_r <not supported
- __getnetbyaddr_r <not supported>
- __getnetent_r <not supported>
- __getnetbyname_r <not supported>
- __getprotobynumber_r <not supported>
- __getprotoent_r <not supported>
- __getprotobyname_r <not supported>
- __getservbyname_r <not supported>
- __getservbyport_r <not supported>
- __getrpcent_r <not supported>
- __getservent_r <not supported>
- __getrpcbyname_r <not supported>
- __getrpcbynumber_r <not supported>
- __getnetgrent_r <not supported>
- __internal_getnetgrent_r <not supported>
- __getaliasent_r <not supported>
- __getaliasbyname_r <not supported>
- __nscd_getpwnam_r <not supported>
- __nscd_getpwuid_r <not supported>
- __nscd_getgrgid_r <not supported>
- __nscd_getgrnam_r <not supported>
- __nscd_gethostbyaddr_r <not supported>
- __nscd_gethostbyname2_r <not supported>
- __nscd_gethostbyname_r <not supported>
- __getutent_r <not supported>
- __getutid_r <not supported>
- __getutline_r <not supported>
- __ptsname_r <not supported>
-
-
-2.8 Additional thread-safe functions implemented by Proventhreads
-
- See description above. This applies only to the C library included
- in the proventhreads distribution.
-
- inet_ntoa_r <implemented>
- gethostbyaddr_r <implemented>
- gethostbyname_r <implemented>
- gethostent_r <not supported>
- getnetbyaddr_r <desired> <---
- getnetbyname_r <desired> <---
- getnetent_r <desired> <---
- getprotobynumber_r <desired> <---
- getprotoent_r <desired> <---
- getprotobyname_r <desired> <---
- getservbyname_r <implemented>
- getservbyport_r <implemented>
- getservent_r <implemented>
-
-
-3. List of functions in uClibc that use static data structures
-
- The following is a list of static data structures found in uClibc,
- and the functions that use them. In most cases, static data is not
- thread-safe, since multiple threads can access the same data at the
- same time. This is an attempt to identify all of the static data that
- is not considered thread-safe. Some of these problems will get
- resolved by the changes outlines above.
-
- crypt/crypt.c:
-
- static struct crypt_data __crypt_data;
-
- crypt <crypt_r implemented>
- setkey <setkey_r implemented>
- encrypt <encrypt_r implemented>
-
- --------------------------------------------------------------------
-
- crypt/des.c:
-
- static u_char inv_key_perm[64];
- static u_char inv_comp_perm[56];
- static u_char u_sbox[8][64];
- static u_char u_key_perm[56];
- static u_char un_pbox[32];
- static u_int32_t en_keysl[16], en_keysr[16];
- static u_int32_t de_keysl[16], de_keysr[16];
- static u_int32_t ip_maskl[8][256], ip_maskr[8][256];
- static u_int32_t fp_maskl[8][256], fp_maskr[8][256];
- static u_int32_t key_perm_maskl[8][128], key_perm_maskr[8][128];
- static u_int32_t comp_maskl[8][128], comp_maskr[8][128];
- static u_int32_t saltbits;
-
- __des_crypt_r <implemented badly!> <---
-
- This needs to be fixed to actually be reentrant. Right now it
- just fakes it, which is pretty lame.... All the above should be
- moved into a 'struct des_context' or some such...
-
- --------------------------------------------------------------------
-
- crypt/md5.c:
-
- static const char __md5__magic[];
- static const unsigned char __md5_itoa64[];
-
- __md5_crypt_r <implemented>
-
- No problems here...
-
-
- --------------------------------------------------------------------
-
- inet/addr.c:
-
- static char buf[16];
-
- inet_ntoa <implemented>
- inet_ntoa_r <implemented>
-
- --------------------------------------------------------------------
-
- inet/getnetent.c:
-
- static FILE *netf = NULL;
- static char line[BUFSIZ+1];
- static struct netent net;
- static char *net_aliases[MAXALIASES];
-
- setnetent <mutex required>
- endnetent <mutex required>
- getnetent <mutex required>
- getnetent_r <not implemented>
-
- NOTE: setnetent and endnetent are not implemented in glibc.
-
- --------------------------------------------------------------------
-
- inet/getproto.c:
-
- static FILE *protof = NULL;
- static char line[BUFSIZ+1];
- static struct protoent proto;
- static char *proto_aliases[MAXALIASES];
- static int proto_stayopen;
-
- setprotoent <mutex required>
- endprotoent <mutex required>
- getprotoent <mutex required>
- getprotoent_r <implemented>
- getprotobyname <implemented>
- getprotobyname_r <not implemented>
- getprotobynumber <implemented>
- getprotobynumber_r <not implemented>
-
- NOTE: setprotoent and endprotoent are not implemented in glibc.
-
- --------------------------------------------------------------------
-
- inet/getservice.c:
-
- static FILE *servf = NULL;
- static char line[BUFSIZ+1];
- static struct servent serv;
- static char *serv_aliases[MAXALIASES];
- static int serv_stayopen;
-
- setservent <mutex required>
- endservent <fix mutex required>
- getservent <mutex required>
- getservent_r <implemented>
- getservbyname <mutex required>
- getservbyname_r <implemented>
- getservbyport <mutex required>
- getservbyport_r <implemented>
-
- NOTE: setservent and endservent are not implemented in glibc.
-
- --------------------------------------------------------------------
-
- static struct hostent h;
- static char buf[xxx];
-
- gethostbyname <implemented>
-
-
- static struct hostent h;
- static char buf[xxx];
-
- gethostbyname2 <implemented>
-
- static struct hostent h;
- static char buf[xxx];
-
- gethostbyaddr <implemented>
-
-
- static int __stay_open;
- static FILE * __gethostent_fp;
- static struct hostent h;
- static char buf[xxx];
-
- gethostent <mutex required>
- sethostent <mutex required>
- endhostent <mutex required>
-
- --------------------------------------------------------------------
-
- inet/rpc/auth_none.c:
-
- static struct auth_ops ops
- static struct authnone_private
-
- authnone_create <fix required> <---
- authnone_marshal <fix required> <---
-
- NOTE: This file makes a lot of use of this static variable and
- also a global allocated authentication structure. Care should
- be taken in fixing this to make it thread-safe.
-
- --------------------------------------------------------------------
-
- inet/rpc/auth_unix.c:
-
- static struct auth_ops auth_unix_ops
-
- authunix_create <fix required> <---
- marshal_new_auth <fix required> <---
-
- NOTE: This file makes a lot of use of this static variable and
- also a global allocated authentication structure. Care should
- be taken in fixing this to make it thread-safe.
-
- --------------------------------------------------------------------
-
- inet/rpc/bindresvport.c:
-
- static short port;
-
- bindresvport <fix required> <---
-
- --------------------------------------------------------------------
-
- inet/rpc/clnt_perror.c:
-
- static char *buf;
- static struct rpc_errtab rpc_errlist[]
- static struct auth_errtab auth_errlist[]
-
- NOTE: These static structures all have #if 0 around them, so they
- do not get compiled in. Hopefully, we don't have to worry about
- them right now, but prehaps a comment should be added to the code
- indicating that it is not thread-safe.
-
- --------------------------------------------------------------------
-
- inet/rpc/clnt_raw.c:
-
- static struct clntraw_private
- static struct clnt_ops client_ops
-
- clntraw_create <fix required> <---
- clntraw_call <fix required> <---
- clntraw_freeres <fix required> <---
-
- NOTE: This file makes a lot of use of these static variables and
- also a global allocated client structure. Care should
- be taken in fixing this to make it thread-safe.
-
- --------------------------------------------------------------------
-
- inet/rpc/clnt_simple.c:
-
- static struct callrpc_private
-
- callrpc <fix required> <---
-
- --------------------------------------------------------------------
-
- inet/rpc/clnt_tcp.c:
-
- static struct clnt_ops tcp_ops
-
- clnttcp_create
-
- NOTE: This static structure is just a group of function pointers.
- It could probably be made const, but this might affect the function
- signature. This should be investigated further.
-
- --------------------------------------------------------------------
-
- inet/rpc/clnt_udp.c:
-
- static struct clnt_ops udp_ops
-
- clntudp_bufcreate
-
- NOTE: This static structure is just a group of function pointers.
- It could probably be made const, but this might affect the function
- signature. This should be investigated further.
-
- --------------------------------------------------------------------
-
- inet/rpc/getrpcent.c:
-
- static char RPCDB[] <fix desired> <---
-
- NOTE: This is okay, but should use the const keyword.
-
- --------------------------------------------------------------------
-
- inet/rpc/pmap_clnt.c:
-
- static struct timeval timeout <fix desired> <---
- static struct timeval tottimeout <fix desired> <---
-
- NOTE: These are okay, but should use the const keyword.
-
- --------------------------------------------------------------------
-
- inet/rpc/pmap_getport.c:
-
- static struct timeval timeout <fix desired> <---
- static struct timeval tottimeout <fix desired> <---
-
- NOTE: These are okay, but should use the const keyword.
-
- --------------------------------------------------------------------
-
- inet/rpc/pmap_rmt.c:
-
- static struct timeval timeout <fix desired> <---
-
- NOTE: This is okay, but should use the const keyword.
-
- --------------------------------------------------------------------
-
- inet/rpc/rpc_dtablesize.c:
-
- static int size;
-
- _rpc_dtablesize <fix required> <---
-
- --------------------------------------------------------------------
-
- inet/rpc/rpc_prot.c:
-
- static struct xdr_discrim reply_dscrm[3] <fix desired> <---
-
- NOTE: This is okay, but should use the const keyword.
-
- --------------------------------------------------------------------
-
- inet/rpc/svc.c:
-
- static SVCXPRT **xports;
- static SVCXPRT *xports[NOFILE];
- static struct svc_callout
-
- xprt_register <fix required> <---
- xprt_unregister <fix required> <---
- svc_getreqset <fix required> <---
- svc_register <fix required> <---
- svc_unregister <fix required> <---
- svc_callout <fix required> <---
-
- NOTE: This is intricate code, and care should be taken when making
- this thread-safe.
-
- --------------------------------------------------------------------
-
- inet/rpc/svc_auth.c:
-
- static struct svcauthsw <fix desired> <---
-
- NOTE: This is okay, but should use the const keyword.
-
- --------------------------------------------------------------------
-
- net/rpc/svc_raw.c:
-
- static struct svcraw_private
- static struct xp_ops server_ops
-
- svcraw_create <fix required> <---
- svcraw_recv <fix required> <---
- svcraw_reply <fix required> <---
- svcraw_getargs <fix required> <---
- svcraw_freeargs <fix required> <---
-
- NOTE: This is intricate code, and care should be taken when making
- this thread-safe.
-
- --------------------------------------------------------------------
-
- inet/rpc/svc_simple.c:
-
- static struct proglst
- static SVCXPRT *transp;
-
- registerrpc <fix required> <---
- universal <fix required> <---
-
- NOTE: This is intricate code, and care should be taken when making
- this thread-safe.
-
- --------------------------------------------------------------------
-
- inet/rpc/svc_tcp.c:
-
- static struct xp_ops svctcp_op
- static struct xp_ops svctcp_rendezvous_op
-
- svctcp_create <fix required> <---
- makefd_xprt <fix required> <---
-
- NOTE: This static structure is just a group of function pointers.
- It could probably be made const, but this might affect the function
- signature. This should be investigated further.
-
- static struct timeval wait_per_try
-
- readtcp <fix required> <---
-
- NOTE: This looks like a bug. This static timeout value is passed
- by reference to a select() call. According to the linux man page
- for select:
-
- "On Linux, timeout is modified to reflect the amount of
- time not slept; most other implementations do not do this.
- This causes problems both when Linux code which reads
- timeout is ported to other operating systems, and when
- code is ported to Linux that reuses a struct timeval for
- multiple selects in a loop without reinitializing it.
- Consider timeout to be undefined after select returns."
-
- Unless the implementation of select is different than that of Linux,
- this needs to be fixed!
-
- --------------------------------------------------------------------
-
- inet/rpc/svc_udp.c:
-
- static struct xp_ops svcudp_op <fix desired> (1)
-
- svcudp_bufcreate
-
- 1: This static structure is just a group of function pointers.
- It could probably be made const, but this might affect the function
- signature. This should be investigated further.
-
- --------------------------------------------------------------------
-
- inet/rpc/xdr.c:
-
- static char xdr_zero[BYTES_PER_XDR_UNIT] <fix desired> <---
-
- NOTE: This is okay, but should use the const keyword.
-
- static u_long crud[BYTES_PER_XDR_UNIT]
-
- NOTE: This looks like it doesn't matter what's in this array.
-
- --------------------------------------------------------------------
-
- inet/rpc/xdr_float.c:
-
- static struct sgl_limits <fix desired> <---
- static struct dbl_limits <fix desired> <---
-
- NOTE: These are okay, but should use the const keyword.
-
- --------------------------------------------------------------------
-
- inet/rpc/xdr_mem.c:
-
- static struct xdr_ops xdrmem_ops <fix desired> (1)
-
- xdrmem_create
-
- 1: This static structure is just a group of function pointers.
- It could probably be made const, but this might affect the function
- signature. This should be investigated further.
-
- --------------------------------------------------------------------
-
- inet/rpc/xdr_rec.c:
-
- static struct xdr_ops xdrrec_ops <fix desired> (1)
-
- xdrrec_create
-
- 1: This static structure is just a group of function pointers.
- It could probably be made const, but this might affect the function
- signature. This should be investigated further.
-
- --------------------------------------------------------------------
-
- inet/rpc/xdr_stdio.c:
-
- static struct xdr_ops xdrstdio_ops <fix desired> (1)
-
- xdrstdio_create
-
- 1: This static structure is just a group of function pointers.
- It could probably be made const, but this might affect the function
- signature. This should be investigated further.
-
- --------------------------------------------------------------------
-
- ld.so-1/d-link/boot1.c:
-
- static char *_dl_malloc_addr
- static char *_dl_mmap_zero
- static char *_dl_not_lazy
- static char *_dl_warn
- static char *_dl_trace_loaded_objects
-
- _dl_boot <fix required> <---
- _dl_malloc <fix required> <---
- _dl_fixup <fix required> <---
-
- These are all part of the shared library loader, and are not
- used by applications directly. Therefore, fixing these is not
- a high priority item.
-
- --------------------------------------------------------------------
-
- ld.so-1/d-link/readelflib1.c:
-
- static caddr_t _dl_cache_addr
- static size_t _dl_cache_size
-
- _dl_map_cache <fix required> <---
- _dl_unmap_cache <fix required> <---
- _dl_load_shared_library <fix required> <---
-
- These are all part of the shared library loader, and are not
- used by applications directly. Therefore, fixing these is not
- a high priority item.
-
- --------------------------------------------------------------------
-
- ld.so-1/d-link/string.h:
-
- static char local[22]
-
- _dl_simple_ltoa <fix required> <---
- _dl_simple_ltoahex <fix required> <---
-
- These are all part of the shared library loader, and are not
- used by applications directly. Therefore, fixing these is not
- a high priority item.
-
- --------------------------------------------------------------------
-
- ld.so-1/d-link/arm/elfinterp.c:
-
- static char *_dl_reltypes[] <fix desired> <---
-
- NOTE: This is okay, but should use the const keyword.
-
- --------------------------------------------------------------------
-
- ld.so-1/d-link/i386/elfinterp.c:
-
- static char *_dl_reltypes[] <fix desired> <---
-
- NOTE: This is okay, but should use the const keyword.
-
- These are all part of the shared library loader, and are not
- used by applications directly. Therefore, fixing these is not
- a high priority item.
-
- --------------------------------------------------------------------
-
- ld.so-1/d-link/m68k/elfinterp.c:
-
- static char *_dl_reltypes[] <fix desired> <---
-
- NOTE: This is okay, but should use the const keyword.
-
- These are all part of the shared library loader, and are not
- used by applications directly. Therefore, fixing these is not
- a high priority item.
-
- --------------------------------------------------------------------
-
- ld.so-1/d-link/sparc/elfinterp.c:
-
- st