* [PATCH] Nuke another 21 .plt slots
@ 2002-08-05 14:54 Jakub Jelinek
2002-08-05 15:11 ` Roland McGrath
0 siblings, 1 reply; 10+ messages in thread
From: Jakub Jelinek @ 2002-08-05 14:54 UTC (permalink / raw)
To: Ulrich Drepper; +Cc: Glibc hackers
Hi!
With this I'm at 141 .plt slots on IA-32.
2002-08-05 Jakub Jelinek <jakub@redhat.com>
* include/wchar.h (wcrtomb, wcscmp, wcsftime, wcsspn, wcschr, wcscoll,
wcspbrk): Add libc_hidden_proto.
* time/strftime.c (my_strftime): Add libc_hidden_def.
(strftime): Remove libc_hidden_def.
* wcsmbs/wcschr.c (wcschr): Add libc_hidden_def.
* wcsmbs/wcspbrk.c (wcspbrk): Likewise.
* wcsmbs/wcsspn.c (wcsspn): Likewise.
* wcsmbs/wcscmp.c (wcscmp): Likewise.
* wcsmbs/wcrtomb.c (wcrtomb): Add libc_hidden_weak.
* wcsmbs/wcscoll.c (wcscoll): Likewise.
* include/rpc/rpc.h (__rpc_thread_svc_max_pollfd,
__rpc_thread_svc_pollfd, __rpc_thread_svc_fdset,
__rpc_thread_createerr): Add libc_hidden_proto.
* sunrpc/rpc_thread.c (__rpc_thread_svc_max_pollfd,
__rpc_thread_svc_pollfd, __rpc_thread_svc_fdset,
__rpc_thread_createerr): Add libc_hidden_def.
* include/rpc/clnt.h (clnt_sperrno, clnt_spcreateerror,
clnt_perror, clnt_sperror, _rpc_dtablesize): Add libc_hidden_proto.
* sunrpc/clnt_perr.c (clnt_sperrno, clnt_spcreateerror,
clnt_perror, clnt_sperror): Add libc_hidden_def.
* sunrpc/rpc_dtable.c (_rpc_dtablesize): Likewise.
* include/rpc/des_crypt.h (des_setparity, ecb_crypt, cbc_crypt): Add
libc_hidden_proto.
* sunrpc/des_crypt.c (ecb_crypt, cbc_crypt): Add libc_hidden_proto.
* sunrpc/des_soft.c (des_setparity): Likewise.
* include/rpc/auth.h (key_encryptsession_pk, key_decryptsession_pk):
Add libc_hidden_proto.
* sunrpc/key_call.c (key_encryptsession_pk, key_decryptsession_pk):
Add libc_hidden_def.
--- libc/include/wchar.h.jj 2002-08-05 08:44:15.000000000 +0200
+++ libc/include/wchar.h 2002-08-05 23:10:38.000000000 +0200
@@ -19,6 +19,13 @@ libc_hidden_proto (putwc_unlocked)
libc_hidden_proto (vswscanf)
+libc_hidden_proto (wcrtomb)
+libc_hidden_proto (wcscmp)
+libc_hidden_proto (wcsftime)
+libc_hidden_proto (wcsspn)
+libc_hidden_proto (wcschr)
+libc_hidden_proto (wcscoll)
+libc_hidden_proto (wcspbrk)
/* Now define the internal interfaces. */
extern int __wcscasecmp (__const wchar_t *__s1, __const wchar_t *__s2)
--- libc/include/rpc/rpc.h.jj 2002-08-03 11:09:26.000000000 +0200
+++ libc/include/rpc/rpc.h 2002-08-05 22:12:52.000000000 +0200
@@ -49,6 +49,11 @@ __libc_tsd_define (extern, RPC_VARS)
#define RPC_THREAD_VARIABLE(x) (__rpc_thread_variables()->x)
+libc_hidden_proto (__rpc_thread_svc_max_pollfd)
+libc_hidden_proto (__rpc_thread_svc_pollfd)
+libc_hidden_proto (__rpc_thread_svc_fdset)
+libc_hidden_proto (__rpc_thread_createerr)
+
#endif /* _RPC_THREAD_SAFE_ */
#endif
--- libc/include/rpc/clnt.h.jj 2002-06-05 10:27:28.000000000 +0200
+++ libc/include/rpc/clnt.h 2002-08-05 22:15:34.000000000 +0200
@@ -26,4 +26,10 @@ extern CLIENT *clntunix_create_internal
int *__sockp, u_int __sendsz,
u_int __recvsz) attribute_hidden;
+libc_hidden_proto (clnt_sperrno)
+libc_hidden_proto (clnt_spcreateerror)
+libc_hidden_proto (clnt_perror)
+libc_hidden_proto (clnt_sperror)
+libc_hidden_proto (_rpc_dtablesize)
+
#endif
--- libc/include/rpc/des_crypt.h.jj 2000-12-31 16:34:36.000000000 +0100
+++ libc/include/rpc/des_crypt.h 2002-08-05 23:17:20.000000000 +0200
@@ -6,4 +6,8 @@
extern int xencrypt (char *secret, char *passwd);
extern int xdecrypt (char *secret, char *passwd);
+libc_hidden_proto (des_setparity)
+libc_hidden_proto (ecb_crypt)
+libc_hidden_proto (cbc_crypt)
+
#endif
--- libc/include/rpc/auth.h.jj 2002-06-05 10:27:27.000000000 +0200
+++ libc/include/rpc/auth.h 2002-08-05 23:17:58.000000000 +0200
@@ -28,4 +28,7 @@ extern AUTH *authdes_pk_create_internal
struct sockaddr *,
des_block *) attribute_hidden;
+libc_hidden_proto (key_encryptsession_pk)
+libc_hidden_proto (key_decryptsession_pk)
+
#endif
--- libc/sunrpc/clnt_perr.c.jj 2002-08-05 08:44:19.000000000 +0200
+++ libc/sunrpc/clnt_perr.c 2002-08-05 22:18:16.000000000 +0200
@@ -150,6 +150,7 @@ clnt_sperror (CLIENT * rpch, const char
*++str = '\0';
return (strstart);
}
+libc_hidden_def (clnt_sperror)
void
clnt_perror (CLIENT * rpch, const char *msg)
@@ -161,6 +162,7 @@ clnt_perror (CLIENT * rpch, const char *
#endif
(void) fputs (clnt_sperror (rpch, msg), stderr);
}
+libc_hidden_def (clnt_perror)
struct rpc_errtab
@@ -282,6 +284,7 @@ clnt_sperrno (enum clnt_stat stat)
}
return _("RPC: (unknown error code)");
}
+libc_hidden_def (clnt_sperrno)
void
clnt_perrno (enum clnt_stat num)
@@ -329,6 +332,7 @@ clnt_spcreateerror (const char *msg)
*++cp = '\0';
return str;
}
+libc_hidden_def (clnt_spcreateerror)
void
clnt_pcreateerror (const char *msg)
--- libc/sunrpc/rpc_dtable.c.jj 2001-03-26 10:02:29.000000000 +0200
+++ libc/sunrpc/rpc_dtable.c 2002-08-05 22:24:14.000000000 +0200
@@ -48,3 +48,4 @@ _rpc_dtablesize (void)
return size;
}
+libc_hidden_def (_rpc_dtablesize)
--- libc/sunrpc/rpc_thread.c.jj 2002-08-03 11:09:35.000000000 +0200
+++ libc/sunrpc/rpc_thread.c 2002-08-05 22:26:36.000000000 +0200
@@ -85,6 +85,7 @@ __rpc_thread_svc_fdset (void)
return &svc_fdset;
return &tvp->svc_fdset_s;
}
+libc_hidden_def (__rpc_thread_svc_fdset)
struct rpc_createerr *
__rpc_thread_createerr (void)
@@ -96,6 +97,7 @@ __rpc_thread_createerr (void)
return &rpc_createerr;
return &tvp->rpc_createerr_s;
}
+libc_hidden_def (__rpc_thread_createerr)
struct pollfd **
__rpc_thread_svc_pollfd (void)
@@ -107,6 +109,7 @@ __rpc_thread_svc_pollfd (void)
return &svc_pollfd;
return &tvp->svc_pollfd_s;
}
+libc_hidden_def (__rpc_thread_svc_pollfd)
int *
__rpc_thread_svc_max_pollfd (void)
@@ -118,4 +121,6 @@ __rpc_thread_svc_max_pollfd (void)
return &svc_max_pollfd;
return &tvp->svc_max_pollfd_s;
}
+libc_hidden_def (__rpc_thread_svc_max_pollfd)
+
#endif /* _RPC_THREAD_SAFE_ */
--- libc/sunrpc/des_crypt.c.jj 2001-03-26 10:02:27.000000000 +0200
+++ libc/sunrpc/des_crypt.c 2002-08-05 23:18:49.000000000 +0200
@@ -105,7 +105,7 @@ cbc_crypt (char *key, char *buf, unsigne
COPY8 (dp.des_ivec, ivec);
return err;
}
-
+libc_hidden_def (cbc_crypt)
/*
* ECB mode encryption
@@ -118,3 +118,4 @@ ecb_crypt (char *key, char *buf, unsigne
dp.des_mode = ECB;
return common_crypt (key, buf, len, mode, &dp);
}
+libc_hidden_def (ecb_crypt)
--- libc/sunrpc/des_soft.c.jj 2001-03-26 10:02:28.000000000 +0200
+++ libc/sunrpc/des_soft.c 2002-08-05 23:19:19.000000000 +0200
@@ -68,3 +68,4 @@ des_setparity (char *p)
p++;
}
}
+libc_hidden_def (des_setparity)
--- libc/sunrpc/key_call.c.jj 2002-06-05 10:27:41.000000000 +0200
+++ libc/sunrpc/key_call.c 2002-08-05 23:20:07.000000000 +0200
@@ -177,6 +177,7 @@ key_encryptsession_pk (char *remotename,
*deskey = res.cryptkeyres_u.deskey;
return 0;
}
+libc_hidden_def (key_encryptsession_pk)
int
key_decryptsession_pk (char *remotename, netobj *remotekey,
@@ -201,6 +202,7 @@ key_decryptsession_pk (char *remotename,
*deskey = res.cryptkeyres_u.deskey;
return 0;
}
+libc_hidden_def (key_decryptsession_pk)
int
key_gendes (des_block *key)
--- libc/time/strftime.c.jj 2002-08-03 19:20:54.000000000 +0200
+++ libc/time/strftime.c 2002-08-05 22:57:12.000000000 +0200
@@ -1362,7 +1362,7 @@ my_strftime (s, maxsize, format, tp ut_a
return i;
}
#ifdef _LIBC
-libc_hidden_def (strftime)
+libc_hidden_def (my_strftime)
#endif
--- libc/wcsmbs/wcschr.c.jj 2001-08-07 14:14:05.000000000 +0200
+++ libc/wcsmbs/wcschr.c 2002-08-05 22:41:56.000000000 +0200
@@ -32,3 +32,4 @@ wcschr (wcs, wc)
return NULL;
}
+libc_hidden_def (wcschr)
--- libc/wcsmbs/wcspbrk.c.jj 2001-08-07 14:14:06.000000000 +0200
+++ libc/wcsmbs/wcspbrk.c 2002-08-05 22:42:26.000000000 +0200
@@ -34,3 +34,4 @@ wcspbrk (wcs, accept)
return NULL;
}
+libc_hidden_def (wcspbrk)
--- libc/wcsmbs/wcsspn.c.jj 2001-08-07 14:14:06.000000000 +0200
+++ libc/wcsmbs/wcsspn.c 2002-08-05 22:47:18.000000000 +0200
@@ -44,3 +44,4 @@ wcsspn (wcs, accept)
return count;
}
+libc_hidden_def (wcsspn)
--- libc/wcsmbs/wcscoll.c.jj 2002-08-05 22:46:41.000000000 +0200
+++ libc/wcsmbs/wcscoll.c 2002-08-05 22:46:41.000000000 +0200
@@ -38,4 +38,5 @@
#ifndef USE_IN_EXTENDED_LOCALE_MODEL
weak_alias (__wcscoll, wcscoll)
+libc_hidden_weak (wcscoll)
#endif
--- libc/wcsmbs/wcscmp.c.jj 2001-08-07 14:14:05.000000000 +0200
+++ libc/wcsmbs/wcscmp.c 2002-08-05 22:47:50.000000000 +0200
@@ -41,3 +41,4 @@ wcscmp (s1, s2)
return c1 - c2;
}
+libc_hidden_def (wcscmp)
--- libc/wcsmbs/wcrtomb.c.jj 2001-08-07 14:14:05.000000000 +0200
+++ libc/wcsmbs/wcrtomb.c 2002-08-05 22:53:25.000000000 +0200
@@ -108,3 +108,4 @@ __wcrtomb (char *s, wchar_t wc, mbstate_
return result;
}
weak_alias (__wcrtomb, wcrtomb)
+libc_hidden_weak (wcrtomb)
Jakub
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] Nuke another 21 .plt slots
2002-08-05 14:54 [PATCH] Nuke another 21 .plt slots Jakub Jelinek
@ 2002-08-05 15:11 ` Roland McGrath
2002-08-05 15:18 ` Jakub Jelinek
0 siblings, 1 reply; 10+ messages in thread
From: Roland McGrath @ 2002-08-05 15:11 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: Ulrich Drepper, Glibc hackers
Thanks! I put those in. However, my PLT count does not match yours. I
get 169 in a build with TLS support, and I think that is only one more than
without TLS.
I have been counting using this script (it gives a list of symbols; pipe it
to wc -l), which counts only PLT slots for symbols defined in libc itself,
and omits the malloc functions that are explicit exceptions. That count is
now 121.
#!/bin/sh
goodones='__libc_free
__libc_malloc
__libc_memalign
__libc_realloc
free
calloc
malloc
realloc'
readelf -rW libc.so | awk '/JUMP_SLOT/ && $4 != "00000000" { print $5 }' |
fgrep -vx "$goodones" | sort
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] Nuke another 21 .plt slots
2002-08-05 15:11 ` Roland McGrath
@ 2002-08-05 15:18 ` Jakub Jelinek
2002-08-05 15:21 ` Roland McGrath
0 siblings, 1 reply; 10+ messages in thread
From: Jakub Jelinek @ 2002-08-05 15:18 UTC (permalink / raw)
To: Roland McGrath; +Cc: Ulrich Drepper, Glibc hackers
On Mon, Aug 05, 2002 at 06:11:55PM -0400, Roland McGrath wrote:
> Thanks! I put those in. However, my PLT count does not match yours. I
> get 169 in a build with TLS support, and I think that is only one more than
> without TLS.
>
> I have been counting using this script (it gives a list of symbols; pipe it
> to wc -l), which counts only PLT slots for symbols defined in libc itself,
> and omits the malloc functions that are explicit exceptions. That count is
> now 121.
>
> #!/bin/sh
>
> goodones='__libc_free
> __libc_malloc
> __libc_memalign
> __libc_realloc
> free
> calloc
> malloc
> realloc'
This list is too short, e.g. __fork and some others which are to
be overridden by libpthread.so should be in the list too.
> readelf -rW libc.so | awk '/JUMP_SLOT/ && $4 != "00000000" { print $5 }' |
> fgrep -vx "$goodones" | sort
I believe the difference can be that my build was with -O3, so a bunch
of calls were inlined and thus not going externally.
I'll try an -O2 build tomorrow.
Jakub
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] Nuke another 21 .plt slots
2002-08-05 15:18 ` Jakub Jelinek
@ 2002-08-05 15:21 ` Roland McGrath
2002-08-05 15:42 ` Ulrich Drepper
0 siblings, 1 reply; 10+ messages in thread
From: Roland McGrath @ 2002-08-05 15:21 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: Ulrich Drepper, Glibc hackers
> This list is too short, e.g. __fork and some others which are to
> be overridden by libpthread.so should be in the list too.
Righto. I will amend my list from libpthread.
> I believe the difference can be that my build was with -O3, so a bunch
> of calls were inlined and thus not going externally.
> I'll try an -O2 build tomorrow.
Then we should make -O3 the default, should we not?
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] Nuke another 21 .plt slots
2002-08-05 15:21 ` Roland McGrath
@ 2002-08-05 15:42 ` Ulrich Drepper
2002-08-05 23:20 ` Jakub Jelinek
0 siblings, 1 reply; 10+ messages in thread
From: Ulrich Drepper @ 2002-08-05 15:42 UTC (permalink / raw)
To: Roland McGrath; +Cc: Jakub Jelinek, Glibc hackers
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Roland McGrath wrote:
> Then we should make -O3 the default, should we not?
No. See my mail to rth from Sunday or Saturday.
(There is a bug in gcc where it inlines far too much when -O3 is used.)
- --
- ---------------. ,-. 1325 Chesapeake Terrace
Ulrich Drepper \ ,-------------------' \ Sunnyvale, CA 94089 USA
Red Hat `--' drepper at redhat.com `------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQE9Tv8B2ijCOnn/RHQRAiAQAJ9gCjzRxv7bN/XqjDMaB576jNO7fgCeKiC4
qwQlzUVj/htNc78zH5vkxXE=
=0+9h
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] Nuke another 21 .plt slots
2002-08-05 15:42 ` Ulrich Drepper
@ 2002-08-05 23:20 ` Jakub Jelinek
2002-08-05 23:43 ` Ulrich Drepper
0 siblings, 1 reply; 10+ messages in thread
From: Jakub Jelinek @ 2002-08-05 23:20 UTC (permalink / raw)
To: Ulrich Drepper; +Cc: Roland McGrath, Glibc hackers
On Mon, Aug 05, 2002 at 03:41:05PM -0700, Ulrich Drepper wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Roland McGrath wrote:
>
> > Then we should make -O3 the default, should we not?
>
> No. See my mail to rth from Sunday or Saturday.
>
> (There is a bug in gcc where it inlines far too much when -O3 is used.)
If -O3 could inline only static or explicit inline routines, it would
be far less useful than it currently is (for the applications which benefit
from automatic inlining, of course, the majority does not).
Aren't we going to have a list of 10 or how many functions which need to
go through .plt and the rest does not? If yes,
then __attribute__ ((noinline)) for those 10 would suffice.
Jakub
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] Nuke another 21 .plt slots
2002-08-05 23:20 ` Jakub Jelinek
@ 2002-08-05 23:43 ` Ulrich Drepper
2002-08-06 0:08 ` Roland McGrath
0 siblings, 1 reply; 10+ messages in thread
From: Ulrich Drepper @ 2002-08-05 23:43 UTC (permalink / raw)
To: Jakub Jelinek; +Cc: Roland McGrath, Glibc hackers
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Jakub Jelinek wrote:
> If -O3 could inline only static or explicit inline routines, it would
> be far less useful than it currently is (for the applications which benefit
> from automatic inlining, of course, the majority does not).
The problem is not loss of optimization. The semantics f code gets
changed. And incorrectly so. gcc cannot inline a non-static function
unless its visibility != default. It might be possible to add a gcc
option to signal that all functions can be assumed to be non-preemptible.
- --
- ---------------. ,-. 1325 Chesapeake Terrace
Ulrich Drepper \ ,-------------------' \ Sunnyvale, CA 94089 USA
Red Hat `--' drepper at redhat.com `------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQE9T28s2ijCOnn/RHQRAvVsAJ0T3Y7mxqpqNxVndZWjPCZ+hkrSXQCeP9AK
18XrDpDvZ8qqVTAew4Y1cSs=
=7nCZ
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] Nuke another 21 .plt slots
2002-08-05 23:43 ` Ulrich Drepper
@ 2002-08-06 0:08 ` Roland McGrath
2002-08-06 0:10 ` Roland McGrath
2002-08-06 0:19 ` Ulrich Drepper
0 siblings, 2 replies; 10+ messages in thread
From: Roland McGrath @ 2002-08-06 0:08 UTC (permalink / raw)
To: Ulrich Drepper; +Cc: Jakub Jelinek, Glibc hackers
> The problem is not loss of optimization. The semantics f code gets
> changed. And incorrectly so. gcc cannot inline a non-static function
> unless its visibility != default. It might be possible to add a gcc
> option to signal that all functions can be assumed to be non-preemptible.
I don't think it is so unreasonable. Anything that is written so that it
would work with static linking would work will come out right (i.e. you can
only inline in the same module and it would be a multiple definition if
there were a competing definition elsewhere), except for special cases
defining weak functions.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] Nuke another 21 .plt slots
2002-08-06 0:08 ` Roland McGrath
@ 2002-08-06 0:10 ` Roland McGrath
2002-08-06 0:19 ` Ulrich Drepper
1 sibling, 0 replies; 10+ messages in thread
From: Roland McGrath @ 2002-08-06 0:10 UTC (permalink / raw)
To: Ulrich Drepper, Jakub Jelinek, Glibc hackers
However, -O3 also produces plain old bad code in rtld.c when TLS is enabled.
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH] Nuke another 21 .plt slots
2002-08-06 0:08 ` Roland McGrath
2002-08-06 0:10 ` Roland McGrath
@ 2002-08-06 0:19 ` Ulrich Drepper
1 sibling, 0 replies; 10+ messages in thread
From: Ulrich Drepper @ 2002-08-06 0:19 UTC (permalink / raw)
To: Roland McGrath; +Cc: Jakub Jelinek, Glibc hackers
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Roland McGrath wrote:
> I don't think it is so unreasonable.
What exactly? That gcc by default is generating code with different
semantics based on the optimization level?
> Anything that is written so that it
> would work with static linking would work will come out right (i.e. you can
> only inline in the same module and it would be a multiple definition if
> there were a competing definition elsewhere), except for special cases
> defining weak functions.
I have no problem with this being possible. But the user must tell the
compiler to do so. There is a lot of code out there which depends on
interposition being possible. All optimizations default on the safe
side, why not this one as well?
- --
- ---------------. ,-. 1325 Chesapeake Terrace
Ulrich Drepper \ ,-------------------' \ Sunnyvale, CA 94089 USA
Red Hat `--' drepper at redhat.com `------------------------
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.0.6 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iD8DBQE9T3d62ijCOnn/RHQRAsxlAKChbETqVF7MiHubYxzSugqU8nJ8RACeIunj
3no+m3gkdxDOKdinWmUQYks=
=xmoz
-----END PGP SIGNATURE-----
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2002-08-06 7:19 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-08-05 14:54 [PATCH] Nuke another 21 .plt slots Jakub Jelinek
2002-08-05 15:11 ` Roland McGrath
2002-08-05 15:18 ` Jakub Jelinek
2002-08-05 15:21 ` Roland McGrath
2002-08-05 15:42 ` Ulrich Drepper
2002-08-05 23:20 ` Jakub Jelinek
2002-08-05 23:43 ` Ulrich Drepper
2002-08-06 0:08 ` Roland McGrath
2002-08-06 0:10 ` Roland McGrath
2002-08-06 0:19 ` Ulrich Drepper
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).