1 /* Override definitions in elfos.h/svr4.h to be correct for IA64. 2 3 Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 4 2007 Free Software Foundation, Inc. 5 6 This file is part of GCC. 7 8 GCC is free software; you can redistribute it and/or modify it under 9 the terms of the GNU General Public License as published by the Free 10 Software Foundation; either version 3, or (at your option) any later 11 version. 12 13 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 14 WARRANTY; without even the implied warranty of MERCHANTABILITY or 15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 16 for more details. 17 18 Under Section 7 of GPL version 3, you are granted additional 19 permissions described in the GCC Runtime Library Exception, version 20 3.1, as published by the Free Software Foundation. 21 22 You should have received a copy of the GNU General Public License and 23 a copy of the GCC Runtime Library Exception along with this program; 24 see the files COPYING3 and COPYING.RUNTIME respectively. If not, see 25 <http://www.gnu.org/licenses/>. */ 26 27 #undef TARGET_INIT_LIBFUNCS 28 #define TARGET_INIT_LIBFUNCS ia64_sysv4_init_libfuncs 29 30 /* We want DWARF2 as specified by the IA64 ABI. */ 31 #undef PREFERRED_DEBUGGING_TYPE 32 #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG 33 34 /* Stabs does not work properly for 64-bit targets. */ 35 #undef DBX_DEBUGGING_INFO 36 37 /* Various pseudo-ops for which the Intel assembler uses non-standard 38 definitions. */ 39 40 #undef STRING_ASM_OP 41 #define STRING_ASM_OP "\tstringz\t" 42 43 #undef SKIP_ASM_OP 44 #define SKIP_ASM_OP "\t.skip\t" 45 46 #undef COMMON_ASM_OP 47 #define COMMON_ASM_OP "\t.common\t" 48 49 #undef ASCII_DATA_ASM_OP 50 #define ASCII_DATA_ASM_OP "\tstring\t" 51 52 /* ia64-specific options for gas 53 ??? ia64 gas doesn't accept standard svr4 assembler options? */ 54 #undef ASM_SPEC 55 #define ASM_SPEC "-x %{mconstant-gp} %{mauto-pic} %(asm_extra)" 56 57 /* ??? Unfortunately, .lcomm doesn't work, because it puts things in either 58 .bss or .sbss, and we can't control the decision of which is used. When 59 I use .lcomm, I get a cryptic "Section group has no member" error from 60 the Intel simulator. So we must explicitly put variables in .bss 61 instead. This matters only if we care about the Intel assembler. */ 62 63 /* This is asm_output_aligned_bss from varasm.c without the 64 (*targetm.asm_out.globalize_label) call at the beginning. */ 65 66 /* This is for final.c, because it is used by ASM_DECLARE_OBJECT_NAME. */ 67 extern int size_directive_output; 68 69 #undef ASM_OUTPUT_ALIGNED_LOCAL 70 #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ 71 do { \ 72 if ((DECL) && sdata_symbolic_operand (XEXP (DECL_RTL (DECL), 0), Pmode)) \ 73 switch_to_section (sbss_section); \ 74 else \ 75 switch_to_section (bss_section); \ 76 ASM_OUTPUT_ALIGN (FILE, floor_log2 ((ALIGN) / BITS_PER_UNIT)); \ 77 ASM_DECLARE_OBJECT_NAME (FILE, NAME, DECL); \ 78 ASM_OUTPUT_SKIP (FILE, SIZE ? SIZE : 1); \ 79 } while (0) 80 81 /* The # tells the Intel assembler that this is not a register name. 82 However, we can't emit the # in a label definition, so we set a variable 83 in ASM_OUTPUT_LABEL to control whether we want the postfix here or not. 84 We append the # to the label name, but since NAME can be an expression 85 we have to scan it for a non-label character and insert the # there. */ 86 87 #undef ASM_OUTPUT_LABELREF 88 #define ASM_OUTPUT_LABELREF(STREAM, NAME) \ 89 do { \ 90 const char *name_ = NAME; \ 91 if (*name_ == '*') \ 92 name_++; \ 93 else \ 94 fputs (user_label_prefix, STREAM); \ 95 fputs (name_, STREAM); \ 96 if (!ia64_asm_output_label) \ 97 fputc ('#', STREAM); \ 98 } while (0) 99 100 /* Intel assembler requires both flags and type if declaring a non-predefined 101 section. */ 102 #undef INIT_SECTION_ASM_OP 103 #define INIT_SECTION_ASM_OP "\t.section\t.init,\"ax\",\"progbits\"" 104 #undef FINI_SECTION_ASM_OP 105 #define FINI_SECTION_ASM_OP "\t.section\t.fini,\"ax\",\"progbits\"" 106 107 /* svr4.h undefines this, so we need to define it here. */ 108 #define DBX_REGISTER_NUMBER(REGNO) \ 109 ia64_dbx_register_number(REGNO) 110 111 /* Things that svr4.h defines to the wrong type, because it assumes 32-bit 112 ints and 32-bit longs. */ 113 114 #undef SIZE_TYPE 115 #define SIZE_TYPE "long unsigned int" 116 117 #undef PTRDIFF_TYPE 118 #define PTRDIFF_TYPE "long int" 119 120 #undef WCHAR_TYPE 121 #define WCHAR_TYPE "int" 122 123 #undef WCHAR_TYPE_SIZE 124 #define WCHAR_TYPE_SIZE 32 125 126 /* We redefine this to use the ia64 .proc pseudo-op. */ 127 128 #undef ASM_DECLARE_FUNCTION_NAME 129 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ 130 do { \ 131 fputs ("\t.proc ", FILE); \ 132 assemble_name (FILE, NAME); \ 133 fputc ('\n', FILE); \ 134 ASM_OUTPUT_LABEL (FILE, NAME); \ 135 } while (0) 136 137 /* We redefine this to use the ia64 .endp pseudo-op. */ 138 139 #undef ASM_DECLARE_FUNCTION_SIZE 140 #define ASM_DECLARE_FUNCTION_SIZE(FILE, NAME, DECL) \ 141 do { \ 142 fputs ("\t.endp ", FILE); \ 143 assemble_name (FILE, NAME); \ 144 fputc ('\n', FILE); \ 145 } while (0) 146 147 /* Override default elf definition. */ 148 #undef TARGET_ASM_RELOC_RW_MASK 149 #define TARGET_ASM_RELOC_RW_MASK ia64_reloc_rw_mask 150 #undef TARGET_ASM_SELECT_RTX_SECTION 151 #define TARGET_ASM_SELECT_RTX_SECTION ia64_select_rtx_section 152 153 #define SDATA_SECTION_ASM_OP "\t.sdata" 154 #define SBSS_SECTION_ASM_OP "\t.sbss" 155