diff options
-rw-r--r-- | gnu/usr.bin/gcc/Makefile.bsd-wrapper | 26 | ||||
-rw-r--r-- | gnu/usr.bin/gcc/config/openbsd.h | 188 |
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) |