diff options
author | obrien <obrien@FreeBSD.org> | 1999-11-29 10:41:21 +0000 |
---|---|---|
committer | obrien <obrien@FreeBSD.org> | 1999-11-29 10:41:21 +0000 |
commit | 1d683d70e044f98db371c43ff89096a08520fd60 (patch) | |
tree | 37a994bc7678cd3bf55afdfa58704a9009c4c793 /contrib | |
parent | 6081138a553e384c735ad487b4a497fb76cacd8c (diff) | |
download | FreeBSD-src-1d683d70e044f98db371c43ff89096a08520fd60.zip FreeBSD-src-1d683d70e044f98db371c43ff89096a08520fd60.tar.gz |
* Use getobjformat() rather than manually do what it does.
* Don't conditional based on i386, but generalize to all FreeBSD arch's.
* Don't be a.out-centric, but generalize to handle other possible future
formats.
Submitted by: marcel (partial)
Diffstat (limited to 'contrib')
-rw-r--r-- | contrib/gcc/gcc.c | 114 |
1 files changed, 43 insertions, 71 deletions
diff --git a/contrib/gcc/gcc.c b/contrib/gcc/gcc.c index c57a1c2..86635a4 100644 --- a/contrib/gcc/gcc.c +++ b/contrib/gcc/gcc.c @@ -2405,8 +2405,12 @@ static int warn_std; /* 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 */ +#if defined(FREEBSD_NATIVE) +#include <objformat.h> + +typedef enum { OBJFMT_UNKNOWN, OBJFMT_AOUT, OBJFMT_ELF } objf_t; + +static objf_t objformat = OBJFMT_UNKNOWN; #endif #if defined(HAVE_OBJECT_SUFFIX) || defined(HAVE_EXECUTABLE_SUFFIX) @@ -2726,36 +2730,16 @@ process_command (argc, argv) } } -#if defined(FREEBSD_NATIVE) && defined(__i386__) +#if defined(FREEBSD_NATIVE) { - /* 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; + char buf[64]; + if (getobjformat (buf, sizeof buf, &argc, argv)) + if (strcmp (buf, "aout") == 0) + objformat = OBJFMT_AOUT; + else if (strcmp (buf, "elf") == 0) + objformat = OBJFMT_ELF; else - fprintf(stderr, "Unrecognized value of $OBJFORMAT: %s\n", temp); - } + fprintf(stderr, "Unrecognized object format: %s\n", buf); } #endif @@ -2771,19 +2755,6 @@ process_command (argc, argv) 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; @@ -3108,18 +3079,21 @@ process_command (argc, argv) /* 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", + switch (objformat) + { + case OBJFMT_AOUT: + n_switches++; /* add implied -maout */ + add_prefix (&exec_prefixes, "/usr/libexec/aout/", "BINUTILS", + 0, 0, NULL_PTR); + break; + case OBJFMT_ELF: + add_prefix (&exec_prefixes, "/usr/libexec/elf/", "BINUTILS", + 0, 0, NULL_PTR); + break; + } + add_prefix (&exec_prefixes, "/usr/libexec/", "GCC", 0, 0, warn_std_ptr); - add_prefix (&exec_prefixes, "/usr/bin", "GCC", + 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); @@ -3196,17 +3170,21 @@ process_command (argc, argv) 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].validated = 0; - n_switches++; - putenv("OBJFORMAT=aout"); - } else { - putenv("OBJFORMAT=elf"); - } +#if defined(FREEBSD_NATIVE) + switch (objformat) + { + case OBJFMT_AOUT: + switches[n_switches].part1 = "maout"; + switches[n_switches].args = 0; + switches[n_switches].live_cond = 0; + switches[n_switches].validated = 0; + n_switches++; + putenv("OBJFORMAT=aout"); + break; + case OBJFMT_ELF: + putenv("OBJFORMAT=elf"); + break; + } #endif for (i = 1; i < argc; i++) @@ -3228,12 +3206,6 @@ process_command (argc, argv) ; 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) |