summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>1999-11-29 10:41:21 +0000
committerobrien <obrien@FreeBSD.org>1999-11-29 10:41:21 +0000
commit1d683d70e044f98db371c43ff89096a08520fd60 (patch)
tree37a994bc7678cd3bf55afdfa58704a9009c4c793 /contrib
parent6081138a553e384c735ad487b4a497fb76cacd8c (diff)
downloadFreeBSD-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.c114
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)
OpenPOWER on IntegriCloud