111
|
1 /* Definitions for Intel 386 systems using GNU userspace.
|
145
|
2 Copyright (C) 1994-2020 Free Software Foundation, Inc.
|
111
|
3 Contributed by Eric Youngdale.
|
|
4 Modified for stabs-in-ELF by H.J. Lu.
|
|
5
|
|
6 This file is part of GCC.
|
|
7
|
|
8 GCC is free software; you can redistribute it and/or modify
|
|
9 it under the terms of the GNU General Public License as published by
|
|
10 the Free Software Foundation; either version 3, or (at your option)
|
|
11 any later version.
|
|
12
|
|
13 GCC is distributed in the hope that it will be useful,
|
|
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
16 GNU General Public License for more details.
|
|
17
|
|
18 You should have received a copy of the GNU General Public License
|
|
19 along with GCC; see the file COPYING3. If not see
|
|
20 <http://www.gnu.org/licenses/>. */
|
|
21
|
|
22 /* Output at beginning of assembler file. */
|
|
23 /* The .file command should always begin the output. */
|
|
24 #define TARGET_ASM_FILE_START_FILE_DIRECTIVE true
|
|
25
|
|
26 #undef ASM_COMMENT_START
|
|
27 #define ASM_COMMENT_START "#"
|
|
28
|
|
29 #undef DBX_REGISTER_NUMBER
|
|
30 #define DBX_REGISTER_NUMBER(n) \
|
|
31 (TARGET_64BIT ? dbx64_register_map[n] : svr4_dbx_register_map[n])
|
|
32
|
|
33 /* Output assembler code to FILE to call the profiler.
|
|
34 To the best of my knowledge, no GNU userspace libc has required the label
|
|
35 argument to mcount. */
|
|
36
|
|
37 #define NO_PROFILE_COUNTERS 1
|
|
38
|
|
39 #undef MCOUNT_NAME
|
|
40 #define MCOUNT_NAME "mcount"
|
|
41
|
|
42 /* The GLIBC version of mcount for the x86 assumes that there is a
|
|
43 frame, so we cannot allow profiling without a frame pointer. */
|
|
44
|
|
45 #undef SUBTARGET_FRAME_POINTER_REQUIRED
|
|
46 #define SUBTARGET_FRAME_POINTER_REQUIRED crtl->profile
|
|
47
|
|
48 #undef SIZE_TYPE
|
|
49 #define SIZE_TYPE "unsigned int"
|
|
50
|
|
51 #undef PTRDIFF_TYPE
|
|
52 #define PTRDIFF_TYPE "int"
|
|
53
|
|
54 #undef WCHAR_TYPE
|
|
55 #define WCHAR_TYPE "long int"
|
|
56
|
|
57 #undef WCHAR_TYPE_SIZE
|
|
58 #define WCHAR_TYPE_SIZE BITS_PER_WORD
|
|
59
|
|
60 /* Provide a LINK_SPEC appropriate for GNU userspace. Here we provide support
|
|
61 for the special GCC options -static and -shared, which allow us to
|
|
62 link things in one of these three modes by applying the appropriate
|
|
63 combinations of options at link-time.
|
|
64
|
|
65 When the -shared link option is used a final link is not being
|
|
66 done. */
|
|
67
|
|
68 #undef ASM_SPEC
|
|
69 #define ASM_SPEC \
|
131
|
70 "--32 %{msse2avx:%{!mavx:-msse2avx}}"
|
111
|
71
|
|
72 #undef SUBTARGET_EXTRA_SPECS
|
|
73 #define SUBTARGET_EXTRA_SPECS \
|
|
74 { "link_emulation", GNU_USER_LINK_EMULATION },\
|
|
75 { "dynamic_linker", GNU_USER_DYNAMIC_LINKER }
|
|
76
|
|
77 #define GNU_USER_TARGET_LINK_SPEC "-m %(link_emulation) %{shared:-shared} \
|
|
78 %{!shared: \
|
|
79 %{!static: \
|
|
80 %{!static-pie: \
|
|
81 %{rdynamic:-export-dynamic} \
|
|
82 -dynamic-linker %(dynamic_linker)}} \
|
|
83 %{static:-static} %{static-pie:-static -pie --no-dynamic-linker -z text}}"
|
|
84
|
|
85 #undef LINK_SPEC
|
|
86 #define LINK_SPEC GNU_USER_TARGET_LINK_SPEC
|
|
87
|
|
88 /* A C statement (sans semicolon) to output to the stdio stream
|
|
89 FILE the assembler definition of uninitialized global DECL named
|
|
90 NAME whose size is SIZE bytes and alignment is ALIGN bytes.
|
|
91 Try to use asm_output_aligned_bss to implement this macro. */
|
|
92
|
|
93 #define ASM_OUTPUT_ALIGNED_BSS(FILE, DECL, NAME, SIZE, ALIGN) \
|
|
94 asm_output_aligned_bss (FILE, DECL, NAME, SIZE, ALIGN)
|
|
95
|
|
96 /* A C statement to output to the stdio stream FILE an assembler
|
|
97 command to advance the location counter to a multiple of 1<<LOG
|
131
|
98 bytes if it is within MAX_SKIP bytes. */
|
111
|
99
|
131
|
100 #define SUBALIGN_LOG 3
|
111
|
101
|
|
102 #ifdef HAVE_GAS_MAX_SKIP_P2ALIGN
|
|
103 #define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \
|
|
104 do { \
|
|
105 if ((LOG) != 0) { \
|
131
|
106 if ((MAX_SKIP) == 0 || (MAX_SKIP) >= (1 << (LOG)) - 1) \
|
|
107 fprintf ((FILE), "\t.p2align %d\n", (LOG)); \
|
|
108 else \
|
111
|
109 fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \
|
|
110 } \
|
|
111 } while (0)
|
|
112 #endif
|
|
113
|
|
114 /* Handle special EH pointer encodings. Absolute, pc-relative, and
|
|
115 indirect are handled automatically. */
|
|
116 #define ASM_MAYBE_OUTPUT_ENCODED_ADDR_RTX(FILE, ENCODING, SIZE, ADDR, DONE) \
|
|
117 do { \
|
|
118 if ((SIZE) == 4 && ((ENCODING) & 0x70) == DW_EH_PE_datarel) \
|
|
119 { \
|
|
120 fputs (ASM_LONG, FILE); \
|
|
121 assemble_name (FILE, XSTR (ADDR, 0)); \
|
|
122 fputs (((ENCODING) & DW_EH_PE_indirect ? "@GOT" : "@GOTOFF"), FILE); \
|
|
123 goto DONE; \
|
|
124 } \
|
|
125 } while (0)
|
|
126
|
|
127 #ifdef TARGET_LIBC_PROVIDES_SSP
|
|
128 /* i386 glibc provides __stack_chk_guard in %gs:0x14. */
|
|
129 #define TARGET_THREAD_SSP_OFFSET 0x14
|
|
130
|
131
|
131 /* i386 glibc provides __private_ss in %gs:0x30. */
|
111
|
132 #define TARGET_THREAD_SPLIT_STACK_OFFSET 0x30
|
|
133 #endif
|