public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* 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).