1 /* Definitions of target machine for gcc for Hitachi / SuperH SH using ELF. 2 Copyright (C) 1996, 1997, 2000, 2001, 2002 Free Software Foundation, Inc. 3 Contributed by Ian Lance Taylor <ian@cygnus.com>. 4 5 This file is part of GNU CC. 6 7 GNU CC 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 2, or (at your option) 10 any later version. 11 12 GNU CC 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 GNU CC; see the file COPYING. If not, write to 19 the Free Software Foundation, 59 Temple Place - Suite 330, 20 Boston, MA 02111-1307, USA. */ 21 22 /* Generate DWARF2 debugging information and make it the default */ 23 #define DWARF2_DEBUGGING_INFO 1 24 25 #undef PREFERRED_DEBUGGING_TYPE 26 #define PREFERRED_DEBUGGING_TYPE DWARF2_DEBUG 27 28 /* use a more compact format for line information */ 29 #define DWARF2_ASM_LINE_DEBUG_INFO 1 30 31 /* WCHAR_TYPE / WCHAR_TYPE_SIZE are defined to long int / BITS_PER_WORD in 32 svr4.h, but these work out as 64 bit for shmedia64. */ 33 #undef WCHAR_TYPE 34 /* #define WCHAR_TYPE (TARGET_SH5 ? "int" : "long int") */ 35 #define WCHAR_TYPE SH_ELF_WCHAR_TYPE 36 37 #undef WCHAR_TYPE_SIZE 38 #define WCHAR_TYPE_SIZE 32 39 40 41 /* The prefix to add to user-visible assembler symbols. */ 42 43 #undef LOCAL_LABEL_PREFIX 44 #define LOCAL_LABEL_PREFIX "." 45 46 #undef ASM_FILE_START 47 #define ASM_FILE_START(FILE) do { \ 48 output_file_directive ((FILE), main_input_filename); \ 49 /* We also need to show the text section with the proper \ 50 attributes as in TEXT_SECTION_ASM_OP, before dwarf2out \ 51 emits it without attributes in TEXT_SECTION, else GAS \ 52 will complain. We can teach GAS specifically about the \ 53 default attributes for our choice of text section, but \ 54 then we would have to change GAS again if/when we change \ 55 the text section name. */ \ 56 fprintf ((FILE), "%s\n", TEXT_SECTION_ASM_OP); \ 57 if (TARGET_LITTLE_ENDIAN) \ 58 fprintf ((FILE), "\t.little\n"); \ 59 } while (0) 60 61 62 63 /* Let code know that this is ELF. */ 64 #define TARGET_OBJFMT_CPP_BUILTINS() builtin_define ("__ELF__") 65 66 #undef SIZE_TYPE 67 #define SIZE_TYPE (TARGET_SH5 ? "long unsigned int" : "unsigned int") 68 69 #undef PTRDIFF_TYPE 70 #define PTRDIFF_TYPE (TARGET_SH5 ? "long int" : "int") 71 /* Pass -ml and -mrelax to the assembler and linker. */ 72 #undef ASM_SPEC 73 #define ASM_SPEC "%(subtarget_asm_endian_spec) %{mrelax:-relax} \ 74 %{m5-compact:--isa=SHcompact} %{m5-compact-nofpu:--isa=SHcompact} \ 75 %{m5-32media:--isa=SHmedia --abi=32} %{m5-32media-nofpu:--isa=SHmedia --abi=32} \ 76 %{m5-64media:--isa=SHmedia --abi=64} %{m5-64media-nofpu:--isa=SHmedia --abi=64}" 77 78 #undef LINK_SPEC 79 #define LINK_SPEC SH_LINK_SPEC 80 #undef LINK_EMUL_PREFIX 81 #if TARGET_ENDIAN_DEFAULT == LITTLE_ENDIAN_BIT 82 #define LINK_EMUL_PREFIX "sh%{!mb:l}elf" 83 #else 84 #define LINK_EMUL_PREFIX "sh%{ml:l}elf" 85 #endif 86 87 /* svr4.h undefined DBX_REGISTER_NUMBER, so we need to define it 88 again. */ 89 #define DBX_REGISTER_NUMBER(REGNO) SH_DBX_REGISTER_NUMBER (REGNO) 90 91 #undef ASM_GENERATE_INTERNAL_LABEL 92 #define ASM_GENERATE_INTERNAL_LABEL(STRING, PREFIX, NUM) \ 93 sprintf ((STRING), "*%s%s%ld", LOCAL_LABEL_PREFIX, (PREFIX), (long)(NUM)) 94 95 #undef ASM_OUTPUT_INTERNAL_LABEL 96 #define ASM_OUTPUT_INTERNAL_LABEL(FILE,PREFIX,NUM) \ 97 asm_fprintf ((FILE), "%L%s%d:\n", (PREFIX), (NUM)) 98 99 #undef ASM_OUTPUT_SOURCE_LINE 100 #define ASM_OUTPUT_SOURCE_LINE(file, line) \ 101 do \ 102 { \ 103 static int sym_lineno = 1; \ 104 asm_fprintf ((file), ".stabn 68,0,%d,%LLM%d-", \ 105 (line), sym_lineno); \ 106 assemble_name ((file), \ 107 XSTR (XEXP (DECL_RTL (current_function_decl), 0), 0));\ 108 asm_fprintf ((file), "\n%LLM%d:\n", sym_lineno); \ 109 sym_lineno += 1; \ 110 } \ 111 while (0) 112 113 #undef DBX_OUTPUT_MAIN_SOURCE_FILE_END 114 #define DBX_OUTPUT_MAIN_SOURCE_FILE_END(FILE, FILENAME) \ 115 do { \ 116 text_section (); \ 117 fprintf ((FILE), "\t.stabs \"\",%d,0,0,Letext\nLetext:\n", N_SO); \ 118 } while (0) 119 120 #undef STARTFILE_SPEC 121 #define STARTFILE_SPEC \ 122 "%{!shared: crt1.o%s} crti.o%s \ 123 %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}" 124 125 #undef ENDFILE_SPEC 126 #define ENDFILE_SPEC \ 127 "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s" 128 129 /* ASM_OUTPUT_CASE_LABEL is defined in elfos.h. With it, 130 a redundant .align was generated. */ 131 #undef ASM_OUTPUT_CASE_LABEL 132