summaryrefslogtreecommitdiffstats
path: root/gnu
diff options
context:
space:
mode:
authorpeter <peter@FreeBSD.org>1998-03-08 05:29:49 +0000
committerpeter <peter@FreeBSD.org>1998-03-08 05:29:49 +0000
commitc39aed21a8d0e0849e9678f826151961a0762e3b (patch)
treea6ca8932d003c3051dc60b05e31670c8902de0bb /gnu
parent2bddba52f1a956b695317bf8be9a633f302c4df3 (diff)
downloadFreeBSD-src-c39aed21a8d0e0849e9678f826151961a0762e3b.zip
FreeBSD-src-c39aed21a8d0e0849e9678f826151961a0762e3b.tar.gz
First round of changes to support generation of assembler for the old
a.out gas and the binutils gas (elf or a.out) with a single compiler. This uses other infrastructure not yet committed, in order to support both a.out and elf it needs to be able to get to both a.out and elf gas, ld, libs, crt* etc. So for now, the support is pretty much dormant. The new freebsd.h file is based on the old freebsd-elf.h file (which has a long lineage, right back through linux and svr4 files). The change is pretty dramatic from a gcc internals standpoint as it overrides a lot of definitions in order to generate different output based on target mode. There is potential for screw-ups, so please be on the lookout - gcc's configuration mechanism wasn't really meant for this kind of thing. It's believed to compile world etc just fine under both a.out and elf, can handle global constructors and destructors, handles the differences in a.out and elf stabs, and what sections things like exceptions go in. The initial idea came from i386/osfrose.h which is a dual rose/elf format target. These two are not as diverse as a.out and elf it would seem. The cc front-end uses external configuration to determine default object format (still being thrashed out, so read the source if you want to see it so far), and has a '-aout' and '-elf' override command line switch. There are some other internal switches that can be accessed, namely -maout, -mno-aout, -munderscores and -mnounderscores. The underscore and local symbol prefixing rules are controllable seperately to the output format. (ie: it's possible to generate a.out without the _ prefixes on symbols and also to generate elf with the _ prefixes. This isn't quite optimal, but does seem to work pretty well, except the linkers don't always recognise the local symbols without their normal names) The default format is a.out (still), nobody should see any major changes. With both elf and a.out tools and libraries installed: [1:26pm]/tmp-223> cc -elf -o hello hello.c peter@beast[1:27pm]/tmp-224> file hello hello: ELF 32-bit LSB executable, Intel 80386, version 1 (FreeBSD), dynamically linked, not stripped [1:27pm]/tmp-225> ./hello hello world! [1:27pm]/tmp-226> cc -aout -o hello hello.c [1:27pm]/tmp-227> file hello hello: FreeBSD/i386 compact demand paged dynamically linked executable not stripped 1:27pm]/tmp-228> ./hello hello world! Since my co-conspirators put a lot of effort into this too, I'll add them so they can share the blame^H^H^H^H^Hglory. :-) Reviewed by: sos, jdp
Diffstat (limited to 'gnu')
-rw-r--r--gnu/usr.bin/cc/Makefile.inc6
-rw-r--r--gnu/usr.bin/cc/cc/Makefile6
-rw-r--r--gnu/usr.bin/cc/cc_tools/Makefile39
3 files changed, 17 insertions, 34 deletions
diff --git a/gnu/usr.bin/cc/Makefile.inc b/gnu/usr.bin/cc/Makefile.inc
index 0284d7d..f5c9c2b 100644
--- a/gnu/usr.bin/cc/Makefile.inc
+++ b/gnu/usr.bin/cc/Makefile.inc
@@ -1,5 +1,5 @@
#
-# $Id: Makefile.inc,v 1.21 1998/01/11 04:10:26 jb Exp $
+# $Id: Makefile.inc,v 1.22 1998/01/25 09:49:00 jb Exp $
#
# Sometimes this is .include'd several times...
@@ -23,15 +23,15 @@ BINFORMAT?= aout
#BINFORMAT?= elf
.endif
+# same backend, just change compiled-in default.
.if ${BINFORMAT} == aout
CFLAGS+= -DFREEBSD_AOUT
-target= ${MACHINE_ARCH}-unknown-freebsd
.endif
.if ${BINFORMAT} == elf
CFLAGS+= -DFREEBSD_ELF
-target= ${MACHINE_ARCH}-unknown-freebsdelf
.endif
+target= ${MACHINE_ARCH}-unknown-freebsd
version!= sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/' < ${GCCDIR}/version.c
CFLAGS+= -I${GCCDIR} -I${GCCDIR}/config
diff --git a/gnu/usr.bin/cc/cc/Makefile b/gnu/usr.bin/cc/cc/Makefile
index 8fd206a..91400cc 100644
--- a/gnu/usr.bin/cc/cc/Makefile
+++ b/gnu/usr.bin/cc/cc/Makefile
@@ -1,5 +1,5 @@
#
-# $Id$
+# $Id: Makefile,v 1.12 1997/02/22 15:44:52 peter Exp $
#
PROG = cc
@@ -14,9 +14,7 @@ CLEANFILES+= multilib.h
CFLAGS+= -I. # I mean it!
CFLAGS+= -I${.CURDIR}
-# I have NO idea what this is for, it appears to be m68k specific.
multilib.h: genmultilib
- sh ${GCCDIR}/genmultilib "$(MULTILIB_OPTIONS)" \
- "$(MULTILIB_DIRNAMES)" "$(MULTILIB_MATCHES)" > multilib.h
+ echo '#define MULTILIB_SELECT "aout maout;elf !maout;"' > multilib.h
.include <bsd.prog.mk>
diff --git a/gnu/usr.bin/cc/cc_tools/Makefile b/gnu/usr.bin/cc/cc_tools/Makefile
index 1d22fc6..76ba045 100644
--- a/gnu/usr.bin/cc/cc_tools/Makefile
+++ b/gnu/usr.bin/cc/cc_tools/Makefile
@@ -1,5 +1,5 @@
#
-# $Id: Makefile,v 1.6 1998/01/25 09:47:46 jb Exp $
+# $Id: Makefile,v 1.7 1998/03/06 13:34:36 bde Exp $
#
#
@@ -116,24 +116,11 @@ CLEANFILES+= objc-parse.y # insurance
#-----------------------------------------------------------------------
# CPP parser done in its own makefile
#-----------------------------------------------------------------------
-# Everything in ${SRCS} is generated
-CLEANFILES+= ${SRCS}
-
-#-----------------------------------------------------------------------
-all: ${BINFORMAT} ${SRCS}
-
-#-----------------------------------------------------------------------
-beforedepend: ${BINFORMAT}
-
-#-----------------------------------------------------------------------
# the host/target compiler config.
COMMONHDRS= config.h hconfig.h tconfig.h tm.h options.h specs.h
-${COMMONHDRS}: ${BINFORMAT}
-
-aout:
- @rm -f elf
+${COMMONHDRS}:
echo '#include "${MACHINE_ARCH}/freebsd.h"' > tm.h
echo '#include "${MACHINE_ARCH}/xm-freebsd.h"' > config.h
echo '#include "${MACHINE_ARCH}/xm-freebsd.h"' > hconfig.h
@@ -141,22 +128,20 @@ aout:
echo '#include "cp/lang-options.h"' > options.h
echo '#include "cp/lang-specs.h"' > specs.h
echo '#include "f2c-specs.h"' >> specs.h
- @touch aout
-
-elf:
- @rm -f aout
- echo '#include "${MACHINE_ARCH}/freebsd-elf.h"' > tm.h
- echo '#include "${MACHINE_ARCH}/xm-freebsd.h"' > config.h
- echo '#include "${MACHINE_ARCH}/xm-freebsd.h"' > hconfig.h
- echo '#include "${MACHINE_ARCH}/xm-freebsd.h"' > tconfig.h
- echo '#include "cp/lang-options.h"' > options.h
- echo '#include "cp/lang-specs.h"' > specs.h
- echo '#include "f2c-specs.h"' >> specs.h
- @touch elf
SRCS+= ${COMMONHDRS}
CLEANFILES+= elf aout
+#-----------------------------------------------------------------------
+# Everything in ${SRCS} is generated
+CLEANFILES+= ${SRCS}
+
+#-----------------------------------------------------------------------
+all: ${COMMONHDRS} ${SRCS}
+
+#-----------------------------------------------------------------------
+beforedepend: ${COMMONHDRS}
+
# We kept ${LOCOBJS} separate from ${OBJS} because adding all the
# objects to ${OBJS} would give too many (cyclic) dependencies.
# Add just enough dependencies for `make -j 1000' to work.
OpenPOWER on IntegriCloud