* emultempl/spuelf.em (spu_elf_relink): Use pex_one in place
authorNick Clifton <nickc@redhat.com>
Thu, 1 Dec 2011 11:38:32 +0000 (11:38 +0000)
committerNick Clifton <nickc@redhat.com>
Thu, 1 Dec 2011 11:38:32 +0000 (11:38 +0000)
of execvp.

ld/ChangeLog
ld/emultempl/spuelf.em

index 0d6bd93..25d2f23 100644 (file)
@@ -1,3 +1,8 @@
+2011-12-01  Nick Clifton  <nickc@redhat.com>
+
+       * emultempl/spuelf.em (spu_elf_relink): Use pex_one in place
+       of execvp.
+
 2011-11-25  John Tytgat  <john@bass-software.com>
 
        * emultempl/armelf.em: Update copyright to 2010 and 2011.
index 92f2d16..714d33d 100644 (file)
@@ -384,9 +384,13 @@ spu_elf_open_overlay_script (void)
   return script;
 }
 
+#include <errno.h>
+
 static void
 spu_elf_relink (void)
 {
+  const char *pex_return;
+  int status;
   char **argv = xmalloc ((my_argc + 4) * sizeof (*argv));
 
   memcpy (argv, my_argv, my_argc * sizeof (*argv));
@@ -397,9 +401,16 @@ spu_elf_relink (void)
   argv[my_argc++] = "-T";
   argv[my_argc++] = auto_overlay_file;
   argv[my_argc] = 0;
-  execvp (argv[0], (char *const *) argv);
-  perror (argv[0]);
-  _exit (127);
+
+  pex_return = pex_one (PEX_SEARCH | PEX_LAST, (const char *) argv[0],
+                       (char * const *) argv, (const char *) argv[0],
+                       NULL, NULL, & status, & errno);
+  if (pex_return != NULL)
+    {
+      perror (pex_return);
+      _exit (127);
+    }
+  exit (status);
 }
 
 /* Final emulation specific call.  */