diff options
Diffstat (limited to 'lang/gcc27/files/patch-gcc.c')
-rw-r--r-- | lang/gcc27/files/patch-gcc.c | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/lang/gcc27/files/patch-gcc.c b/lang/gcc27/files/patch-gcc.c new file mode 100644 index 000000000000..bd00b5c711d7 --- /dev/null +++ b/lang/gcc27/files/patch-gcc.c @@ -0,0 +1,229 @@ +--- gcc.c.orig Tue Jun 24 11:42:50 1997 ++++ gcc.c Mon Mar 20 13:29:11 2000 +@@ -32,6 +32,7 @@ + compilation is specified by a string called a "spec". */ + + #include <sys/types.h> ++#include <sys/wait.h> + #include <ctype.h> + #include <signal.h> + #include <sys/stat.h> +@@ -53,6 +54,9 @@ + #include <varargs.h> + #endif + #include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <string.h> + + /* Include multi-lib information. */ + #include "multilib.h" +@@ -1620,7 +1624,6 @@ + char **envp; + int num_envs = 0; + int name_len = 1; +- int str_len = strlen (str); + char *p = str; + int ch; + +@@ -2095,7 +2098,7 @@ + /* Exec the program. */ + (*func) (program, argv); + perror_exec (program); +- exit (-1); ++ _exit (1); + /* NOTREACHED */ + return 0; + +@@ -2324,6 +2327,10 @@ + char *language; + }; + ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++static int objformat_aout = 0; ++#endif ++ + /* Also a vector of input files specified. */ + + static struct infile *infiles; +@@ -2469,6 +2476,39 @@ + } + } + ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++ { ++ /* first hint is /etc/objformat */ ++ FILE *fp = fopen("/etc/objformat", "r"); ++ if (fp) { ++ char buf[1024]; ++ buf[1023] = '\0'; ++ while (fgets(buf, sizeof(buf) - 1, fp) != NULL) { ++ i = strlen(buf); ++ if (buf[i - 1] == '\n') ++ buf[i - 1] = '\0'; ++ if (strcmp(buf, "OBJFORMAT=aout") == 0) ++ objformat_aout = 1; ++ else if (strcmp(buf, "OBJFORMAT=elf") == 0) ++ objformat_aout = 0; ++ else ++ fprintf(stderr, "Unrecognized line in /etc/objformat: %s\n", buf); ++ } ++ fclose(fp); ++ } ++ /* but the user $OBJFORMAT overrides system default */ ++ temp = getenv("OBJFORMAT"); ++ if (temp) { ++ if (strcmp(temp, "aout") == 0) ++ objformat_aout = 1; ++ else if (strcmp(temp, "elf") == 0) ++ objformat_aout = 0; ++ else ++ fprintf(stderr, "Unrecognized value of $OBJFORMAT: %s\n", temp); ++ } ++ } ++#endif ++ + /* Convert new-style -- options to old-style. */ + translate_options (&argc, &argv); + +@@ -2478,6 +2518,19 @@ + + for (i = 1; i < argc; i++) + { ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++ /* .. and command line args override all */ ++ if (strcmp (argv[i], "-aout") == 0) ++ { ++ objformat_aout = 1; ++ continue; ++ } ++ else if (strcmp (argv[i], "-elf") == 0) ++ { ++ objformat_aout = 0; ++ continue; ++ } ++#endif + if (! strcmp (argv[i], "-dumpspecs")) + { + printf ("*asm:\n%s\n\n", asm_spec); +@@ -2703,6 +2756,18 @@ + (such as cpp) rather than those of the host system. */ + /* Use 2 as fourth arg meaning try just the machine as a suffix, + as well as trying the machine and the version. */ ++#ifdef FREEBSD_NATIVE ++#if defined(__i386__) ++ if (objformat_aout) { ++ n_switches++; /* add implied -maout */ ++ add_prefix (&exec_prefixes, "/usr/libexec/aout/", 0, 0, NULL_PTR); ++ } else ++ add_prefix (&exec_prefixes, "/usr/libexec/elf/", 0, 0, NULL_PTR); ++#endif ++ add_prefix (&exec_prefixes, "/usr/libexec/", 0, 0, NULL_PTR); ++ add_prefix (&exec_prefixes, "/usr/bin/", 0, 0, NULL_PTR); ++ add_prefix (&startfile_prefixes, "/usr/libdata/gcc/", 0, 0, NULL_PTR); ++#else /* not FREEBSD_NATIVE */ + #ifndef OS2 + add_prefix (&exec_prefixes, standard_exec_prefix, 0, 2, NULL_PTR); + add_prefix (&exec_prefixes, standard_exec_prefix_1, 0, 2, NULL_PTR); +@@ -2710,6 +2775,7 @@ + + add_prefix (&startfile_prefixes, standard_exec_prefix, 0, 1, NULL_PTR); + add_prefix (&startfile_prefixes, standard_exec_prefix_1, 0, 1, NULL_PTR); ++#endif /* FREEBSD_NATIVE */ + + tooldir_prefix = concat3 (tooldir_base_prefix, spec_machine, + dir_separator_str); +@@ -2744,12 +2810,14 @@ + dir_separator_str, tooldir_prefix); + } + ++#ifndef FREEBSD_NATIVE + add_prefix (&exec_prefixes, + concat3 (tooldir_prefix, "bin", dir_separator_str), + 0, 0, NULL_PTR); + add_prefix (&startfile_prefixes, + concat3 (tooldir_prefix, "lib", dir_separator_str), + 0, 0, NULL_PTR); ++#endif /* FREEBSD_NATIVE */ + + /* More prefixes are enabled in main, after we read the specs file + and determine whether this is cross-compilation or not. */ +@@ -2768,6 +2836,19 @@ + to the copy in the vector of switches. + Store all the infiles in their vector. */ + ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++ if (objformat_aout == 1) { ++ switches[n_switches].part1 = "maout"; ++ switches[n_switches].args = 0; ++ switches[n_switches].live_cond = 0; ++ switches[n_switches].valid = 0; ++ n_switches++; ++ putenv("OBJFORMAT=aout"); ++ } else { ++ putenv("OBJFORMAT=elf"); ++ } ++#endif ++ + for (i = 1; i < argc; i++) + { + /* Just skip the switches that were handled by the preceding loop. */ +@@ -2787,6 +2868,12 @@ + ; + else if (! strcmp (argv[i], "-print-multi-directory")) + ; ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++ else if (! strcmp (argv[i], "-aout")) ++ ; ++ else if (! strcmp (argv[i], "-elf")) ++ ; ++#endif + else if (argv[i][0] == '+' && argv[i][1] == 'e') + { + /* Compensate for the +e options to the C++ front-end; +@@ -3770,7 +3857,7 @@ + { + int c1 = *p++; /* Select first or second version number. */ + char *v = compiler_version; +- char *q, *copy; ++ char *q; + /* If desired, advance to second version number. */ + if (c1 == '2') + { +@@ -4266,8 +4353,10 @@ + + /* Read specs from a file if there is one. */ + ++#ifndef FREEBSD_NATIVE + machine_suffix = concat4 (spec_machine, dir_separator_str, + spec_version, dir_separator_str); ++#endif + just_machine_suffix = concat (spec_machine, dir_separator_str); + + specs_file = find_a_file (&startfile_prefixes, "specs", R_OK); +@@ -4326,6 +4415,7 @@ + 0, 0, NULL_PTR); + } + ++#ifndef FREEBSD_NATIVE + add_prefix (&startfile_prefixes, standard_startfile_prefix_1, 0, 0, + NULL_PTR); + add_prefix (&startfile_prefixes, standard_startfile_prefix_2, 0, 0, +@@ -4333,6 +4423,8 @@ + #if 0 /* Can cause surprises, and one can use -B./ instead. */ + add_prefix (&startfile_prefixes, "./", 0, 1, NULL_PTR); + #endif ++#endif /* FREEBSD_NATIVE */ ++ + } + else + { +@@ -4423,7 +4515,7 @@ + } + + if (n_infiles == 0) +- fatal ("No input files"); ++ fatal ("No input files specified"); + + /* Make a place to record the compiler output file names + that correspond to the input files. */ |