Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/gnu/dist/toolchain/gcc/config/alpha Catch up with other Alph...
details: https://anonhg.NetBSD.org/src/rev/9797835b8b2b
branches: trunk
changeset: 519361:9797835b8b2b
user: thorpej <thorpej%NetBSD.org@localhost>
date: Sun Dec 16 03:09:19 2001 +0000
description:
Catch up with other Alpha-ELF changes. This will get cleaned up
even more somtime soon.
diffstat:
gnu/dist/toolchain/gcc/config/alpha/netbsd.h | 173 +++++++++++++++-----------
1 files changed, 100 insertions(+), 73 deletions(-)
diffs (271 lines):
diff -r 64d8ebf3f273 -r 9797835b8b2b gnu/dist/toolchain/gcc/config/alpha/netbsd.h
--- a/gnu/dist/toolchain/gcc/config/alpha/netbsd.h Sun Dec 16 03:07:59 2001 +0000
+++ b/gnu/dist/toolchain/gcc/config/alpha/netbsd.h Sun Dec 16 03:09:19 2001 +0000
@@ -47,6 +47,30 @@
#undef ASM_FINAL_SPEC
+#undef CC1_SPEC
+#define CC1_SPEC "%{G*}"
+
+#undef ASM_SPEC
+#define ASM_SPEC "%{G*} %{relax:-relax} %{gdwarf*:-no-mdebug}"
+
+/* Provide a LINK_SPEC appropriate for a NetBSD/alpha ELF target. Only
+ the linker emulation and -O options are Alpha-specific. The rest are
+ common to all ELF targets, except for the name of the start function. */
+
+#undef LINK_SPEC
+#define LINK_SPEC \
+ "-m elf64alpha \
+ %{O*:-O3} %{!O*:-O1} \
+ %{assert*} %{R*} \
+ %{shared:-shared} \
+ %{!shared: \
+ -dc -dp \
+ %{!nostdlib:%{!r*:%{!e*:-e __start}}} \
+ %{!static: \
+ %{rdynamic:-export-dynamic} \
+ %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
+ %{static:-static}}"
+
/* Names to predefine in the preprocessor for this target machine.
XXX NetBSD, by convention, shouldn't do __alpha, but lots of applications
expect it because that's what OSF/1 does. */
@@ -83,43 +107,6 @@
#define bsd4_4
#undef HAS_INIT_SECTION
-/* Provide an ASM_SPEC appropriate for a NetBSD/alpha target. This differs
- from the generic NetBSD ASM_SPEC in that no special handling of PIC is
- necessary on the Alpha. */
-
-#undef ASM_SPEC
-#define ASM_SPEC " %| \
- %{mcpu=ev4:-mev4} \
- %{mcpu=21064:-m21064} \
- %{mcpu=ev5:-mev5} \
- %{mcpu=21164:-m21164} \
- %{mcpu=ev56:-mev56} \
- %{mcpu=21164a:-m21164a} \
- %{mcpu=pca56:-mpca56} \
- %{mcpu=21164pc|mcpu=21164PC:-m21164pc} \
- %{mcpu=ev6:-mev6} \
- %{mcpu=21264:-m21264} \
- %{mcpu=ev67:-mev6} \
- %{mcpu=21264a:-m21264}"
-
-/* Provide a LINK_SPEC appropriate for a NetBSD/alpha ELF target. Only
- the linker emulation and -O options are Alpha-specific. The rest are
- common to all ELF targets, except for the name of the start function. */
-
-#undef LINK_SPEC
-#define LINK_SPEC \
- "-m elf64alpha \
- %{O*:-O3} %{!O*:-O1} \
- %{assert*} %{R*} \
- %{shared:-shared} \
- %{!shared: \
- -dc -dp \
- %{!nostdlib:%{!r*:%{!e*:-e __start}}} \
- %{!static: \
- %{rdynamic:-export-dynamic} \
- %{!dynamic-linker:-dynamic-linker /usr/libexec/ld.elf_so}} \
- %{static:-static}}"
-
#undef DEFAULT_VTABLE_THUNKS
#define DEFAULT_VTABLE_THUNKS 1
@@ -127,12 +114,21 @@
#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"); \
+do { \
+ if (write_symbols != DWARF2_DEBUG) \
+ { \
+ alpha_write_verstamp (FILE); \
+ output_file_directive (FILE, main_input_filename); \
+ } \
fprintf (FILE, "\t.set noat\n"); \
-}
+ fprintf (FILE, "\t.set noreorder\n"); \
+ if (TARGET_BWX | TARGET_MAX | TARGET_FIX | TARGET_CIX) \
+ { \
+ fprintf (FILE, "\t.arch %s\n", \
+ (alpha_cpu == PROCESSOR_EV6 ? "ev6" \
+ : TARGET_MAX ? "pca56" : "ev56")); \
+ } \
+} while (0)
#define ASM_OUTPUT_SOURCE_LINE(STREAM, LINE) \
alpha_output_lineno (STREAM, LINE)
@@ -155,8 +151,9 @@
#else
#define ASM_FILE_END(FILE) \
do { \
- fprintf ((FILE), "\t%s\t\"GCC: (GNU) %s\"\n", \
- IDENT_ASM_OP, version_string); \
+ if (!flag_no_ident) \
+ fprintf ((FILE), "\t%s\t\"GCC: (GNU) %s\"\n", \
+ IDENT_ASM_OP, version_string); \
} while (0)
#endif
@@ -227,15 +224,27 @@
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); \
+ if ((SIZE) <= g_switch_value) \
+ sbss_section(); \
+ else \
+ bss_section(); \
+ fprintf (FILE, "\t%s\t ", TYPE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ putc (',', FILE); \
+ fprintf (FILE, TYPE_OPERAND_FMT, "object"); \
+ putc ('\n', FILE); \
+ if (!flag_inhibit_size_directive) \
+ { \
+ fprintf (FILE, "\t%s\t ", SIZE_ASM_OP); \
+ assemble_name (FILE, NAME); \
+ fprintf (FILE, ",%d\n", (SIZE)); \
+ } \
+ ASM_OUTPUT_ALIGN ((FILE), exact_log2((ALIGN) / BITS_PER_UNIT)); \
+ ASM_OUTPUT_LABEL(FILE, NAME); \
+ ASM_OUTPUT_SKIP((FILE), (SIZE)); \
} while (0)
/* This is the pseudo-op used to generate a 64-bit word of data with a
@@ -243,6 +252,18 @@
#define INT_ASM_OP ".quad"
+/* Biggest alignment supported by the object file format of this
+ machine. Use this macro to limit the alignment which can be
+ specified using the `__attribute__ ((aligned (N)))' construct. If
+ not defined, the default value is `BIGGEST_ALIGNMENT'.
+
+ This value is really 2^63. Since gcc figures the alignment in bits,
+ we could only potentially get to 2^60 on suitible hosts. Due to other
+ considerations in varasm, we must restrict this to what fits in an int. */
+
+#define MAX_OFILE_ALIGNMENT \
+ (1 << (HOST_BITS_PER_INT < 64 ? HOST_BITS_PER_INT - 2 : 62))
+
/* 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. */
@@ -280,6 +301,11 @@
#define CTORS_SECTION_ASM_OP ".section\t.ctors,\"aw\""
#define DTORS_SECTION_ASM_OP ".section\t.dtors,\"aw\""
+/* Handle the small data sections. */
+#define BSS_SECTION_ASM_OP ".section\t.bss"
+#define SBSS_SECTION_ASM_OP ".section\t.sbss,\"aw\""
+#define SDATA_SECTION_ASM_OP ".section\t.sdata,\"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.
@@ -295,7 +321,7 @@
includes this file. */
#undef EXTRA_SECTIONS
-#define EXTRA_SECTIONS in_const, in_ctors, in_dtors
+#define EXTRA_SECTIONS in_const, in_ctors, in_dtors, in_sbss, in_sdata
/* A default list of extra section function definitions. For targets
that use additional sections (e.g. .tdesc) you should override this
@@ -304,8 +330,10 @@
#undef EXTRA_SECTION_FUNCTIONS
#define EXTRA_SECTION_FUNCTIONS \
CONST_SECTION_FUNCTION \
- CTORS_SECTION_FUNCTION \
- DTORS_SECTION_FUNCTION
+ SECTION_FUNCTION_TEMPLATE(ctors_section, in_ctors, CTORS_SECTION_ASM_OP) \
+ SECTION_FUNCTION_TEMPLATE(dtors_section, in_dtors, DTORS_SECTION_ASM_OP) \
+ SECTION_FUNCTION_TEMPLATE(sbss_section, in_sbss, SBSS_SECTION_ASM_OP) \
+ SECTION_FUNCTION_TEMPLATE(sdata_section, in_sdata, SDATA_SECTION_ASM_OP)
#undef READONLY_DATA_SECTION
#define READONLY_DATA_SECTION() const_section ()
@@ -325,27 +353,16 @@
} \
}
-#define CTORS_SECTION_FUNCTION \
-void \
-ctors_section () \
+#define SECTION_FUNCTION_TEMPLATE(FN, ENUM, OP) \
+void FN () \
{ \
- if (in_section != in_ctors) \
+ if (in_section != ENUM) \
{ \
- fprintf (asm_out_file, "%s\n", CTORS_SECTION_ASM_OP); \
- in_section = in_ctors; \
+ fprintf (asm_out_file, "%s\n", OP); \
+ in_section = ENUM; \
} \
}
-#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.
@@ -399,7 +416,13 @@
|| !DECL_INITIAL (DECL) \
|| (DECL_INITIAL (DECL) != error_mark_node \
&& !TREE_CONSTANT (DECL_INITIAL (DECL)))) \
- data_section (); \
+ { \
+ int size = int_size_in_bytes (TREE_TYPE (DECL)); \
+ if (size >= 0 && size <= g_switch_value) \
+ sdata_section (); \
+ else \
+ data_section (); \
+ } \
else \
const_section (); \
} \
@@ -476,11 +499,15 @@
#define STRING_ASM_OP ".string"
-/*
- * We always use gas here, so we don't worry about ECOFF assembler problems.
- */
+/* GAS is the only Alpha/ELF assembler. */
#undef TARGET_GAS
#define TARGET_GAS (1)
#undef PREFERRED_DEBUGGING_TYPE
#define PREFERRED_DEBUGGING_TYPE DBX_DEBUG
+
+/* Undo the auto-alignment stuff from alpha.h. ELF has unaligned data
+ pseudos natively. */
+#undef UNALIGNED_SHORT_ASM_OP
+#undef UNALIGNED_INT_ASM_OP
+#undef UNALIGNED_DOUBLE_INT_ASM_OP
Home |
Main Index |
Thread Index |
Old Index