From 1fab8e81071db8ea8dfe62de8a6d79efd9dc4646 Mon Sep 17 00:00:00 2001 From: Richard Stallman Date: Wed, 1 Apr 1992 05:06:34 +0000 Subject: [PATCH] *** empty log message *** From-SVN: r656 --- gcc/collect2.c | 138 +++++++++++++------------------------------------ 1 file changed, 35 insertions(+), 103 deletions(-) diff --git a/gcc/collect2.c b/gcc/collect2.c index 320ac7d47df..292ee3690d8 100644 --- a/gcc/collect2.c +++ b/gcc/collect2.c @@ -45,12 +45,10 @@ extern int errno; #include "config.h" #ifndef __STDC__ -#include "gvarargs.h" #define generic char #define const #else -#include "gstdarg.h" #define generic void #endif @@ -198,11 +196,8 @@ static void choose_temp_base (); generic *xcalloc (); generic *xmalloc (); - -#if !defined(HAVE_STRERROR) && !defined(_OSF_SOURCE) - char * -strerror (e) +my_strerror (e) int e; { extern char *sys_errlist[]; @@ -218,9 +213,6 @@ strerror (e) sprintf (buffer, "Unknown error %d", e); return buffer; } - -#endif - /* Delete tempfiles and exit function. */ @@ -238,109 +230,43 @@ my_exit (status) } -#ifndef __STDC__ - /* Die when sys call fails. */ -/*VARARGS*/ static void -fatal_perror (va_alist) +fatal_perror (string, arg1, arg2, arg3) + char *string; { - char *string; - va_list vptr; int e = errno; - va_start (vptr); - string = va_arg (vptr, char *); fprintf (stderr, "collect: "); - vfprintf (stderr, string, vptr); - fprintf (stderr, ": %s\n", strerror (e)); - va_end (vptr); + fprintf (stderr, string, arg1, arg2, arg3); + fprintf (stderr, ": %s\n", my_strerror (e)); my_exit (1); } /* Just die. */ -/*VARARGS*/ static void -fatal (va_alist) +fatal (string, arg1, arg2, arg3) + char *string; { - char *string; - va_list vptr; - - va_start (vptr); - string = va_arg (vptr, char *); fprintf (stderr, "collect: "); - vfprintf (stderr, string, vptr); + fprintf (stderr, string, arg1, arg2, arg3); fprintf (stderr, "\n"); - va_end (vptr); my_exit (1); } /* Write error message. */ -/*VARARGS*/ static void -error (va_alist) +error (string, arg1, arg2, arg3, arg4) + char *string; { - char *string; - va_list vptr; - - va_start (vptr); - string = va_arg (vptr, char *); fprintf (stderr, "collect: "); - vfprintf (stderr, string, vptr); + fprintf (stderr, string, arg1, arg2, arg3, arg4); fprintf (stderr, "\n"); - va_end (vptr); } -#else - -static void -fatal_perror (char *string, ...) -{ - va_list vptr; - int e = errno; - - va_start (vptr, string); - fprintf (stderr, "collect: "); - vfprintf (stderr, string, vptr); - fprintf (stderr, ": %s\n", strerror (e)); - va_end (vptr); - my_exit (1); -} - -/* Just die. */ - -static void -fatal (char *string, ...) -{ - va_list vptr; - - va_start (vptr, string); - fprintf (stderr, "collect: "); - vfprintf (stderr, string, vptr); - fprintf (stderr, "\n"); - va_end (vptr); - my_exit (1); -} - -/* Write error message. */ - -static void -error (char *string, ...) -{ - va_list vptr; - - va_start (vptr, string); - fprintf (stderr, "collect: "); - vfprintf (stderr, string, vptr); - fprintf (stderr, "\n"); - va_end (vptr); -} -#endif - - /* In case obstack is linked in, and abort is defined to fancy_abort, provide a default entry. */ @@ -374,7 +300,7 @@ xcalloc (size1, size2) if (ptr) return ptr; - fatal ("Out of memory."); + fatal ("out of memory"); return (generic *)0; } @@ -386,7 +312,7 @@ xmalloc (size) if (ptr) return ptr; - fatal ("Out of memory."); + fatal ("out of memory"); return (generic *)0; } @@ -398,7 +324,8 @@ savestring (input, size) int size; { char *output = (char *) xmalloc (size + 1); - strcpy (output, input); + bcopy (input, output, size); + output[size] = 0; return output; } @@ -792,12 +719,12 @@ main (argc, argv) outf = fopen (c_file, "w"); if (outf == (FILE *)0) - fatal_perror ("Can't write %s", c_file); + fatal_perror ("%s", c_file); write_c_file (outf, c_file); if (fclose (outf)) - fatal_perror ("Can't close %s", c_file); + fatal_perror ("closing %s", c_file); if (debug) { @@ -897,7 +824,7 @@ fork_execute (prog, argv) if (pid == 0) /* child context */ { execvp (prog, argv); - fatal_perror ("Execute %s", prog); + fatal_perror ("executing %s", prog); } int_handler = (void (*) ())signal (SIGINT, SIG_IGN); @@ -1070,16 +997,16 @@ scan_prog_file (prog_name, which_pass) { /* setup stdout */ if (dup2 (pipe_fd[1], 1) < 0) - fatal_perror ("Dup2 (%d, 1)", pipe_fd[1]); + fatal_perror ("dup2 (%d, 1)", pipe_fd[1]); if (close (pipe_fd[0]) < 0) - fatal_perror ("Close (%d)", pipe_fd[0]); + fatal_perror ("close (%d)", pipe_fd[0]); if (close (pipe_fd[1]) < 0) - fatal_perror ("Close (%d)", pipe_fd[1]); + fatal_perror ("close (%d)", pipe_fd[1]); execv (nm_file_name, nm_argv); - fatal_perror ("Execute %s", nm_file_name); + fatal_perror ("executing %s", nm_file_name); } /* Parent context from here on. */ @@ -1087,7 +1014,7 @@ scan_prog_file (prog_name, which_pass) quit_handler = (void (*) ())signal (SIGQUIT, SIG_IGN); if (close (pipe_fd[1]) < 0) - fatal_perror ("Close (%d)", pipe_fd[1]); + fatal_perror ("close (%d)", pipe_fd[1]); if (debug) fprintf (stderr, "\nnm output with constructors/destructors.\n"); @@ -1351,7 +1278,7 @@ scan_prog_file (prog_name, which_pass) prog_fd = open (prog_name, (rw) ? O_RDWR : O_RDONLY); if (prog_fd < 0) - fatal_perror ("Can't read %s", prog_name); + fatal_perror ("can't read %s", prog_name); obj_file = read_file (prog_name, prog_fd, rw); obj = obj_file->start; @@ -1374,7 +1301,7 @@ scan_prog_file (prog_name, which_pass) || hdr.moh_cpu_subtype != OUR_CPU_SUBTYPE || hdr.moh_vendor_type != OUR_VENDOR_TYPE) { - fatal ("incompatibilities exist between object file & expected values."); + fatal ("incompatibilities between object file & expected values"); } #endif @@ -1505,7 +1432,7 @@ scan_prog_file (prog_name, which_pass) } if (symbol_load_cmds == 0) - fatal ("no symbol table found."); + fatal ("no symbol table found"); /* Update the program file now, rewrite header and load commands. At present, we assume that there is enough space after the last load command to insert @@ -1518,10 +1445,15 @@ scan_prog_file (prog_name, which_pass) size_t size; if (cmd_strings == -1) - fatal ("no cmd_strings found."); + fatal ("no cmd_strings found"); + + /* Add __main to initializer list. + If we are building a program instead of a shared library, don't + do anything, since in the current version, you cannot do mallocs + and such in the constructors. */ - /* Add __main to initializer list. */ - if (main_sym != (symbol_info_t *)0) + if (main_sym != (symbol_info_t *)0 + && ((hdr.moh_flags & MOH_EXECABLE_F) == 0)) add_func_table (&hdr, load_array, main_sym, FNTC_INITIALIZATION); if (debug) @@ -1583,7 +1515,7 @@ scan_prog_file (prog_name, which_pass) end_file (obj_file); if (close (prog_fd)) - fatal_perror ("Can't close %s", prog_name); + fatal_perror ("closing %s", prog_name); if (debug) fprintf (stderr, "\n"); -- 2.30.2