diff options
author | David E. O'Brien <obrien@FreeBSD.org> | 2000-12-04 22:07:01 +0000 |
---|---|---|
committer | David E. O'Brien <obrien@FreeBSD.org> | 2000-12-04 22:07:01 +0000 |
commit | 9edbb8400e4feef83a779c4715c19e11e1ab2347 (patch) | |
tree | f3f6e61b2f6cbbe4b95531b0d0eb9cc777931c48 /lang/egcs/files/patch-gcc.c | |
parent | 1463f41888eaa3a7383be71656b2345b49f8f846 (diff) | |
download | ports-9edbb8400e4feef83a779c4715c19e11e1ab2347.tar.gz ports-9edbb8400e4feef83a779c4715c19e11e1ab2347.zip |
Add all of the FreeBSD hacks I had in the base EGCS-1.1.2 compiler way
back when... that is all but a.out support.
Notes
Notes:
svn path=/head/; revision=35660
Diffstat (limited to 'lang/egcs/files/patch-gcc.c')
-rw-r--r-- | lang/egcs/files/patch-gcc.c | 234 |
1 files changed, 234 insertions, 0 deletions
diff --git a/lang/egcs/files/patch-gcc.c b/lang/egcs/files/patch-gcc.c new file mode 100644 index 000000000000..f361addd9cc7 --- /dev/null +++ b/lang/egcs/files/patch-gcc.c @@ -0,0 +1,234 @@ +--- gcc/gcc.c.orig 1999/08/26 09:27:23 1.1.1.3 ++++ gcc/gcc.c 1999/09/13 15:50:16 1.10 +@@ -21,6 +21,8 @@ + This paragraph is here to try to keep Sun CC from dying. + The number of chars here seems crucial!!!! */ + ++/* $from_FreeBSD: src/contrib/gcc/gcc.c,v 1.10 1999/09/13 15:50:16 bde Exp $ */ ++ + /* This program is the user interface to the C compiler and possibly to + other compilers. It is used because compilation is a complicated procedure + which involves running several programs and passing temporary files between +@@ -2401,6 +2403,9 @@ + /* Gives value to pass as "warn" to add_prefix for standard prefixes. */ + static int *warn_std_ptr = 0; + ++#if defined(FREEBSD_NATIVE) && defined(__i386__) ++static int objformat_aout = 0; /* ELF by default */ ++#endif + + #if defined(HAVE_OBJECT_SUFFIX) || defined(HAVE_EXECUTABLE_SUFFIX) + +@@ -2712,6 +2717,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); + +@@ -2726,6 +2764,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")) + { + struct spec_list *sl; +@@ -3049,6 +3100,23 @@ + (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/", "BINUTILS", ++ 0, 0, NULL_PTR); ++ } else ++ add_prefix (&exec_prefixes, "/usr/libexec/elf/", "BINUTILS", ++ 0, 0, NULL_PTR); ++#endif ++ add_prefix (&exec_prefixes, "/usr/libexec", "GCC", ++ 0, 0, warn_std_ptr); ++ add_prefix (&exec_prefixes, "/usr/bin", "GCC", ++ 0, 0, warn_std_ptr); ++ add_prefix (&startfile_prefixes, "/usr/libdata/gcc/", "BINUTILS", ++ 0, 0, warn_std_ptr); ++#else /* not FREEBSD_NATIVE */ + #ifndef OS2 + add_prefix (&exec_prefixes, standard_exec_prefix, "BINUTILS", + 0, 2, warn_std_ptr); +@@ -3060,6 +3128,7 @@ + 0, 1, warn_std_ptr); + add_prefix (&startfile_prefixes, standard_exec_prefix_1, "BINUTILS", + 0, 1, warn_std_ptr); ++#endif /* FREEBSD_NATIVE */ + + tooldir_prefix = concat (tooldir_base_prefix, spec_machine, + dir_separator_str, NULL_PTR); +@@ -3094,12 +3163,14 @@ + dir_separator_str, tooldir_prefix, NULL_PTR); + } + ++#ifndef FREEBSD_NATIVE + add_prefix (&exec_prefixes, + concat (tooldir_prefix, "bin", dir_separator_str, NULL_PTR), + "BINUTILS", 0, 0, NULL_PTR); + add_prefix (&startfile_prefixes, + concat (tooldir_prefix, "lib", dir_separator_str, NULL_PTR), + "BINUTILS", 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. */ +@@ -3118,6 +3189,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. */ +@@ -3137,6 +3221,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 (strcmp (argv[i], "-fhelp") == 0) + { + if (verbose_flag) +@@ -4592,6 +4682,7 @@ + *cp++ = '.'; + *cp = '\0'; + ++#ifndef FREEBSD_NATIVE + /* Exclude directories that the linker is known to search. */ + if (linker + && ((cp - path == 6 +@@ -4602,6 +4693,7 @@ + dir_separator_str, "lib", + dir_separator_str, ".", NULL_PTR)) == 0))) + return 0; ++#endif /* FREEBSD_NATIVE */ + + return (stat (path, &st) >= 0 && S_ISDIR (st.st_mode)); + } +@@ -4775,9 +4867,13 @@ + + /* Read specs from a file if there is one. */ + ++#ifndef FREEBSD_NATIVE + machine_suffix = concat (spec_machine, dir_separator_str, + spec_version, dir_separator_str, NULL_PTR); + just_machine_suffix = concat (spec_machine, dir_separator_str, NULL_PTR); ++#else /* FREEBSD_NATIVE */ ++ just_machine_suffix = ""; ++#endif /* FREEBSD_NATIVE */ + + specs_file = find_a_file (&startfile_prefixes, "specs", R_OK); + /* Read the specs file unless it is a default one. */ +@@ -4857,6 +4953,7 @@ + NULL_PTR, 0, 0, NULL_PTR); + } + ++#ifndef FREEBSD_NATIVE + add_prefix (&startfile_prefixes, standard_startfile_prefix_1, + "BINUTILS", 0, 0, NULL_PTR); + add_prefix (&startfile_prefixes, standard_startfile_prefix_2, +@@ -4864,6 +4961,7 @@ + #if 0 /* Can cause surprises, and one can use -B./ instead. */ + add_prefix (&startfile_prefixes, "./", NULL_PTR, 0, 1, NULL_PTR); + #endif ++#endif /* FREEBSD_NATIVE */ + } + else + { +@@ -4947,7 +5045,7 @@ + + if (! verbose_flag) + { +- printf ("\nReport bugs to egcs-bugs@egcs.cygnus.com.\n"); ++ printf ("\nReport bugs to egcs-bugs@cygnus.com.\n"); + printf ("Please see the file BUGS (included with the sources) first.\n"); + + exit (0); +@@ -4981,7 +5079,7 @@ + } + + if (n_infiles == added_libraries) +- 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. */ +@@ -5137,7 +5235,7 @@ + + if (print_help_list) + { +- printf ("\nReport bugs to egcs-bugs@egcs.cygnus.com.\n"); ++ printf ("\nReport bugs to egcs-bugs@cygnus.com.\n"); + printf ("Please see the file BUGS (included with the sources) first.\n"); + } + |