From: "Paul H. Anderson" <pha@pdq.com>
To: egcs@cygnus.com
Cc: pha@pdq.com
Subject: gcc alpha/NetBSD 1.3 target files
Date: Thu, 30 Apr 1998 18:55:00 -0000 [thread overview]
Message-ID: <Pine.BSF.3.91.980430153743.13780C-100000@pdq.com> (raw)
egcs support folks,
The following patches are a initial effort to get egcs working on the
NetBSD/Alpha platform. The code comes entirely from the Linux work,
usually with simple substitutions and a few slightly larger modifications.
I've mailed a copyright assignment form and an employer release form to
Richard Stallman today. It should be at his office early next week
(certainly by Tuesday).
The changes in this message allow a user to build egcs-1.0.2 and create a
working compiler, with the following evident problems:
/usr/local/lib/gcc-lib/alpha-unknown-netbsd1.3/egcs-2.90.27/include/limits.h:31:
SCHAR_{MAX,MIN}, UCHAR_{}, CHAR_{}, etc, are redefined - I don't know why
egcs put these limits back in... must be a config problem here.
gdb has problems single stepping in c++ programs. The toolchain compiler
did this also, though, so I'm not sure that I made this any worse.
c++ static initializer seems to have problems (w/String object in libg++)
I have not tested C++ exceptions at all
egcs-1.0.2 won't build a NetBSD kernel, because of an unresolved
global, _memcpy. This is probably simple to fix.
Please let me know of any problems, questions, requests for changes, etc,
that I may be able to help with. I have some modest interest in further
work on the compiler, but it is more likely that some folks on the
netbsd-alpha mail list will be doing additional bug fixes, etc.
Paul Anderson
pha@pdq.com
ChangeLog follows:
-----------------------
Wed Apr 29 10:56:12 1998 Paul Anderson <pha@pdq.com>
* create config files needed for NetBSD/Alpha target
* config/alpha/alpha.c: don't include <stamp.h> if __NetBSD__
* config/alpha/elf-netbsd.h: copy and modify the Linux version
* config/alpha/netbsd.h: copy and modify the Linux version
* config/alpha/t-netbsd: copy and modify the Linux version
* config/alpha/xm-netbsd.h: copy and modify the Linux version
* configure: properly decode NetBSD/Alpha target setup
diffs relative to egcs-1.0.2 follow:
-----------------------
diff -Nrc3p egcs-1.0.2.cygnus/gcc/config/alpha/alpha.c egcs-1.0.2/gcc/config/alpha/alpha.c
*** egcs-1.0.2.cygnus/gcc/config/alpha/alpha.c Thu Nov 20 18:07:26 1997
--- egcs-1.0.2/gcc/config/alpha/alpha.c Fri Apr 17 10:21:58 1998
*************** direct_return ()
*** 1927,1933 ****
/* Write a version stamp. Don't write anything if we are running as a
cross-compiler. Otherwise, use the versions in /usr/include/stamp.h. */
! #if !defined(CROSS_COMPILE) && !defined(_WIN32) && !defined(__linux__) && !defined(VMS)
#include <stamp.h>
#endif
--- 1927,1933 ----
/* Write a version stamp. Don't write anything if we are running as a
cross-compiler. Otherwise, use the versions in /usr/include/stamp.h. */
! #if !defined(CROSS_COMPILE) && !defined(_WIN32) && !defined(__linux__) && !defined(VMS) && !defined(__NetBSD__)
#include <stamp.h>
#endif
diff -Nrc3p egcs-1.0.2.cygnus/gcc/config/alpha/elf-netbsd.h egcs-1.0.2/gcc/config/alpha/elf-netbsd.h
*** egcs-1.0.2.cygnus/gcc/config/alpha/elf-netbsd.h Wed Dec 31 16:00:00 1969
--- egcs-1.0.2/gcc/config/alpha/elf-netbsd.h Fri Apr 17 10:27:04 1998
***************
*** 0 ****
--- 1,521 ----
+ /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF.
+ Copyright (C) 1996, 1997 Free Software Foundation, Inc.
+ Contributed by Richard Henderson (rth@tamu.edu).
+
+ This file is part of GNU CC.
+
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING. If not, write to
+ the Free Software Foundation, 59 Temple Place - Suite 330,
+ Boston, MA 02111-1307, USA. */
+
+ /* This is used on Alpha platforms that use the ELF format.
+ Currently only Linux and NetBSD uses this. */
+
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fprintf (stderr, " (Alpha NetBSD/ELF)");
+
+ #undef OBJECT_FORMAT_COFF
+ #undef EXTENDED_COFF
+ #define OBJECT_FORMAT_ELF
+
+ #define SDB_DEBUGGING_INFO
+
+ #undef ASM_FINAL_SPEC
+
+ #undef CPP_PREDEFINES
+ #define CPP_PREDEFINES "\
+ -D__alpha -D__alpha__ -D__NetBSD__ -D_LONGLONG -Dunix \
+ -Asystem(unix) -Asystem(NetBSD) -Acpu(alpha) -Amachine(alpha) -D__ELF__"
+
+ #undef LINK_SPEC
+ #ifdef USE_GNULIBC_1
+ #define LINK_SPEC "-m elf64alpha -G 8 %{O*:-O3} %{!O*:-O1} \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
+ %{static:-static}}"
+ #else
+ #define LINK_SPEC "-m elf64alpha -G 8 %{O*:-O3} %{!O*:-O1} \
+ %{shared:-shared} \
+ %{!shared: \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
+ %{static:-static}}"
+ #endif
+
+ #ifndef USE_GNULIBC_1
+ #undef DEFAULT_VTABLE_THUNKS
+ #define DEFAULT_VTABLE_THUNKS 1
+ #endif
+
+ #ifndef USE_GNULIBC_1
+ #undef LIB_SPEC
+ #define LIB_SPEC \
+ "%{shared: -lc} \
+ %{!shared: %{mieee-fp:-lieee} %{pthread:-lpthread} \
+ %{profile:-lc_p} %{!profile: -lc}}"
+ #endif
+
+ /* Output at beginning of assembler file. */
+
+ #undef ASM_FILE_START
+ #define ASM_FILE_START(FILE) \
+ { \
+ alpha_write_verstamp (FILE); \
+ output_file_directive (FILE, main_input_filename); \
+ fprintf (FILE, "\t.version\t\"01.01\"\n"); \
+ fprintf (FILE, "\t.set noat\n"); \
+ }
+
+ #define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE) \
+ alpha_output_lineno (STREAM, LINE)
+ extern void alpha_output_lineno ();
+
+ extern void output_file_directive ();
+
+ /* Attach a special .ident directive to the end of the file to identify
+ the version of GCC which compiled this code. The format of the
+ .ident string is patterned after the ones produced by native svr4
+ C compilers. */
+
+ #define IDENT_ASM_OP ".ident"
+
+ #ifdef IDENTIFY_WITH_IDENT
+ #define ASM_IDENTIFY_GCC(FILE) /* nothing */
+ #define ASM_IDENTIFY_LANGUAGE(FILE) \
+ fprintf(FILE, "\t%s \"GCC (%s) %s\"\n", IDENT_ASM_OP, \
+ lang_identify(), version_string)
+ #else
+ #define ASM_FILE_END(FILE) \
+ do { \
+ fprintf ((FILE), "\t%s\t\"GCC: (GNU) %s\"\n", \
+ IDENT_ASM_OP, version_string); \
+ } while (0)
+ #endif
+
+ /* Allow #sccs in preprocessor. */
+
+ #define SCCS_DIRECTIVE
+
+ /* Output #ident as a .ident. */
+
+ #define ASM_OUTPUT_IDENT(FILE, NAME) \
+ fprintf (FILE, "\t%s\t\"%s\"\n", IDENT_ASM_OP, NAME);
+
+ /* This is how to allocate empty space in some section. The .zero
+ pseudo-op is used for this on most svr4 assemblers. */
+
+ #define SKIP_ASM_OP ".zero"
+
+ #undef ASM_OUTPUT_SKIP
+ #define ASM_OUTPUT_SKIP(FILE,SIZE) \
+ fprintf (FILE, "\t%s\t%u\n", SKIP_ASM_OP, (SIZE))
+
+ /* Output the label which precedes a jumptable. Note that for all svr4
+ systems where we actually generate jumptables (which is to say every
+ svr4 target except i386, where we use casesi instead) we put the jump-
+ tables into the .rodata section and since other stuff could have been
+ put into the .rodata section prior to any given jumptable, we have to
+ make sure that the location counter for the .rodata section gets pro-
+ perly re-aligned prior to the actual beginning of the jump table. */
+
+ #define ALIGN_ASM_OP ".align"
+
+ #ifndef ASM_OUTPUT_BEFORE_CASE_LABEL
+ #define ASM_OUTPUT_BEFORE_CASE_LABEL(FILE,PREFIX,NUM,TABLE) \
+ ASM_OUTPUT_ALIGN ((FILE), 2);
+ #endif
+
+ #undef ASM_OUTPUT_CASE_LABEL
+ #define ASM_OUTPUT_CASE_LABEL(FILE,PREFIX,NUM,JUMPTABLE) \
+ do { \
+ ASM_OUTPUT_BEFORE_CASE_LABEL (FILE, PREFIX, NUM, JUMPTABLE) \
+ ASM_OUTPUT_INTERNAL_LABEL (FILE, PREFIX, NUM); \
+ } while (0)
+
+ /* The standard SVR4 assembler seems to require that certain builtin
+ library routines (e.g. .udiv) be explicitly declared as .globl
+ in each assembly file where they are referenced. */
+
+ #define ASM_OUTPUT_EXTERNAL_LIBCALL(FILE, FUN) \
+ ASM_GLOBALIZE_LABEL (FILE, XSTR (FUN, 0))
+
+ /* This says how to output assembler code to declare an
+ uninitialized external linkage data object. Under SVR4,
+ the linker seems to want the alignment of data objects
+ to depend on their types. We do exactly that here. */
+
+ #define COMMON_ASM_OP ".comm"
+
+ #undef ASM_OUTPUT_ALIGNED_COMMON
+ #define ASM_OUTPUT_ALIGNED_COMMON(FILE, NAME, SIZE, ALIGN) \
+ do { \
+ fprintf ((FILE), "\t%s\t", COMMON_ASM_OP); \
+ assemble_name ((FILE), (NAME)); \
+ fprintf ((FILE), ",%u,%u\n", (SIZE), (ALIGN) / BITS_PER_UNIT); \
+ } while (0)
+
+ /* This says how to output assembler code to declare an
+ uninitialized internal linkage data object. Under SVR4,
+ the linker seems to want the alignment of data objects
+ to depend on their types. We do exactly that here. */
+
+ #define LOCAL_ASM_OP ".local"
+
+ #undef ASM_OUTPUT_ALIGNED_LOCAL
+ #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \
+ do { \
+ fprintf ((FILE), "\t%s\t", LOCAL_ASM_OP); \
+ assemble_name ((FILE), (NAME)); \
+ fprintf ((FILE), "\n"); \
+ ASM_OUTPUT_ALIGNED_COMMON (FILE, NAME, SIZE, ALIGN); \
+ } while (0)
+
+ /* This is the pseudo-op used to generate a 64-bit word of data with a
+ specific value in some section. */
+
+ #define INT_ASM_OP ".quad"
+
+ /* This is the pseudo-op used to generate a contiguous sequence of byte
+ values from a double-quoted string WITHOUT HAVING A TERMINATING NUL
+ AUTOMATICALLY APPENDED. This is the same for most svr4 assemblers. */
+
+ #undef ASCII_DATA_ASM_OP
+ #define ASCII_DATA_ASM_OP ".ascii"
+
+ /* Support const sections and the ctors and dtors sections for g++.
+ Note that there appears to be two different ways to support const
+ sections at the moment. You can either #define the symbol
+ READONLY_DATA_SECTION (giving it some code which switches to the
+ readonly data section) or else you can #define the symbols
+ EXTRA_SECTIONS, EXTRA_SECTION_FUNCTIONS, SELECT_SECTION, and
+ SELECT_RTX_SECTION. We do both here just to be on the safe side. */
+
+ #define USE_CONST_SECTION 1
+
+ #define CONST_SECTION_ASM_OP ".section\t.rodata"
+
+ /* Define the pseudo-ops used to switch to the .ctors and .dtors sections.
+
+ Note that we want to give these sections the SHF_WRITE attribute
+ because these sections will actually contain data (i.e. tables of
+ addresses of functions in the current root executable or shared library
+ file) and, in the case of a shared library, the relocatable addresses
+ will have to be properly resolved/relocated (and then written into) by
+ the dynamic linker when it actually attaches the given shared library
+ to the executing process. (Note that on SVR4, you may wish to use the
+ `-z text' option to the ELF linker, when building a shared library, as
+ an additional check that you are doing everything right. But if you do
+ use the `-z text' option when building a shared library, you will get
+ errors unless the .ctors and .dtors sections are marked as writable
+ via the SHF_WRITE attribute.) */
+
+ #define CTORS_SECTION_ASM_OP ".section\t.ctors,\"aw\""
+ #define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\""
+
+ /* On svr4, we *do* have support for the .init and .fini sections, and we
+ can put stuff in there to be executed before and after `main'. We let
+ crtstuff.c and other files know this by defining the following symbols.
+ The definitions say how to change sections to the .init and .fini
+ sections. This is the same for all known svr4 assemblers. */
+
+ #define INIT_SECTION_ASM_OP ".section\t.init"
+ #define FINI_SECTION_ASM_OP ".section\t.fini"
+
+ /* A default list of other sections which we might be "in" at any given
+ time. For targets that use additional sections (e.g. .tdesc) you
+ should override this definition in the target-specific file which
+ includes this file. */
+
+ #undef EXTRA_SECTIONS
+ #define EXTRA_SECTIONS in_const, in_ctors, in_dtors
+
+ /* A default list of extra section function definitions. For targets
+ that use additional sections (e.g. .tdesc) you should override this
+ definition in the target-specific file which includes this file. */
+
+ #undef EXTRA_SECTION_FUNCTIONS
+ #define EXTRA_SECTION_FUNCTIONS \
+ CONST_SECTION_FUNCTION \
+ CTORS_SECTION_FUNCTION \
+ DTORS_SECTION_FUNCTION
+
+ #undef READONLY_DATA_SECTION
+ #define READONLY_DATA_SECTION() const_section ()
+
+ extern void text_section ();
+
+ #define CONST_SECTION_FUNCTION \
+ void \
+ const_section () \
+ { \
+ if (!USE_CONST_SECTION) \
+ text_section(); \
+ else if (in_section != in_const) \
+ { \
+ fprintf (asm_out_file, "%s\n", CONST_SECTION_ASM_OP); \
+ in_section = in_const; \
+ } \
+ }
+
+ #define CTORS_SECTION_FUNCTION \
+ void \
+ ctors_section () \
+ { \
+ if (in_section != in_ctors) \
+ { \
+ fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \
+ in_section = in_ctors; \
+ } \
+ }
+
+ #define DTORS_SECTION_FUNCTION \
+ void \
+ dtors_section () \
+ { \
+ if (in_section != in_dtors) \
+ { \
+ fprintf (asm_out_file, "%s\n", DTORS_SECTION_ASM_OP); \
+ in_section = in_dtors; \
+ } \
+ }
+
+ /* Switch into a generic section.
+ This is currently only used to support section attributes.
+
+ We make the section read-only and executable for a function decl,
+ read-only for a const data decl, and writable for a non-const data decl. */
+ #define ASM_OUTPUT_SECTION_NAME(FILE, DECL, NAME, RELOC) \
+ fprintf (FILE, ".section\t%s,\"%s\",@progbits\n", NAME, \
+ (DECL) && TREE_CODE (DECL) == FUNCTION_DECL ? "ax" : \
+ (DECL) && DECL_READONLY_SECTION (DECL, RELOC) ? "a" : "aw")
+
+
+ /* A C statement (sans semicolon) to output an element in the table of
+ global constructors. */
+ #define ASM_OUTPUT_CONSTRUCTOR(FILE,NAME) \
+ do { \
+ ctors_section (); \
+ fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, "\n"); \
+ } while (0)
+
+ /* A C statement (sans semicolon) to output an element in the table of
+ global destructors. */
+ #define ASM_OUTPUT_DESTRUCTOR(FILE,NAME) \
+ do { \
+ dtors_section (); \
+ fprintf (FILE, "\t%s\t ", INT_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, "\n"); \
+ } while (0)
+
+ /* A C statement or statements to switch to the appropriate
+ section for output of DECL. DECL is either a `VAR_DECL' node
+ or a constant of some sort. RELOC indicates whether forming
+ the initial value of DECL requires link-time relocations. */
+
+ #define SELECT_SECTION(DECL,RELOC) \
+ { \
+ if (TREE_CODE (DECL) == STRING_CST) \
+ { \
+ if (! flag_writable_strings) \
+ const_section (); \
+ else \
+ data_section (); \
+ } \
+ else if (TREE_CODE (DECL) == VAR_DECL) \
+ { \
+ if ((flag_pic && RELOC) \
+ || !TREE_READONLY (DECL) || TREE_SIDE_EFFECTS (DECL) \
+ || !DECL_INITIAL (DECL) \
+ || (DECL_INITIAL (DECL) != error_mark_node \
+ && !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
+ data_section (); \
+ else \
+ const_section (); \
+ } \
+ else \
+ const_section (); \
+ }
+
+ /* A C statement or statements to switch to the appropriate
+ section for output of RTX in mode MODE. RTX is some kind
+ of constant in RTL. The argument MODE is redundant except
+ in the case of a `const_int' rtx. Currently, these always
+ go into the const section. */
+
+ #undef SELECT_RTX_SECTION
+ #define SELECT_RTX_SECTION(MODE,RTX) const_section()
+
+ /* 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. */
+
+ #define TYPE_ASM_OP ".type"
+ #define SIZE_ASM_OP ".size"
+
+ /* This is how we tell the assembler that a symbol is weak. */
+
+ #define ASM_WEAKEN_LABEL(FILE,NAME) \
+ do { fputs ("\t.weak\t", FILE); assemble_name (FILE, NAME); \
+ fputc ('\n', FILE); } while (0)
+
+ /* This is how we tell the assembler that two symbols have the same value. */
+
+ #define ASM_OUTPUT_DEF(FILE,NAME1,NAME2) \
+ do { assemble_name(FILE, NAME1); \
+ fputs(" = ", FILE); \
+ assemble_name(FILE, NAME2); \
+ 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). */
+
+ #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 an object properly. */
+
+ #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. */
+
+ #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)
+
+ /* A table of bytes codes used by the ASM_OUTPUT_ASCII and
+ ASM_OUTPUT_LIMITED_STRING macros. Each byte in the table
+ corresponds to a particular byte value [0..255]. For any
+ given byte value, if the value in the corresponding table
+ position is zero, the given character can be output directly.
+ If the table value is 1, the byte must be output as a \ooo
+ octal escape. If the tables value is anything else, then the
+ byte value should be output as a \ followed by the value
+ in the table. Note that we can use standard UN*X escape
+ sequences for many control characters, but we don't use
+ \a to represent BEL because some svr4 assemblers (e.g. on
+ the i386) don't know about that. Also, we don't use \v
+ since some versions of gas, such as 2.2 did not accept it. */
+
+ #define ESCAPES \
+ "\1\1\1\1\1\1\1\1btn\1fr\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+ \0\0\"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\
+ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\\\0\0\0\
+ \0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\1\
+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\
+ \1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1\1"
+
+ /* Some svr4 assemblers have a limit on the number of characters which
+ can appear in the operand of a .string directive. If your assembler
+ has such a limitation, you should define STRING_LIMIT to reflect that
+ limit. Note that at least some svr4 assemblers have a limit on the
+ actual number of bytes in the double-quoted string, and that they
+ count each character in an escape sequence as one byte. Thus, an
+ escape sequence like \377 would count as four bytes.
+
+ If your target assembler doesn't support the .string directive, you
+ should define this to zero.
+ */
+
+ #define STRING_LIMIT ((unsigned) 256)
+
+ #define STRING_ASM_OP ".string"
+
+ /*
+ * We always use gas here, so we don't worry about ECOFF assembler problems.
+ */
+ #undef TARGET_GAS
+ #define TARGET_GAS (1)
+
+ #undef PREFERRED_DEBUGGING_TYPE
+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
+ #ifdef NOTDEF
+ /* Provide a STARTFILE_SPEC appropriate for NetBSD. Here we add
+ the NetBSD magical crtbegin.o file (see crtstuff.c) which
+ provides part of the support for getting C++ file-scope static
+ object constructed before entering `main'. */
+
+ #undef STARTFILE_SPEC
+ #define STARTFILE_SPEC \
+ "%{!shared: \
+ %{pg:gcrt1.o%s} %{!pg:%{p:gcrt1.o%s} %{!p:crt1.o%s}}}\
+ crti.o%s crtbegin.o%s"
+
+ /* Provide a ENDFILE_SPEC appropriate for NetBSD. Here we tack on
+ the NetBSD magical crtend.o file (see crtstuff.c) which
+ provides part of the support for getting C++ file-scope static
+ object constructed before entering `main', followed by a normal
+ NetBSD "finalizer" file, `crtn.o'. */
+
+ #undef ENDFILE_SPEC
+ #define ENDFILE_SPEC \
+ "crtend.o%s crtn.o%s"
+ #endif
diff -Nrc3p egcs-1.0.2.cygnus/gcc/config/alpha/netbsd.h egcs-1.0.2/gcc/config/alpha/netbsd.h
*** egcs-1.0.2.cygnus/gcc/config/alpha/netbsd.h Wed Dec 31 16:00:00 1969
--- egcs-1.0.2/gcc/config/alpha/netbsd.h Fri Apr 17 10:09:57 1998
***************
*** 0 ****
--- 1,98 ----
+ /* Definitions of target machine for GNU compiler, for Alpha NetBSD,
+ using ECOFF.
+ Copyright (C) 1996 Free Software Foundation, Inc.
+ Contributed by Bob Manson.
+
+ This file is part of GNU CC.
+
+ GNU CC is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2, or (at your option)
+ any later version.
+
+ GNU CC is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with GNU CC; see the file COPYING. If not, write to
+ the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+ #undef TARGET_DEFAULT
+ #define TARGET_DEFAULT (3 | MASK_GAS)
+
+ #undef TARGET_VERSION
+ #define TARGET_VERSION fprintf (stderr, " (NetBSD/Alpha)");
+
+ #undef CPP_PREDEFINES
+ #define CPP_PREDEFINES "\
+ -D__alpha -D__alpha__ -D__netbsd -D__netbsd -D_LONGLONG -Dnetbsd -Dunix \
+ -Asystem(netbsd) -Acpu(alpha) -Amachine(alpha)"
+
+ /* We don't actually need any of these; the MD_ vars are ignored
+ anyway for cross-compilers, and the other specs won't get picked up
+ because the user is supposed to do ld -r (hmm, perhaps that should be
+ the default). In any case, setting them thus will catch some
+ common user errors. */
+
+ #undef MD_EXEC_PREFIX
+ #undef MD_STARTFILE_PREFIX
+
+ #undef LIB_SPEC
+ #define LIB_SPEC "%{pg:-lgmon} %{pg:-lc_p} %{!pg:-lc}"
+
+ #undef LINK_SPEC
+ #define LINK_SPEC "-G 8 %{O*:-O3} %{!O*:-O1}"
+
+ #undef ASM_SPEC
+ #define ASM_SPEC "-nocpp"
+
+ /* Can't do stabs */
+ #undef SDB_DEBUGGING_INFO
+
+ /* Prefer dbx. */
+ #undef PREFERRED_DEBUGGING_TYPE
+ #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
+ #undef FUNCTION_PROFILER
+ #define FUNCTION_PROFILER(FILE, LABELNO) \
+ fputs ("\tjsr $28,_mcount\n", (FILE))
+
+ /* Generate calls to memcpy, etc., not bcopy, etc. */
+ #define TARGET_MEM_FUNCTIONS
+
+ /* Show that we need a GP when profiling. */
+ #define TARGET_PROFILING_NEEDS_GP
+
+ /* We need that too. */
+ #define HANDLE_SYSV_PRAGMA
+
+ #undef ASM_FINAL_SPEC
+
+ /* Emit RTL insns to initialize the variable parts of a trampoline.
+ FNADDR is an RTX for the address of the function's pure code.
+ CXT is an RTX for the static chain value for the function.
+
+ This differs from the standard version in that:
+
+ We do not initialize the "hint" field because it only has an 8k
+ range and so the target is in range of something on the stack.
+ Omitting the hint saves a bogus branch-prediction cache line load.
+
+ Linux always has an executable stack -- no need for a system call.
+ */
+
+ #undef INITIALIZE_TRAMPOLINE
+ #define INITIALIZE_TRAMPOLINE(TRAMP, FNADDR, CXT) \
+ { \
+ rtx _addr; \
+ \
+ _addr = memory_address (Pmode, plus_constant ((TRAMP), 16)); \
+ emit_move_insn (gen_rtx (MEM, Pmode, _addr), (FNADDR)); \
+ _addr = memory_address (Pmode, plus_constant ((TRAMP), 24)); \
+ emit_move_insn (gen_rtx (MEM, Pmode, _addr), (CXT)); \
+ \
+ emit_insn (gen_rtx (UNSPEC_VOLATILE, VOIDmode, \
+ gen_rtvec (1, const0_rtx), 0)); \
+ }
diff -Nrc3p egcs-1.0.2.cygnus/gcc/config/alpha/t-netbsd egcs-1.0.2/gcc/config/alpha/t-netbsd
*** egcs-1.0.2.cygnus/gcc/config/alpha/t-netbsd Wed Dec 31 16:00:00 1969
--- egcs-1.0.2/gcc/config/alpha/t-netbsd Fri Apr 17 10:09:57 1998
***************
*** 0 ****
--- 1 ----
+ USER_H = $(EXTRA_HEADERS) $(LANG_EXTRA_HEADERS)
diff -Nrc3p egcs-1.0.2.cygnus/gcc/config/alpha/xm-netbsd.h egcs-1.0.2/gcc/config/alpha/xm-netbsd.h
*** egcs-1.0.2.cygnus/gcc/config/alpha/xm-netbsd.h Wed Dec 31 16:00:00 1969
--- egcs-1.0.2/gcc/config/alpha/xm-netbsd.h Fri Apr 17 10:09:57 1998
***************
*** 0 ****
--- 1,2 ----
+ #undef USE_BFD
+ #define USE_BFD
diff -Nrc3p egcs-1.0.2.cygnus/gcc/configure egcs-1.0.2/gcc/configure
*** egcs-1.0.2.cygnus/gcc/configure Mon Mar 16 00:26:57 1998
--- egcs-1.0.2/gcc/configure Fri Apr 17 10:09:57 1998
*************** for machine in $build $host $target; do
*** 1827,1832 ****
--- 1827,1841 ----
thread_file='posix'
fi
;;
+ alpha*-*-netbsd*)
+ tm_file="${tm_file} alpha/netbsd.h alpha/elf-netbsd.h"
+ xm_file="${xm_file} alpha/xm-netbsd.h"
+ # On NetBSD, the headers are already okay, except for math.h.
+ fixincludes=fixinc.math
+ tmake_file="t-netbsd alpha/t-netbsd"
+ xmake_file=none
+ gas=yes gnu_ld=yes
+ ;;
alpha*-dec-osf[456789]*)
if [ x$stabs = xyes ]
then
next reply other threads:[~1998-04-30 18:55 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
1998-04-30 18:55 Paul H. Anderson [this message]
1998-05-01 9:55 ` Richard Henderson
1998-05-04 10:58 ` Paul H. Anderson
1998-05-16 23:27 ` Richard Henderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Pine.BSF.3.91.980430153743.13780C-100000@pdq.com \
--to=pha@pdq.com \
--cc=egcs@cygnus.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).