aboutsummaryrefslogtreecommitdiff
path: root/lang/egcs/files/patch-gcc.c
diff options
context:
space:
mode:
authorDavid E. O'Brien <obrien@FreeBSD.org>2000-12-04 22:07:01 +0000
committerDavid E. O'Brien <obrien@FreeBSD.org>2000-12-04 22:07:01 +0000
commit9edbb8400e4feef83a779c4715c19e11e1ab2347 (patch)
treef3f6e61b2f6cbbe4b95531b0d0eb9cc777931c48 /lang/egcs/files/patch-gcc.c
parent1463f41888eaa3a7383be71656b2345b49f8f846 (diff)
downloadports-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.c234
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");
+ }
+