|
|
1.1 ! root 1: /* Core target definitions for GNU compiler ! 2: for IBM RS/6000 PowerPC targeted to embedded ELF systems. ! 3: Copyright (C) 1995 Free Software Foundation, Inc. ! 4: Contributed by Cygnus Support. ! 5: ! 6: This file is part of GNU CC. ! 7: ! 8: GNU CC 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 2, or (at your option) ! 11: any later version. ! 12: ! 13: GNU CC 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 GNU CC; see the file COPYING. If not, write to ! 20: the Free Software Foundation, 59 Temple Place - Suite 330, ! 21: Boston, MA 02111-1307, USA. */ ! 22: ! 23: #include "rs6000/sysv4.h" ! 24: ! 25: /* For now, make stabs the default debugging type, not dwarf. */ ! 26: #undef PREFERRED_DEBUGGING_TYPE ! 27: #define PREFERRED_DEBUGGING_TYPE DBX_DEBUG ! 28: ! 29: /* Make int foo : 8 not cause structures to be aligned to an int boundary */ ! 30: ! 31: #undef PCC_BITFIELD_TYPE_MATTERS ! 32: #define PCC_BITFIELD_TYPE_MATTERS (TARGET_BITFIELD_TYPE) ! 33: ! 34: /* Define this macro to be the value 1 if instructions will fail to ! 35: work if given data not on the nominal alignment. If instructions ! 36: will merely go slower in that case, define this macro as 0. ! 37: ! 38: Note, little endian systems trap on unaligned addresses, so never ! 39: turn off strict alignment in that case. */ ! 40: #undef STRICT_ALIGNMENT ! 41: #define STRICT_ALIGNMENT (TARGET_STRICT_ALIGN || TARGET_LITTLE_ENDIAN) ! 42: ! 43: /* Align stack to 8 byte boundaries, rather than 16 bytes Sys V.4 uses */ ! 44: #undef STACK_BOUNDARY ! 45: #define STACK_BOUNDARY 64 ! 46: ! 47: /* No data type wants to be aligned rounder than this. */ ! 48: #undef BIGGEST_ALIGNMENT ! 49: #define BIGGEST_ALIGNMENT 64 ! 50: ! 51: /* Put PC relative got entries in .got2 */ ! 52: #undef MINIMAL_TOC_SECTION_ASM_OP ! 53: #define MINIMAL_TOC_SECTION_ASM_OP \ ! 54: ((TARGET_RELOCATABLE) ? "\t.section\t\".got2\",\"aw\"" : "\t.section\t\".got1\",\"aw\"") ! 55: ! 56: /* Put relocatable data in .data, not .rodata so initialized pointers can be updated */ ! 57: #undef CONST_SECTION_ASM_OP ! 58: #define CONST_SECTION_ASM_OP \ ! 59: ((TARGET_RELOCATABLE) ? "\t.section\t\".data\"\t# .rodata" : "\t.section\t\".rodata\"") ! 60: ! 61: /* Invoke an initializer function to set up the GOT */ ! 62: #define NAME__MAIN "__eabi" ! 63: #define INVOKE__main 1 ! 64: ! 65: #undef TARGET_VERSION ! 66: #define TARGET_VERSION fprintf (stderr, " (PowerPC Embedded)"); ! 67: ! 68: #undef CPP_PREDEFINES ! 69: #define CPP_PREDEFINES \ ! 70: "-DPPC -D__embedded__ -Asystem(embedded) -Acpu(powerpc) -Amachine(powerpc)" ! 71: ! 72: /* Don't use startfiles or libraries except for libgcc.a */ ! 73: #undef STARTFILE_SPEC ! 74: #define STARTFILE_SPEC "" ! 75: ! 76: #undef LIB_SPEC ! 77: #define LIB_SPEC "" ! 78: ! 79: #undef LIBGCC_SPEC ! 80: #define LIBGCC_SPEC "libgcc.a%s" ! 81: ! 82: #undef ENDFILE_SPEC ! 83: #define ENDFILE_SPEC "" ! 84: ! 85: /* This is how to output an assembler line defining an `int' constant. ! 86: For -mrelocatable, we mark all addresses that need to be fixed up ! 87: in the .fixup section. */ ! 88: #undef ASM_OUTPUT_INT ! 89: #define ASM_OUTPUT_INT(FILE,VALUE) \ ! 90: do { \ ! 91: static int recurse = 0; \ ! 92: if (TARGET_RELOCATABLE \ ! 93: && in_section != in_toc \ ! 94: && in_section != in_text \ ! 95: && in_section != in_ctors \ ! 96: && in_section != in_dtors \ ! 97: && !recurse \ ! 98: && GET_CODE (VALUE) != CONST_INT \ ! 99: && GET_CODE (VALUE) != CONST_DOUBLE \ ! 100: && CONSTANT_P (VALUE)) \ ! 101: { \ ! 102: static int labelno = 0; \ ! 103: char buf[256], *p; \ ! 104: \ ! 105: recurse = 1; \ ! 106: ASM_GENERATE_INTERNAL_LABEL (buf, "LCP", labelno++); \ ! 107: STRIP_NAME_ENCODING (p, buf); \ ! 108: fprintf (FILE, "%s:\n", p); \ ! 109: fprintf (FILE, "\t.long ("); \ ! 110: output_addr_const (FILE, (VALUE)); \ ! 111: fprintf (FILE, ")@fixup\n"); \ ! 112: fprintf (FILE, "\t.section\t\".fixup\",\"aw\"\n"); \ ! 113: ASM_OUTPUT_ALIGN (FILE, 2); \ ! 114: fprintf (FILE, "\t.long\t%s\n", p); \ ! 115: fprintf (FILE, "\t.previous\n"); \ ! 116: recurse = 0; \ ! 117: } \ ! 118: else \ ! 119: { \ ! 120: fprintf (FILE, "\t.long "); \ ! 121: output_addr_const (FILE, (VALUE)); \ ! 122: fprintf (FILE, "\n"); \ ! 123: } \ ! 124: } while (0) ! 125:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.