]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/config/i386/sol2.h
host-hpux.c: Change copyright header to refer to version 3 of the GNU General Public...
[thirdparty/gcc.git] / gcc / config / i386 / sol2.h
CommitLineData
a805d35f 1/* Target definitions for GCC for Intel 80386 running Solaris 2
caec2cfc 2 Copyright (C) 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003,
2f83c7d6 3 2004, 2007 Free Software Foundation, Inc.
7d4ea832 4 Contributed by Fred Fish (fnf@cygnus.com).
266f9541 5
a805d35f 6This file is part of GCC.
266f9541 7
a805d35f 8GCC is free software; you can redistribute it and/or modify
266f9541 9it under the terms of the GNU General Public License as published by
2f83c7d6 10the Free Software Foundation; either version 3, or (at your option)
266f9541
JW
11any later version.
12
a805d35f 13GCC is distributed in the hope that it will be useful,
266f9541
JW
14but WITHOUT ANY WARRANTY; without even the implied warranty of
15MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16GNU General Public License for more details.
17
18You should have received a copy of the GNU General Public License
2f83c7d6
NC
19along with GCC; see the file COPYING3. If not see
20<http://www.gnu.org/licenses/>. */
266f9541 21
266f9541
JW
22/* The Solaris 2.0 x86 linker botches alignment of code sections.
23 It tries to align to a 16 byte boundary by padding with 0x00000090
24 ints, rather than 0x90 bytes (nop). This generates trash in the
25 ".init" section since the contribution from crtbegin.o is only 7
26 bytes. The linker pads it to 16 bytes with a single 0x90 byte, and
27 two 0x00000090 ints, which generates a segmentation violation when
28 executed. This macro forces the assembler to do the padding, since
892a2d68 29 it knows what it is doing. */
cea3bd3e 30#define FORCE_CODE_SECTION_ALIGN asm(ALIGN_ASM_OP "16");
ebf3718c 31
a8e68029
DJ
32/* Old versions of the Solaris assembler can not handle the difference of
33 labels in different sections, so force DW_EH_PE_datarel. */
c1911346
RO
34#undef ASM_PREFERRED_EH_DATA_FORMAT
35#define ASM_PREFERRED_EH_DATA_FORMAT(CODE,GLOBAL) \
a8e68029
DJ
36 (flag_pic ? ((GLOBAL ? DW_EH_PE_indirect : 0) \
37 | (TARGET_64BIT ? DW_EH_PE_pcrel | DW_EH_PE_sdata4 \
38 : DW_EH_PE_datarel)) \
c1911346
RO
39 : DW_EH_PE_absptr)
40
1a35e62d
MM
41/* The Solaris linker will not merge a read-only .eh_frame section
42 with a read-write .eh_frame section. None of the encodings used
43 with non-PIC code require runtime relocations. In 64-bit mode,
44 since there is no backwards compatibility issue, we use a read-only
45 section for .eh_frame. In 32-bit mode, we use a writable .eh_frame
46 section in order to be compatible with G++ for Solaris x86. */
47#undef EH_TABLES_CAN_BE_READ_ONLY
48#define EH_TABLES_CAN_BE_READ_ONLY (TARGET_64BIT)
49
5e3caf26 50/* Solaris 2/Intel as chokes on #line directives. */
ebf3718c 51#undef CPP_SPEC
48137d59 52#define CPP_SPEC "%{,assembler-with-cpp:-P} %(cpp_subtarget)"
68d69835 53
8433a25e
RO
54/* FIXME: Removed -K PIC from generic Solaris 2 ASM_SPEC: the native assembler
55 gives many warnings: R_386_32 relocation is used for symbol ".text". */
56#undef ASM_SPEC
57#define ASM_SPEC "\
58%{v:-V} %{Qy:} %{!Qn:-Qy} %{n} %{T} %{Ym,*} %{Wa,*:%*} -s \
59%(asm_cpu) \
60"
61
62#define ASM_CPU_SPEC ""
63
64#undef SUBTARGET_EXTRA_SPECS
65#define SUBTARGET_EXTRA_SPECS \
66 { "cpp_subtarget", CPP_SUBTARGET_SPEC }, \
67 { "asm_cpu", ASM_CPU_SPEC }, \
68 { "startfile_arch", STARTFILE_ARCH_SPEC }, \
69 { "link_arch", LINK_ARCH_SPEC }
62481348
JC
70
71#undef LOCAL_LABEL_PREFIX
72#define LOCAL_LABEL_PREFIX "."
60ffc997 73
a8e68029
DJ
74/* The 32-bit Solaris assembler does not support .quad. Do not use it. */
75#ifndef TARGET_BI_ARCH
60ffc997 76#undef ASM_QUAD
a8e68029 77#endif
25178498
JJ
78
79/* The Solaris assembler wants a .local for non-exported aliases. */
80#define ASM_OUTPUT_DEF_FROM_DECLS(FILE, DECL, TARGET) \
81 do { \
82 const char *declname = \
83 IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (DECL)); \
84 ASM_OUTPUT_DEF ((FILE), declname, \
85 IDENTIFIER_POINTER (TARGET)); \
86 if (! TREE_PUBLIC (DECL)) \
87 { \
88 fprintf ((FILE), "%s", LOCAL_ASM_OP); \
89 assemble_name ((FILE), declname); \
90 fprintf ((FILE), "\n"); \
91 } \
92 } while (0)
07a43492
DJ
93
94/* Solaris-specific #pragmas are implemented on top of attributes. Hook in
95 the bits from config/sol2.c. */
96#define SUBTARGET_INSERT_ATTRIBUTES solaris_insert_attributes
97#define SUBTARGET_ATTRIBUTE_TABLE SOLARIS_ATTRIBUTE_TABLE
98
99/* Output a simple call for .init/.fini. */
dbdd0cf3
MM
100#define ASM_OUTPUT_CALL(FILE, FN) \
101 do \
102 { \
103 fprintf (FILE, "\tcall\t"); \
104 print_operand (FILE, XEXP (DECL_RTL (FN), 0), 'P'); \
105 fprintf (FILE, "\n"); \
106 } \
107 while (0)
81e4cf35
MM
108
109/* We do not need NT_VERSION notes. */
110#undef X86_FILE_START_VERSION_DIRECTIVE
111#define X86_FILE_START_VERSION_DIRECTIVE false