1 /* Override definitions in elfos.h/svr4.h to be correct for IA64. */ 2 3 #undef TARGET_INIT_LIBFUNCS 4 #define TARGET_INIT_LIBFUNCS ia64_sysv4_init_libfuncs 5 6 /* We want DWARF2 as specified by the IA64 ABI. */ 7 #undef PREFERRED_DEBUGGING_TYPE 8 #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG 9 10 /* Stabs does not work properly for 64-bit targets. */ 11 #undef DBX_DEBUGGING_INFO 12 13 /* Various pseudo-ops for which the Intel assembler uses non-standard 14 definitions. */ 15 16 #undef STRING_ASM_OP 17 #define STRING_ASM_OP "\tstringz\t" 18 19 #undef SKIP_ASM_OP 20 #define SKIP_ASM_OP "\t.skip\t" 21 22 #undef COMMON_ASM_OP 23 #define COMMON_ASM_OP "\t.common\t" 24 25 #undef ASCII_DATA_ASM_OP 26 #define ASCII_DATA_ASM_OP "\tstring\t" 27 28 /* ia64-specific options for gas 29 ??? ia64 gas doesn't accept standard svr4 assembler options? */ 30 #undef ASM_SPEC 31 #define ASM_SPEC "-x %{mconstant-gp} %{mauto-pic} %(asm_extra)" 32 33 /* ??? Unfortunately, .lcomm doesn't work, because it puts things in either 34 .bss or .sbss, and we can't control the decision of which is used. When 35 I use .lcomm, I get a cryptic "Section group has no member" error from 36 the Intel simulator. So we must explicitly put variables in .bss 37 instead. This matters only if we care about the Intel assembler. */ 38 39 /* This is asm_output_aligned_bss from varasm.c without the 40 (*targetm.asm_out.globalize_label) call at the beginning. */ 41 42 /* This is for final.c, because it is used by ASM_DECLARE_OBJECT_NAME. */ 43 extern int size_directive_output; 44 45 #undef ASM_OUTPUT_ALIGNED_LOCAL 46 #define ASM_OUTPUT_ALIGNED_DECL_LOCAL(FILE, DECL, NAME, SIZE, ALIGN) \ 47 do { \ 48 if ((DECL) && sdata_symbolic_operand (XEXP (DECL_RTL (DECL), 0), Pmode)) \ 49 switch_to_section (sbss_section); \ 50 else \ 51 switch_to_section (bss_section); \ 52 ASM_OUTPUT_ALIGN (FILE, floor_log2 ((ALIGN) / BITS_PER_UNIT)); \ 53 ASM_DECLARE_OBJECT_NAME (FILE, NAME, DECL); \ 54 ASM_OUTPUT_SKIP (FILE, SIZE ? SIZE : 1); \ 55 } while (0) 56 57 /* The # tells the Intel assembler that this is not a register name. 58 However, we can't emit the # in a label definition, so we set a variable 59 in ASM_OUTPUT_LABEL to control whether we want the postfix here or not. 60 We append the # to the label name, but since NAME can be an expression 61 we have to scan it for a non-label character and insert the # there. */ 62 63 #undef ASM_OUTPUT_LABELREF 64 #define ASM_OUTPUT_LABELREF(STREAM, NAME) \ 65 do { \ 66 const char *name_ = NAME; \ 67 if (*name_ == '*') \ 68 name_++; \ 69 else \ 70 fputs (user_label_prefix, STREAM); \ 71 fputs (name_, STREAM); \ 72 if (!ia64_asm_output_label) \ 73 fputc ('#', STREAM); \ 74 } while (0) 75 76 /* Intel assembler requires both flags and type if declaring a non-predefined 77 section. */ 78 #undef INIT_SECTION_ASM_OP 79 #define INIT_SECTION_ASM_OP "\t.section\t.init,\"ax\",\"progbits\"" 80 #undef FINI_SECTION_ASM_OP 81 #define FINI_SECTION_ASM_OP "\t.section\t.fini,\"ax\",\"progbits\"" 82 83 /* svr4.h undefines this, so we need to define it here. */ 84 #define DBX_REGISTER_NUMBER(REGNO) \ 85 ia64_dbx_register_number(REGNO) 86 87 /* Things that svr4.h defines to the wrong type, because it assumes 32 bit 88 ints and 32 bit longs. */ 89 90 #undef SIZE_TYPE 91 #define SIZE_TYPE "long unsigned int" 92 93 #undef PTRDIFF_TYPE 94 #define PTRDIFF_TYPE "long int" 95 96 #undef WCHAR_TYPE 97 #define WCHAR_TYPE "int" 98 99 #undef WCHAR_TYPE_SIZE 100 #define WCHAR_TYPE_SIZE 32 101 102 /* We redefine this to use the ia64 .proc pseudo-op. */ 103 104 #undef ASM_DECLARE_FUNCTION_NAME 105 #define ASM_DECLARE_FUNCTION_NAME(FILE, NAME, DECL) \ 106 do { \ 107 fputs ("\t.proc ", FILE); \ 108 assemble_name (FILE, NAME); \ 109 fputc ('\n', FILE); \ 110 ASM_OUTPUT_LABEL (FILE, NAME); \ 111 } while (0) 112 113 /* We redefine this to use the ia64 .endp pseudo-op. */ 114 115 #undef ASM_DECLARE_FUNCTION_SIZE 116 #define ASM_DECLARE_FUNCTION_SIZE(FILE, NAME, DECL) \ 117 do { \ 118 fputs ("\t.endp ", FILE); \ 119 assemble_name (FILE, NAME); \ 120 fputc ('\n', FILE); \ 121 } while (0) 122 123 /* Override default elf definition. */ 124 #undef TARGET_ASM_RELOC_RW_MASK 125 #define TARGET_ASM_RELOC_RW_MASK ia64_reloc_rw_mask 126 #undef TARGET_ASM_SELECT_RTX_SECTION 127 #define TARGET_ASM_SELECT_RTX_SECTION ia64_select_rtx_section 128 129 #define SDATA_SECTION_ASM_OP "\t.sdata" 130 #define SBSS_SECTION_ASM_OP "\t.sbss" 131