summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnu/usr.bin/gcc/Makefile.bsd-wrapper26
-rw-r--r--gnu/usr.bin/gcc/config/openbsd.h188
2 files changed, 196 insertions, 18 deletions
diff --git a/gnu/usr.bin/gcc/Makefile.bsd-wrapper b/gnu/usr.bin/gcc/Makefile.bsd-wrapper
index 62eb7022e98..fc3c3664ada 100644
--- a/gnu/usr.bin/gcc/Makefile.bsd-wrapper
+++ b/gnu/usr.bin/gcc/Makefile.bsd-wrapper
@@ -1,41 +1,35 @@
-# $Id: Makefile.bsd-wrapper,v 1.7 1996/02/06 06:58:26 etheisen Exp $
+# $Id: Makefile.bsd-wrapper,v 1.8 1996/02/17 07:32:28 etheisen Exp $
MAN= cccp.1 gcc.1 cp/g++.1
MLINKS+= gcc.1 cc.1
MLINKS+= cccp.1 cpp.1
MLINKS+= g++.1 c++.1
-GNUCFLAGS= CFLAGS="${CFLAGS}"
-CLEANFILES= .gdbinit cp/.gdbinit *.info* bi-parser.c bi-parser.h \
- c-parse.c c-parse.h cexp.c cp/parse.c cp/parse.h objc-parse.c
-#
-# This is ugly, but appears to be the only
-# method to override default include paths
-# without goofing with the source.
-#
-GPLUSPLUS_INCLUDE_DIR= /usr/include/g++
-GCC_INCLUDE_DIR= /usr/include
-INCDEF= T_CPPFLAGS=-DINCLUDE_DEFAULTS=\'{{\"$(GPLUSPLUS_INCLUDE_DIR)\",1,1},{\"$(GCC_INCLUDE_DIR)\",0,0},{0,0,0}}\'
+GPP_INC_DIR= /usr/include/g++
+GNUCFLAGS= CFLAGS="${CFLAGS} -DOPENBSD_NATIVE"
+CLEANFILES= .gdbinit cp/.gdbinit *.info* bi-parser.c bi-parser.h \
+ c-parse.c c-parse.h c-parse.y cexp.c cp/parse.c cp/parse.h \
+ objc-parse.c
all: config.status
- ${MAKE} ${GNUCFLAGS} BISON=yacc LDFLAGS=${LDSTATIC} ${INCDEF}
+ ${MAKE} ${GNUCFLAGS} BISON=yacc LDFLAGS=${LDSTATIC}
.FORCE: .IGNORE
config: .FORCE
-rm -f config.cache
/bin/sh ${.CURDIR}/configure --with-gnu-as --with-gnu-ld \
- --prefix=/usr --gxx-include=${GPLUSPLUS_INCLUDE_DIR}
+ --prefix=/usr --gxx-include=${GPP_INC_DIR}
config.status:
/bin/sh ${.CURDIR}/configure --with-gnu-as --with-gnu-ld \
- --prefix=/usr --gxx-include=${GPLUSPLUS_INCLUDE_DIR}
+ --prefix=/usr --gxx-include=${GPP_INC_DIR}
install: maninstall
${MAKE} ${GNUCFLAGS} prefix=${DESTDIR}/usr \
infodir=${DESTDIR}/usr/share/info \
tooldir=/tmp assertdir=/tmp INSTALL_MAN= NO_TARGET_GCC=true \
- bindir=${DESTDIR}/usr/bin ${INCDEF} install
+ bindir=${DESTDIR}/usr/bin install
ln -f ${DESTDIR}/usr/bin/gcc ${DESTDIR}/usr/bin/cc
clean cleandir:
diff --git a/gnu/usr.bin/gcc/config/openbsd.h b/gnu/usr.bin/gcc/config/openbsd.h
index 0ed0981d48b..99928328df6 100644
--- a/gnu/usr.bin/gcc/config/openbsd.h
+++ b/gnu/usr.bin/gcc/config/openbsd.h
@@ -1,2 +1,186 @@
-/* At the moment OpenBSD is really much like NetBSD */
-#include <netbsd.h>
+/* OPENBSD_NATIVE is defined when gcc is integrated into the OpenBSD
+ source tree so it can be configured appropriately when using the
+ 'wrapper' makefile with the GNU configure/build mechanism. The
+ 'wrapper' method and use of OPENBSD_NATIVE is NOT recommended
+ while building cross-compilers. */
+
+#ifdef OPENBSD_NATIVE
+
+/* Look for the include files in the system-defined places. */
+
+#undef INCLUDE_DEFAULTS
+#define INCLUDE_DEFAULTS \
+ { \
+ { GPLUSPLUS_INCLUDE_DIR, 1, 1 }, \
+ { STANDARD_INCLUDE_DIR, 0, 0 }, \
+ { 0, 0, 0 } \
+ }
+
+/* Under OpenBSD, the normal location of the various *crt*.o files is the
+ /usr/lib directory. */
+
+#undef STANDARD_STARTFILE_PREFIX
+#define STANDARD_STARTFILE_PREFIX "/usr/lib/"
+
+#endif
+
+
+/* Provide a CPP_SPEC appropriate for OpenBSD. Current we just deal with
+ the GCC option `-posix'. */
+
+#undef CPP_SPEC
+#define CPP_SPEC "%{posix:-D_POSIX_SOURCE}"
+
+/* Provide an ASM_SPEC appropriate for OpenBSD. Currently we only deal
+ with the options for generating PIC code. */
+
+#undef ASM_SPEC
+#define ASM_SPEC " %| %{fpic:-k} %{fPIC:-k -K}"
+
+/* Provide a LIB_SPEC appropriate for OpenBSD. Just select the appropriate
+ libc, depending on whether we're doing profiling. */
+
+#undef LIB_SPEC
+#define LIB_SPEC "%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p}"
+
+/* Provide a LINK_SPEC appropriate for OpenBSD. Here we provide support
+ for the special GCC options -static, -assert, and -nostdlib. */
+
+#undef LINK_SPEC
+#define LINK_SPEC \
+ "%{!nostdlib:%{!r*:%{!e*:-e start}}} -dc -dp %{static:-Bstatic} %{assert*}"
+
+
+/* We have atexit(3). */
+
+#define HAVE_ATEXIT
+
+/* Implicit library calls should use memcpy, not bcopy, etc. */
+
+#define TARGET_MEM_FUNCTIONS
+
+/*
+ * Some imports from svr4.h in support of shared libraries.
+ * Currently, we need the DECLARE_OBJECT_SIZE stuff.
+ */
+
+/* Define the strings used for the special svr4 .type and .size directives.
+ These strings generally do not vary from one system running svr4 to
+ another, but if a given system (e.g. m88k running svr) needs to use
+ different pseudo-op names for these, they may be overridden in the
+ file which includes this one. */
+
+#undef TYPE_ASM_OP
+#undef SIZE_ASM_OP
+#define TYPE_ASM_OP ".type"
+#define SIZE_ASM_OP ".size"
+
+/* This is how we tell the assembler that a symbol is weak. */
+
+#undef ASM_WEAKEN_LABEL
+#define ASM_WEAKEN_LABEL(FILE,NAME) \
+ do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
+ fputc ('\n', FILE); } while (0)
+
+/* The following macro defines the format used to output the second
+ operand of the .type assembler directive. Different svr4 assemblers
+ expect various different forms for this operand. The one given here
+ is just a default. You may need to override it in your machine-
+ specific tm.h file (depending upon the particulars of your assembler). */
+
+#undef TYPE_OPERAND_FMT
+#define TYPE_OPERAND_FMT "@%s"
+
+/* Write the extra assembler code needed to declare a function's result.
+ Most svr4 assemblers don't require any special declaration of the
+ result value, but there are exceptions. */
+
+#ifndef ASM_DECLARE_RESULT
+#define ASM_DECLARE_RESULT(FILE, RESULT)
+#endif
+
+/* These macros generate the special .type and .size directives which
+ are used to set the corresponding fields of the linker symbol table
+ entries in an ELF object file under SVR4. These macros also output
+ the starting labels for the relevant functions/objects. */
+
+/* Write the extra assembler code needed to declare a function properly.
+ Some svr4 assemblers need to also have something extra said about the
+ function's return value. We allow for that here. */
+
+#undef ASM_DECLARE_FUNCTION_NAME
+#define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \
+ do { \
+ fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ putc (',', FILE); \
+ fprintf (FILE, TYPE_OPERAND_FMT, "function"); \
+ putc ('\n', FILE); \
+ ASM_DECLARE_RESULT (FILE, DECL_RESULT (DECL)); \
+ ASM_OUTPUT_LABEL(FILE, NAME); \
+ } while (0)
+
+/* Write the extra assembler code needed to declare an object properly. */
+
+#undef ASM_DECLARE_OBJECT_NAME
+#define ASM_DECLARE_OBJECT_NAME(FILE, NAME, DECL) \
+ do { \
+ fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ putc (',', FILE); \
+ fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
+ putc ('\n', FILE); \
+ size_directive_output = 0; \
+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL)) \
+ { \
+ size_directive_output = 1; \
+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
+ } \
+ ASM_OUTPUT_LABEL(FILE, NAME); \
+ } while (0)
+
+/* Output the size directive for a decl in rest_of_decl_compilation
+ in the case where we did not do so before the initializer.
+ Once we find the error_mark_node, we know that the value of
+ size_directive_output was set
+ by ASM_DECLARE_OBJECT_NAME when it was run for the same decl. */
+
+#undef ASM_FINISH_DECLARE_OBJECT
+#define ASM_FINISH_DECLARE_OBJECT(FILE, DECL, TOP_LEVEL, AT_END) \
+do { \
+ char *name = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \
+ if (!flag_inhibit_size_directive && DECL_SIZE (DECL) \
+ && ! AT_END && TOP_LEVEL \
+ && DECL_INITIAL (DECL) == error_mark_node \
+ && !size_directive_output) \
+ { \
+ size_directive_output = 1; \
+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
+ assemble_name (FILE, name); \
+ fprintf (FILE, ",%d\n", int_size_in_bytes (TREE_TYPE (DECL))); \
+ } \
+ } while (0)
+
+/* This is how to declare the size of a function. */
+
+#undef ASM_DECLARE_FUNCTION_SIZE
+#define ASM_DECLARE_FUNCTION_SIZE(FILE, FNAME, DECL) \
+ do { \
+ if (!flag_inhibit_size_directive) \
+ { \
+ char label[256]; \
+ static int labelno; \
+ labelno++; \
+ ASM_GENERATE_INTERNAL_LABEL (label, "Lfe", labelno); \
+ ASM_OUTPUT_INTERNAL_LABEL (FILE, "Lfe", labelno); \
+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
+ assemble_name (FILE, (FNAME)); \
+ fprintf (FILE, ","); \
+ assemble_name (FILE, label); \
+ fprintf (FILE, "-"); \
+ assemble_name (FILE, (FNAME)); \
+ putc ('\n', FILE); \
+ } \
+ } while (0)