* PATCH RFA: Use new pexecute routines in collect2
@ 2005-03-29 18:35 Ian Lance Taylor
2005-03-29 18:55 ` Zack Weinberg
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Ian Lance Taylor @ 2005-03-29 18:35 UTC (permalink / raw)
To: gcc-patches
This patch changes collect2.c to use the new pexecute routines which I
recently checked in. This should be the long-awaited fix to PR
bootstrap/14316 in mainline.
Tested with a bootstrap and testsuite run on i686-pc-linux-gnu, and by
building a cross to i386-netbsd and confirming that collect behaved as
it should when gathering global constructors and destructors by
parsing the output of nm.
OK for mainline?
Ian
2005-03-29 Ian Lance Taylor <ian@c2micro.com>
PR bootstrap/14316
* collect2.c: Never include <vfork.h>.
(VFORK_STRING, vfork): Don't define.
(pid): Remove global variable.
(handler): Call raise instead of kill (getpid(), ...).
(collect_wait): Add pex parameter. Change all callers. Use
pex_get_status rather than pwait.
(do_wait): Add pex parameter. Change all callers.
(collect_execute): Return struct pex_obj * rather than void. Use
pex routines rather than pexecute.
(fork_execute): Get pex_obj from collect_execute, and pass it to
do_wait.
(scan_prog_file): Use pex routines rather than pipe/vfork/exec.
Only declare quit_handler if SIGQUIT is defined.
(scan_libraries): Likewise.
* collect2.h (collect_execute): Update declaration.
(collect_wait): Update declaration.
* tlink.c (tlink_execute): Get pex_obj from collect_execute, and
pass it to collect_wait.
Index: collect2.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/collect2.c,v
retrieving revision 1.170
diff -u -r1.170 collect2.c
--- collect2.c 18 Jan 2005 11:36:01 -0000 1.170
+++ collect2.c 29 Mar 2005 18:23:58 -0000
@@ -35,19 +35,6 @@
# define SIGCHLD SIGCLD
#endif
-#ifdef vfork /* Autoconf may define this to fork for us. */
-# define VFORK_STRING "fork"
-#else
-# define VFORK_STRING "vfork"
-#endif
-#ifdef HAVE_VFORK_H
-#include <vfork.h>
-#endif
-#ifdef VMS
-#define vfork() (decc$$alloc_vfork_blocks() >= 0 ? \
- lib$get_current_invo_context(decc$$get_vfork_jmpbuf()) : -1)
-#endif /* VMS */
-
#ifndef LIBRARY_PATH_ENV
#define LIBRARY_PATH_ENV "LIBRARY_PATH"
#endif
@@ -217,9 +204,6 @@
struct obstack temporary_obstack;
char * temporary_firstobj;
-/* Holds the return value of pexecute and fork. */
-int pid;
-
/* Structure to hold all the directories in which to search for files to
execute. */
@@ -251,7 +235,7 @@
static void add_prefix (struct path_prefix *, const char *);
static void prefix_from_env (const char *, struct path_prefix *);
static void prefix_from_string (const char *, struct path_prefix *);
-static void do_wait (const char *);
+static void do_wait (const char *, struct pex_obj *);
static void fork_execute (const char *, char **);
static void maybe_unlink (const char *);
static void add_to_list (struct head *, const char *);
@@ -420,7 +404,7 @@
#endif
signal (signo, SIG_DFL);
- kill (getpid (), signo);
+ raise (signo);
}
\f
@@ -1501,11 +1485,14 @@
/* Wait for a process to finish, and exit if a nonzero status is found. */
int
-collect_wait (const char *prog)
+collect_wait (const char *prog, struct pex_obj *pex)
{
int status;
- pwait (pid, &status, 0);
+ if (!pex_get_status (pex, 1, &status))
+ fatal_perror ("can't get program status");
+ pex_free (pex);
+
if (status)
{
if (WIFSIGNALED (status))
@@ -1524,9 +1511,9 @@
}
static void
-do_wait (const char *prog)
+do_wait (const char *prog, struct pex_obj *pex)
{
- int ret = collect_wait (prog);
+ int ret = collect_wait (prog, pex);
if (ret != 0)
{
error ("%s returned %d exit status", prog, ret);
@@ -1537,14 +1524,12 @@
\f
/* Execute a program, and wait for the reply. */
-void
+struct pex_obj *
collect_execute (const char *prog, char **argv, const char *redir)
{
- char *errmsg_fmt;
- char *errmsg_arg;
- int redir_handle = -1;
- int stdout_save = -1;
- int stderr_save = -1;
+ struct pex_obj *pex;
+ const char *errmsg;
+ int err;
if (vflag || debug)
{
@@ -1571,47 +1556,35 @@
if (argv[0] == 0)
fatal ("cannot find '%s'", prog);
- if (redir)
- {
- /* Open response file. */
- redir_handle = open (redir, O_WRONLY | O_TRUNC | O_CREAT);
-
- /* Duplicate the stdout and stderr file handles
- so they can be restored later. */
- stdout_save = dup (STDOUT_FILENO);
- if (stdout_save == -1)
- fatal_perror ("redirecting stdout: %s", redir);
- stderr_save = dup (STDERR_FILENO);
- if (stderr_save == -1)
- fatal_perror ("redirecting stdout: %s", redir);
-
- /* Redirect stdout & stderr to our response file. */
- dup2 (redir_handle, STDOUT_FILENO);
- dup2 (redir_handle, STDERR_FILENO);
- }
-
- pid = pexecute (argv[0], argv, argv[0], NULL, &errmsg_fmt, &errmsg_arg,
- (PEXECUTE_FIRST | PEXECUTE_LAST | PEXECUTE_SEARCH));
-
- if (redir)
+ pex = pex_init (0, "collect2", NULL);
+ if (pex == NULL)
+ fatal_perror ("pex_init failed");
+
+ errmsg = pex_run (pex,
+ (PEX_LAST | PEX_SEARCH
+ | (redir ? PEX_STDERR_TO_STDOUT : 0)),
+ argv[0], argv, redir, NULL, &err);
+ if (errmsg != NULL)
{
- /* Restore stdout and stderr to their previous settings. */
- dup2 (stdout_save, STDOUT_FILENO);
- dup2 (stderr_save, STDERR_FILENO);
-
- /* Close response file. */
- close (redir_handle);
+ if (err != 0)
+ {
+ errno = err;
+ fatal_perror (errmsg);
+ }
+ else
+ fatal (errmsg);
}
- if (pid == -1)
- fatal_perror (errmsg_fmt, errmsg_arg);
+ return pex;
}
static void
fork_execute (const char *prog, char **argv)
{
- collect_execute (prog, argv, NULL);
- do_wait (prog);
+ struct pex_obj *pex;
+
+ pex = collect_execute (prog, argv, NULL);
+ do_wait (prog, pex);
}
\f
/* Unlink a file unless we are debugging. */
@@ -2033,11 +2006,15 @@
scan_prog_file (const char *prog_name, enum pass which_pass)
{
void (*int_handler) (int);
+#ifdef SIGQUIT
void (*quit_handler) (int);
+#endif
char *real_nm_argv[4];
const char **nm_argv = (const char **) real_nm_argv;
int argc = 0;
- int pipe_fd[2];
+ struct pex_obj *pex;
+ const char *errmsg;
+ int err;
char *p, buf[1024];
FILE *inf;
@@ -2055,13 +2032,6 @@
nm_argv[argc++] = prog_name;
nm_argv[argc++] = (char *) 0;
- if (pipe (pipe_fd) < 0)
- fatal_perror ("pipe");
-
- inf = fdopen (pipe_fd[0], "r");
- if (inf == (FILE *) 0)
- fatal_perror ("fdopen");
-
/* Trace if needed. */
if (vflag)
{
@@ -2077,35 +2047,30 @@
fflush (stdout);
fflush (stderr);
- /* Spawn child nm on pipe. */
- pid = vfork ();
- if (pid == -1)
- fatal_perror (VFORK_STRING);
+ pex = pex_init (PEX_USE_PIPES, "collect2", NULL);
+ if (pex == NULL)
+ fatal_perror ("pex_init failed");
- if (pid == 0) /* child context */
+ errmsg = pex_run (pex, 0, nm_file_name, real_nm_argv, NULL, NULL, &err);
+ if (errmsg != NULL)
{
- /* setup stdout */
- if (dup2 (pipe_fd[1], 1) < 0)
- fatal_perror ("dup2 %d 1", pipe_fd[1]);
-
- if (close (pipe_fd[0]) < 0)
- fatal_perror ("close %d", pipe_fd[0]);
-
- if (close (pipe_fd[1]) < 0)
- fatal_perror ("close %d", pipe_fd[1]);
-
- execv (nm_file_name, real_nm_argv);
- fatal_perror ("execv %s", nm_file_name);
+ if (err != 0)
+ {
+ errno = err;
+ fatal_perror (errmsg);
+ }
+ else
+ fatal (errmsg);
}
- /* Parent context from here on. */
int_handler = (void (*) (int)) signal (SIGINT, SIG_IGN);
#ifdef SIGQUIT
quit_handler = (void (*) (int)) signal (SIGQUIT, SIG_IGN);
#endif
- if (close (pipe_fd[1]) < 0)
- fatal_perror ("close %d", pipe_fd[1]);
+ inf = pex_read_output (pex, 0);
+ if (inf == NULL)
+ fatal_perror ("can't open nm output");
if (debug)
fprintf (stderr, "\nnm output with constructors/destructors.\n");
@@ -2179,10 +2144,7 @@
if (debug)
fprintf (stderr, "\n");
- if (fclose (inf) != 0)
- fatal_perror ("fclose");
-
- do_wait (nm_file_name);
+ do_wait (nm_file_name, pex);
signal (SIGINT, int_handler);
#ifdef SIGQUIT
@@ -2202,11 +2164,15 @@
static struct head libraries; /* list of shared libraries found */
struct id *list;
void (*int_handler) (int);
+#ifdef SIGQUIT
void (*quit_handler) (int);
+#endif
char *real_ldd_argv[4];
const char **ldd_argv = (const char **) real_ldd_argv;
int argc = 0;
- int pipe_fd[2];
+ struct pex_obj *pex;
+ const char *errmsg;
+ int err;
char buf[1024];
FILE *inf;
@@ -2221,13 +2187,6 @@
ldd_argv[argc++] = prog_name;
ldd_argv[argc++] = (char *) 0;
- if (pipe (pipe_fd) < 0)
- fatal_perror ("pipe");
-
- inf = fdopen (pipe_fd[0], "r");
- if (inf == (FILE *) 0)
- fatal_perror ("fdopen");
-
/* Trace if needed. */
if (vflag)
{
@@ -2243,35 +2202,30 @@
fflush (stdout);
fflush (stderr);
- /* Spawn child ldd on pipe. */
- pid = vfork ();
- if (pid == -1)
- fatal_perror (VFORK_STRING);
+ pex = pex_init (PEX_USE_PIPES, "collect2", NULL);
+ if (pex == NULL)
+ fatal_perror ("pex_init failed");
- if (pid == 0) /* child context */
+ errmsg = pex_run (pex, 0, ldd_file_name, real_ldd_argv, NULL, NULL, &err);
+ if (errmsg != NULL)
{
- /* setup stdout */
- if (dup2 (pipe_fd[1], 1) < 0)
- fatal_perror ("dup2 %d 1", pipe_fd[1]);
-
- if (close (pipe_fd[0]) < 0)
- fatal_perror ("close %d", pipe_fd[0]);
-
- if (close (pipe_fd[1]) < 0)
- fatal_perror ("close %d", pipe_fd[1]);
-
- execv (ldd_file_name, real_ldd_argv);
- fatal_perror ("execv %s", ldd_file_name);
+ if (err != 0)
+ {
+ errno = err;
+ fatal_perror (errmsg);
+ }
+ else
+ fatal (errmsg);
}
- /* Parent context from here on. */
int_handler = (void (*) (int)) signal (SIGINT, SIG_IGN);
#ifdef SIGQUIT
quit_handler = (void (*) (int)) signal (SIGQUIT, SIG_IGN);
#endif
- if (close (pipe_fd[1]) < 0)
- fatal_perror ("close %d", pipe_fd[1]);
+ inf = pex_read_output (pex, 0);
+ if (inf == NULL)
+ fatal_perror ("can't open ldd output");
if (debug)
notice ("\nldd output with constructors/destructors.\n");
@@ -2309,10 +2263,7 @@
if (debug)
fprintf (stderr, "\n");
- if (fclose (inf) != 0)
- fatal_perror ("fclose");
-
- do_wait (ldd_file_name);
+ do_wait (ldd_file_name, pex);
signal (SIGINT, int_handler);
#ifdef SIGQUIT
Index: collect2.h
===================================================================
RCS file: /cvs/gcc/gcc/gcc/collect2.h,v
retrieving revision 1.10
diff -u -r1.10 collect2.h
--- collect2.h 15 Oct 2004 14:47:06 -0000 1.10
+++ collect2.h 29 Mar 2005 18:23:58 -0000
@@ -1,5 +1,5 @@
/* Header file for collect/tlink routines.
- Copyright (C) 1998, 2003, 2004 Free Software Foundation, Inc.
+ Copyright (C) 1998, 2003, 2004, 2005 Free Software Foundation, Inc.
This file is part of GCC.
@@ -23,11 +23,11 @@
extern void do_tlink (char **, char **);
-extern void collect_execute (const char *, char **, const char *);
+extern struct pex_obj *collect_execute (const char *, char **, const char *);
extern void collect_exit (int) ATTRIBUTE_NORETURN;
-extern int collect_wait (const char *);
+extern int collect_wait (const char *, struct pex_obj *);
extern void dump_file (const char *);
Index: tlink.c
===================================================================
RCS file: /cvs/gcc/gcc/gcc/tlink.c,v
retrieving revision 1.59
diff -u -r1.59 tlink.c
--- tlink.c 9 Nov 2004 10:12:19 -0000 1.59
+++ tlink.c 29 Mar 2005 18:24:04 -0000
@@ -1,7 +1,7 @@
/* Scan linker error messages for missing template instantiations and provide
them.
- Copyright (C) 1995, 1998, 1999, 2000, 2001, 2003, 2004
+ Copyright (C) 1995, 1998, 1999, 2000, 2001, 2003, 2004, 2005
Free Software Foundation, Inc.
Contributed by Jason Merrill (jason@cygnus.com).
@@ -281,8 +281,10 @@
static int
tlink_execute (const char *prog, char **argv, const char *redir)
{
- collect_execute (prog, argv, redir);
- return collect_wait (prog);
+ struct pex_obj *pex;
+
+ pex = collect_execute (prog, argv, redir);
+ return collect_wait (prog, pex);
}
static char *
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH RFA: Use new pexecute routines in collect2
2005-03-29 18:35 PATCH RFA: Use new pexecute routines in collect2 Ian Lance Taylor
@ 2005-03-29 18:55 ` Zack Weinberg
2005-03-29 19:42 ` Ian Lance Taylor
2005-03-29 21:16 ` Mike Stump
2005-03-29 20:16 ` Joseph S. Myers
2005-03-30 5:21 ` Ian Lance Taylor
2 siblings, 2 replies; 9+ messages in thread
From: Zack Weinberg @ 2005-03-29 18:55 UTC (permalink / raw)
To: Ian Lance Taylor; +Cc: gcc-patches
Ian Lance Taylor <ian@airs.com> writes:
> This patch changes collect2.c to use the new pexecute routines which I
> recently checked in. This should be the long-awaited fix to PR
> bootstrap/14316 in mainline.
>
> Tested with a bootstrap and testsuite run on i686-pc-linux-gnu, and by
> building a cross to i386-netbsd and confirming that collect behaved as
> it should when gathering global constructors and destructors by
> parsing the output of nm.
>
> OK for mainline?
I think this is okay. I may have missed something, though. Do we
have anyone who really understands collect2?
I'm very glad to see this finally getting fixed, by the way.
zw
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH RFA: Use new pexecute routines in collect2
2005-03-29 18:55 ` Zack Weinberg
@ 2005-03-29 19:42 ` Ian Lance Taylor
2005-03-29 21:16 ` Mike Stump
1 sibling, 0 replies; 9+ messages in thread
From: Ian Lance Taylor @ 2005-03-29 19:42 UTC (permalink / raw)
To: Zack Weinberg; +Cc: gcc-patches
Zack Weinberg <zack@codesourcery.com> writes:
> > This patch changes collect2.c to use the new pexecute routines which I
> > recently checked in. This should be the long-awaited fix to PR
> > bootstrap/14316 in mainline.
> I think this is okay.
Thanks, committed.
> I may have missed something, though. Do we
> have anyone who really understands collect2?
I'm not fully up on tlink.c, but I understand collect2.c. I had to
learn it in detail several years ago when I implemented the same
functionality in the GNU linker.
Ian
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH RFA: Use new pexecute routines in collect2
2005-03-29 18:35 PATCH RFA: Use new pexecute routines in collect2 Ian Lance Taylor
2005-03-29 18:55 ` Zack Weinberg
@ 2005-03-29 20:16 ` Joseph S. Myers
2005-03-29 20:23 ` Ian Lance Taylor
2005-03-30 5:21 ` Ian Lance Taylor
2 siblings, 1 reply; 9+ messages in thread
From: Joseph S. Myers @ 2005-03-29 20:16 UTC (permalink / raw)
To: Ian Lance Taylor; +Cc: gcc-patches
On Tue, 29 Mar 2005, Ian Lance Taylor wrote:
> This patch changes collect2.c to use the new pexecute routines which I
> recently checked in. This should be the long-awaited fix to PR
> bootstrap/14316 in mainline.
I think this patch should also fix a bootstrap failure on hppa2.0w-hpux
which appeared today with the previous pexecute changes. (collect2 was
failing to interpret nm's exit status properly, producing errors like
collect2: /usr/ccs/bin/nm terminated with signal 96 [], core dumped
and it looked to me like the problem could be nm being invoked with vfork
and pwait being called with a pid from vfork which was no longer suitable
for pwait, which now expects pexecute's internal pids instead.)
--
Joseph S. Myers http://www.srcf.ucam.org/~jsm28/gcc/
jsm@polyomino.org.uk (personal mail)
joseph@codesourcery.com (CodeSourcery mail)
jsm28@gcc.gnu.org (Bugzilla assignments and CCs)
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH RFA: Use new pexecute routines in collect2
2005-03-29 20:16 ` Joseph S. Myers
@ 2005-03-29 20:23 ` Ian Lance Taylor
0 siblings, 0 replies; 9+ messages in thread
From: Ian Lance Taylor @ 2005-03-29 20:23 UTC (permalink / raw)
To: Joseph S. Myers; +Cc: gcc-patches
"Joseph S. Myers" <joseph@codesourcery.com> writes:
> On Tue, 29 Mar 2005, Ian Lance Taylor wrote:
>
> > This patch changes collect2.c to use the new pexecute routines which I
> > recently checked in. This should be the long-awaited fix to PR
> > bootstrap/14316 in mainline.
>
> I think this patch should also fix a bootstrap failure on hppa2.0w-hpux
> which appeared today with the previous pexecute changes. (collect2 was
> failing to interpret nm's exit status properly, producing errors like
>
> collect2: /usr/ccs/bin/nm terminated with signal 96 [], core dumped
>
> and it looked to me like the problem could be nm being invoked with vfork
> and pwait being called with a pid from vfork which was no longer suitable
> for pwait, which now expects pexecute's internal pids instead.)
Very likely. I hadn't noticed that collect2 assumed that pexecute and
vfork returned comparable PID numbers.
Ian
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH RFA: Use new pexecute routines in collect2
2005-03-29 18:55 ` Zack Weinberg
2005-03-29 19:42 ` Ian Lance Taylor
@ 2005-03-29 21:16 ` Mike Stump
1 sibling, 0 replies; 9+ messages in thread
From: Mike Stump @ 2005-03-29 21:16 UTC (permalink / raw)
To: Zack Weinberg; +Cc: Ian Lance Taylor, gcc-patches
On Mar 29, 2005, at 10:52 AM, Zack Weinberg wrote:
> I think this is okay. I may have missed something, though. Do we
> have anyone who really understands collect2?
I think we do, I'd claim to. There are some weird aspects to it
( [ cough ] AIX [cough] ), but most of the details are strait forward.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH RFA: Use new pexecute routines in collect2
2005-03-29 18:35 PATCH RFA: Use new pexecute routines in collect2 Ian Lance Taylor
2005-03-29 18:55 ` Zack Weinberg
2005-03-29 20:16 ` Joseph S. Myers
@ 2005-03-30 5:21 ` Ian Lance Taylor
2005-03-30 5:55 ` Zack Weinberg
2005-03-30 22:07 ` Mike Stump
2 siblings, 2 replies; 9+ messages in thread
From: Ian Lance Taylor @ 2005-03-30 5:21 UTC (permalink / raw)
To: gcc-patches
Ian Lance Taylor <ian@airs.com> writes:
> This patch changes collect2.c to use the new pexecute routines which I
> recently checked in. This should be the long-awaited fix to PR
> bootstrap/14316 in mainline.
As a followup to that patch, this patch enables building collect2 for
mingw32.
OK for mainline?
After this patch, the only systems on which collect2 is not built are
alpha*-dec-*vms* and powerpc-*-beos*. collect2 would work on those
systems if the new pexecute routines work on them. However, I do not
have any way to test them.
Ian
2005-03-30 Ian Lance Taylor <ian@airs.com>
* config.host (i[34567]86-*-mingw32*): Don't set
host_can_use_collect2 to no.
Index: config.host
===================================================================
RCS file: /cvs/gcc/gcc/gcc/config.host,v
retrieving revision 2.13
diff -u -r2.13 config.host
--- config.host 7 Mar 2005 22:42:41 -0000 2.13
+++ config.host 30 Mar 2005 05:09:37 -0000
@@ -154,7 +154,6 @@
host_xm_file=i386/xm-mingw32.h
host_xmake_file=i386/x-mingw32
host_exeext=.exe
- host_can_use_collect2=no
out_host_hook_obj=host-mingw32.o
;;
i[34567]86-*-uwin*)
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH RFA: Use new pexecute routines in collect2
2005-03-30 5:21 ` Ian Lance Taylor
@ 2005-03-30 5:55 ` Zack Weinberg
2005-03-30 22:07 ` Mike Stump
1 sibling, 0 replies; 9+ messages in thread
From: Zack Weinberg @ 2005-03-30 5:55 UTC (permalink / raw)
To: Ian Lance Taylor; +Cc: gcc-patches
Ian Lance Taylor <ian@airs.com> writes:
> Ian Lance Taylor <ian@airs.com> writes:
>
>> This patch changes collect2.c to use the new pexecute routines which I
>> recently checked in. This should be the long-awaited fix to PR
>> bootstrap/14316 in mainline.
>
> As a followup to that patch, this patch enables building collect2 for
> mingw32.
>
> OK for mainline?
OK. Note that the paranoid ^C-unwind logic in collect2 is
nonfunctional on Windows. I do not know how necessary it is, though.
Equivalent logic *can* be implemented but only with great difficulty
(to do it right you need access to SEH).
zw
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: PATCH RFA: Use new pexecute routines in collect2
2005-03-30 5:21 ` Ian Lance Taylor
2005-03-30 5:55 ` Zack Weinberg
@ 2005-03-30 22:07 ` Mike Stump
1 sibling, 0 replies; 9+ messages in thread
From: Mike Stump @ 2005-03-30 22:07 UTC (permalink / raw)
To: Ian Lance Taylor; +Cc: gcc-patches
On Mar 29, 2005, at 9:12 PM, Ian Lance Taylor wrote:
> As a followup to that patch, this patch enables building collect2 for
> mingw32.
If we get rid of alpha-vms and beos, we could get rid of
host_can_use_collect2=no!
:-)
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2005-03-30 22:03 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-03-29 18:35 PATCH RFA: Use new pexecute routines in collect2 Ian Lance Taylor
2005-03-29 18:55 ` Zack Weinberg
2005-03-29 19:42 ` Ian Lance Taylor
2005-03-29 21:16 ` Mike Stump
2005-03-29 20:16 ` Joseph S. Myers
2005-03-29 20:23 ` Ian Lance Taylor
2005-03-30 5:21 ` Ian Lance Taylor
2005-03-30 5:55 ` Zack Weinberg
2005-03-30 22:07 ` Mike Stump
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).