diff options
Diffstat (limited to 'gcc/config/score/elf.h')
-rw-r--r-- | gcc/config/score/elf.h | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/gcc/config/score/elf.h b/gcc/config/score/elf.h new file mode 100644 index 00000000000..8c8b5dc80eb --- /dev/null +++ b/gcc/config/score/elf.h @@ -0,0 +1,101 @@ +/* elf.h for Sunplus S+CORE processor + Copyright (C) 2005 Free Software Foundation, Inc. + + This file is part of GCC. + + GCC is free software; you can redistribute it and/or modify it + under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 2, or (at your + option) any later version. + + GCC is distributed in the hope that it will be useful, but WITHOUT + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public + License for more details. + + You should have received a copy of the GNU General Public License + along with GCC; see the file COPYING. If not, write to + the Free Software Foundation, 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ + +#define OBJECT_FORMAT_ELF + +/* Biggest alignment supported by the object file format of this machine. */ +#undef MAX_OFILE_ALIGNMENT +#define MAX_OFILE_ALIGNMENT (32768 * 8) + +/* Switch into a generic section. */ +#undef TARGET_ASM_NAMED_SECTION +#define TARGET_ASM_NAMED_SECTION default_elf_asm_named_section + +/* The following macro defines the format used to output the second + operand of the .type assembler directive. */ +#define TYPE_OPERAND_FMT "@%s" + +#undef TYPE_ASM_OP +#define TYPE_ASM_OP "\t.type\t" + +#undef SIZE_ASM_OP +#define SIZE_ASM_OP "\t.size\t" + +/* A c expression whose value is a string containing the + assembler operation to identify the following data as + uninitialized global data. */ +#ifndef BSS_SECTION_ASM_OP +#define BSS_SECTION_ASM_OP "\t.section\t.bss" +#endif + +#ifndef ASM_OUTPUT_ALIGNED_BSS +#define ASM_OUTPUT_ALIGNED_BSS asm_output_aligned_bss +#endif + +#define ASM_OUTPUT_DEF(FILE, LABEL1, LABEL2) \ + do { \ + fputc ('\t', FILE); \ + assemble_name (FILE, LABEL1); \ + fputs (" = ", FILE); \ + assemble_name (FILE, LABEL2); \ + fputc ('\n', FILE); \ + } while (0) + + +/* This is how we tell the assembler that a symbol is weak. */ +#undef ASM_WEAKEN_LABEL +#define ASM_WEAKEN_LABEL(FILE, NAME) ASM_OUTPUT_WEAK_ALIAS (FILE, NAME, 0) + +#define ASM_OUTPUT_WEAK_ALIAS(FILE, NAME, VALUE) \ + do { \ + fputs ("\t.weak\t", FILE); \ + assemble_name (FILE, NAME); \ + if (VALUE) \ + { \ + fputc (' ', FILE); \ + assemble_name (FILE, VALUE); \ + } \ + fputc ('\n', FILE); \ + } while (0) + +#define MAKE_DECL_ONE_ONLY(DECL) (DECL_WEAK (DECL) = 1) + +/* On elf, we *do* have support for the .init and .fini sections, and we + can put stuff in there to be executed before and after `main'. We let + crtstuff.c and other files know this by defining the following symbols. + The definitions say how to change sections to the .init and .fini + sections. This is the same for all known elf assemblers. */ +#undef INIT_SECTION_ASM_OP +#define INIT_SECTION_ASM_OP "\t.section\t.init" +#undef FINI_SECTION_ASM_OP +#define FINI_SECTION_ASM_OP "\t.section\t.fini" + +/* Don't set the target flags, this is done by the linker script */ +#undef LIB_SPEC +#define LIB_SPEC "" + +#undef STARTFILE_SPEC +#define STARTFILE_SPEC "crti%O%s crtbegin%O%s" + +#undef ENDFILE_SPEC +#define ENDFILE_SPEC "crtend%O%s crtn%O%s" + +/* We support #pragma. */ +#define HANDLE_SYSV_PRAGMA 1 |