strcat (temp, name);
if (strcmp (temp, our_file_name) != 0
&& ! (last_file_name != 0 && strcmp (temp, last_file_name) == 0)
+ /* This is a kludge, but there seems no way around it. */
+ && strcmp (temp, "./ld") != 0
&& access (temp, X_OK) == 0)
return temp;
and destructors to call.
Write the constructor and destructor tables to a .s file and reload. */
- fork_execute (ld_file_name, ld1_argv);
+ fork_execute ("ld", ld1_argv);
/* If -r, don't build the constructor or destructor list, just return now. */
if (rflag)
if (strip_flag)
{
char **strip_argv = (char **) xcalloc (sizeof (char *), 3);
- strip_argv[0] = "strip";
+ strip_argv[0] = strip_file_name;
strip_argv[1] = outfile;
strip_argv[2] = (char *) 0;
- fork_execute (strip_file_name, strip_argv);
+ fork_execute ("strip", strip_argv);
}
return 0;
}
/* Assemble the constructor and destructor tables.
Link the tables in with the rest of the program. */
- fork_execute (c_file_name, c_argv);
- fork_execute (ld_file_name, ld2_argv);
+ fork_execute ("gcc", c_argv);
+ fork_execute ("ld", ld2_argv);
/* Let scan_prog_file do any final mods (OSF/rose needs this for
constructors/destructors in shared libraries. */
char **p_argv;
char *str;
- if (prog)
- fprintf (stderr, "%s", prog);
+ if (argv[0])
+ fprintf (stderr, "%s", argv[0]);
else
- fprintf (stderr, "[cannot find %s]", argv[0]);
+ fprintf (stderr, "[cannot find %s]", prog);
for (p_argv = &argv[1]; (str = *p_argv) != (char *)0; p_argv++)
fprintf (stderr, " %s", str);
/* If we can't find a program we need, complain error. Do this here
since we might not end up needing something that we couldn't find. */
- if (prog == 0)
- fatal ("cannot find `%s'", argv[0]);
+ if (argv[0] == 0)
+ fatal ("cannot find `%s'", prog);
pid = vfork ();
if (pid == -1)
if (pid == 0) /* child context */
{
- execvp (prog, argv);
+ execvp (argv[0], argv);
fatal_perror ("executing %s", prog);
}