Mercurial > hg > CbC > CbC_gcc
annotate gcc/config/alpha/elf.h @ 111:04ced10e8804
gcc 7
author | kono |
---|---|
date | Fri, 27 Oct 2017 22:46:09 +0900 |
parents | f6334be47118 |
children | 84e7813d76e9 |
rev | line source |
---|---|
0 | 1 /* Definitions of target machine for GNU compiler, for DEC Alpha w/ELF. |
111 | 2 Copyright (C) 1996-2017 Free Software Foundation, Inc. |
0 | 3 Contributed by Richard Henderson (rth@tamu.edu). |
4 | |
5 This file is part of GCC. | |
6 | |
7 GCC is free software; you can redistribute it and/or modify | |
8 it under the terms of the GNU General Public License as published by | |
9 the Free Software Foundation; either version 3, or (at your option) | |
10 any later version. | |
11 | |
12 GCC is distributed in the hope that it will be useful, | |
13 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
15 GNU General Public License for more details. | |
16 | |
17 You should have received a copy of the GNU General Public License | |
18 along with GCC; see the file COPYING3. If not see | |
19 <http://www.gnu.org/licenses/>. */ | |
20 | |
21 #undef CC1_SPEC | |
22 #define CC1_SPEC "%{G*}" | |
23 | |
24 #undef ASM_SPEC | |
111 | 25 #define ASM_SPEC "%{G*} %{relax:-relax} %{!gstabs*:-no-mdebug}%{gstabs*:-mdebug} %{mcpu=*:-m%*}" |
0 | 26 |
111 | 27 /* Do not output a .file directive at the beginning of the input file. */ |
28 | |
29 #undef TARGET_ASM_FILE_START_FILE_DIRECTIVE | |
30 #define TARGET_ASM_FILE_START_FILE_DIRECTIVE false | |
0 | 31 |
111 | 32 /* This is how to output an assembler line |
33 that says to advance the location counter | |
34 to a multiple of 2**LOG bytes. */ | |
0 | 35 |
111 | 36 #define ASM_OUTPUT_ALIGN(FILE,LOG) \ |
37 if ((LOG) != 0) \ | |
38 fprintf (FILE, "\t.align %d\n", LOG); | |
0 | 39 |
40 /* This says how to output assembler code to declare an | |
41 uninitialized internal linkage data object. Under SVR4, | |
42 the linker seems to want the alignment of data objects | |
43 to depend on their types. We do exactly that here. */ | |
44 | |
45 #undef ASM_OUTPUT_ALIGNED_LOCAL | |
46 #define ASM_OUTPUT_ALIGNED_LOCAL(FILE, NAME, SIZE, ALIGN) \ | |
47 do { \ | |
67
f6334be47118
update gcc from gcc-4.6-20100522 to gcc-4.6-20110318
nobuyasu <dimolto@cr.ie.u-ryukyu.ac.jp>
parents:
63
diff
changeset
|
48 if ((SIZE) <= (unsigned HOST_WIDE_INT) g_switch_value) \ |
0 | 49 switch_to_section (sbss_section); \ |
50 else \ | |
51 switch_to_section (bss_section); \ | |
52 ASM_OUTPUT_TYPE_DIRECTIVE (FILE, NAME, "object"); \ | |
53 if (!flag_inhibit_size_directive) \ | |
54 ASM_OUTPUT_SIZE_DIRECTIVE (FILE, NAME, SIZE); \ | |
55 ASM_OUTPUT_ALIGN ((FILE), exact_log2((ALIGN) / BITS_PER_UNIT)); \ | |
56 ASM_OUTPUT_LABEL(FILE, NAME); \ | |
57 ASM_OUTPUT_SKIP((FILE), (SIZE) ? (SIZE) : 1); \ | |
58 } while (0) | |
59 | |
60 /* This says how to output assembler code to declare an | |
61 uninitialized external linkage data object. */ | |
62 | |
63 #undef ASM_OUTPUT_ALIGNED_BSS | |
64 #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \ | |
65 do { \ | |
66 ASM_OUTPUT_ALIGNED_LOCAL (FILE, NAME, SIZE, ALIGN); \ | |
67 } while (0) | |
68 | |
69 #undef BSS_SECTION_ASM_OP | |
70 #define BSS_SECTION_ASM_OP "\t.section\t.bss" | |
71 #undef SBSS_SECTION_ASM_OP | |
72 #define SBSS_SECTION_ASM_OP "\t.section\t.sbss,\"aw\"" | |
73 #undef SDATA_SECTION_ASM_OP | |
74 #define SDATA_SECTION_ASM_OP "\t.section\t.sdata,\"aw\"" | |
75 | |
76 /* This is how we tell the assembler that two symbols have the same value. */ | |
77 | |
78 #undef ASM_OUTPUT_DEF | |
79 #define ASM_OUTPUT_DEF(FILE, ALIAS, NAME) \ | |
80 do { \ | |
81 assemble_name(FILE, ALIAS); \ | |
82 fputs(" = ", FILE); \ | |
83 assemble_name(FILE, NAME); \ | |
84 fputc('\n', FILE); \ | |
85 } while (0) | |
86 | |
87 #undef ASM_OUTPUT_DEF_FROM_DECLS | |
88 #define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL, TARGET) \ | |
89 do { \ | |
90 const char *alias = XSTR (XEXP (DECL_RTL (DECL), 0), 0); \ | |
91 const char *name = IDENTIFIER_POINTER (TARGET); \ | |
92 if (TREE_CODE (DECL) == FUNCTION_DECL) \ | |
93 { \ | |
94 fputc ('$', FILE); \ | |
95 assemble_name (FILE, alias); \ | |
96 fputs ("..ng = $", FILE); \ | |
97 assemble_name (FILE, name); \ | |
98 fputs ("..ng\n", FILE); \ | |
99 } \ | |
111 | 100 ASM_OUTPUT_DEF (FILE, alias, name); \ |
0 | 101 } while (0) |
102 | |
103 /* Provide a STARTFILE_SPEC appropriate for ELF. Here we add the | |
104 (even more) magical crtbegin.o file which provides part of the | |
105 support for getting C++ file-scope static object constructed | |
106 before entering `main'. */ | |
107 | |
108 #undef STARTFILE_SPEC | |
109 #ifdef HAVE_LD_PIE | |
110 #define STARTFILE_SPEC \ | |
111 "%{!shared: %{pg|p:gcrt1.o%s;pie:Scrt1.o%s;:crt1.o%s}}\ | |
112 crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" | |
113 #else | |
114 #define STARTFILE_SPEC \ | |
115 "%{!shared: %{pg|p:gcrt1.o%s;:crt1.o%s}}\ | |
116 crti.o%s %{static:crtbeginT.o%s;shared|pie:crtbeginS.o%s;:crtbegin.o%s}" | |
117 #endif | |
118 | |
119 /* Provide a ENDFILE_SPEC appropriate for ELF. Here we tack on the | |
120 magical crtend.o file which provides part of the support for | |
121 getting C++ file-scope static object constructed before entering | |
122 `main', followed by a normal ELF "finalizer" file, `crtn.o'. */ | |
123 | |
124 #undef ENDFILE_SPEC | |
125 #define ENDFILE_SPEC \ | |
111 | 126 "%{Ofast|ffast-math|funsafe-math-optimizations:crtfastmath.o%s} \ |
0 | 127 %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s" |
128 | |
111 | 129 /* This variable should be set to 'true' if the target ABI requires |
130 unwinding tables even when exceptions are not used. */ | |
131 #define TARGET_UNWIND_TABLES_DEFAULT true | |
132 | |
0 | 133 /* Select a format to encode pointers in exception handling data. CODE |
134 is 0 for data, 1 for code labels, 2 for function pointers. GLOBAL is | |
135 true if the symbol may be affected by dynamic relocations. | |
136 | |
137 Since application size is already constrained to <2GB by the form of | |
138 the ldgp relocation, we can use a 32-bit pc-relative relocation to | |
139 static data. Dynamic data is accessed indirectly to allow for read | |
140 only EH sections. */ | |
141 #define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \ | |
142 (((GLOBAL) ? DW_EH_PE_indirect : 0) | DW_EH_PE_pcrel | DW_EH_PE_sdata4) | |
143 | |
144 /* If defined, a C statement to be executed just prior to the output of | |
145 assembler code for INSN. */ | |
146 #define FINAL_PRESCAN_INSN(INSN, OPVEC, NOPERANDS) \ | |
147 (alpha_this_literal_sequence_number = 0, \ | |
148 alpha_this_gpdisp_sequence_number = 0) | |
149 extern int alpha_this_literal_sequence_number; | |
150 extern int alpha_this_gpdisp_sequence_number; | |
151 | |
152 /* Since the bits of the _init and _fini function is spread across | |
153 many object files, each potentially with its own GP, we must assume | |
154 we need to load our GP. Further, the .init/.fini section can | |
155 easily be more than 4MB away from the function to call so we can't | |
156 use bsr. */ | |
157 #define CRT_CALL_STATIC_FUNCTION(SECTION_OP, FUNC) \ | |
158 asm (SECTION_OP "\n" \ | |
159 " br $29,1f\n" \ | |
160 "1: ldgp $29,0($29)\n" \ | |
161 " unop\n" \ | |
162 " jsr $26," USER_LABEL_PREFIX #FUNC "\n" \ | |
163 " .align 3\n" \ | |
164 " .previous"); | |
165 | |
166 /* If we have the capability create headers for efficient EH lookup. | |
167 As of Jan 2002, only glibc 2.2.4 can actually make use of this, but | |
168 I imagine that other systems will catch up. In the meantime, it | |
169 doesn't harm to make sure that the data exists to be used later. */ | |
170 #if defined(HAVE_LD_EH_FRAME_HDR) | |
111 | 171 #define LINK_EH_SPEC "%{!static|static-pie:--eh-frame-hdr} " |
0 | 172 #endif |