Index: ld/emultempl/spuelf.em =================================================================== RCS file: /cvs/src/src/ld/emultempl/spuelf.em,v retrieving revision 1.43 diff -u -3 -p -r1.43 spuelf.em --- ld/emultempl/spuelf.em 13 Jan 2011 13:06:22 -0000 1.43 +++ ld/emultempl/spuelf.em 29 Nov 2011 12:36:02 -0000 @@ -384,9 +384,13 @@ spu_elf_open_overlay_script (void) return script; } +#include + 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. */