diff options
Diffstat (limited to 'gas/config/tc-mcore.h')
-rw-r--r-- | gas/config/tc-mcore.h | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/gas/config/tc-mcore.h b/gas/config/tc-mcore.h new file mode 100644 index 0000000..9e487c9 --- /dev/null +++ b/gas/config/tc-mcore.h @@ -0,0 +1,119 @@ +/* This file is tc-mcore.h + + Copyright (C) 1999 Free Software Foundation, Inc. + + This file is part of GAS, the GNU Assembler. + + GAS 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. + + GAS 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 GAS; see the file COPYING. If not, write to + the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ + +#ifndef TC_MCORE +#define TC_MCORE 1 + +#ifndef BFD_ASSEMBLER + #error MCORE support requires BFD_ASSEMBLER +#endif + +#define TARGET_ARCH bfd_arch_mcore +#define TARGET_BYTES_BIG_ENDIAN 1 + +/* Don't write out relocs for pcrel stuff. */ +#define TC_COUNT_RELOC(x) (((x)->fx_addsy || (x)->fx_subsy) && \ + (x)->fx_r_type < BFD_RELOC_MCORE_PCREL_IMM8BY4) + +#define IGNORE_NONSTANDARD_ESCAPES + +#define TC_RELOC_MANGLE(a,b,c) tc_reloc_mangle (a, b, c) + +/* Some pseudo-op semantic extensions. */ +#define PSEUDO_LCOMM_OPTIONAL_ALIGN + +#define LISTING_HEADER "M.CORE GAS Version 2.9.4" +#define LISTING_LHS_CONT_LINES 4 + +#define NEED_FX_R_TYPE 1 +#define COFF_FLAGS 1 + +/* We want local label support. */ +#define LOCAL_LABELS_FB 1 + +#define TC_COFF_SIZEMACHDEP(frag) tc_coff_sizemachdep (frag) + +extern const struct relax_type md_relax_table[]; +#define TC_GENERIC_RELAX_TABLE md_relax_table +#define md_end md_mcore_end + +/* Want the section information too... */ +#define MD_PCREL_FROM_SECTION(FIXP, SEC) md_pcrel_from_section (FIXP, SEC) + +#define MD_APPLY_FIX3 /* We want the segment as well. */ + + + +#ifdef OBJ_COFF + +#define TARGET_FORMAT (target_big_endian ? "pe-mcore-big" : "pe-mcore-little") + +#define TARGET_SYMBOL_FIELDS int sy_flags ; + +#endif /* OBJ_COFF */ + + +#ifdef OBJ_ELF + +#define TARGET_FORMAT (target_big_endian ? "elf32-mcore-big" : "elf32-mcore-little") + +#define ELF_TC_SPECIAL_SECTIONS \ + { ".ctors", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, \ + { ".dtors", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE }, \ +/* Other special sections not generated by the assembler: .reginfo, + .liblist, .conflict, .gptab, .got, .dynamic, .rel.dyn. */ + +/* When relaxing, we need to emit various relocs we otherwise wouldn't. */ +#define TC_FORCE_RELOCATION(fix) mcore_force_relocation (fix) +extern int mcore_force_relocation PARAMS ((struct fix *)); + +#define obj_fix_adjustable(fixP) mcore_fix_adjustable (fixP) +extern boolean mcore_fix_adjustable PARAMS ((struct fix *)); + +#endif /* OBJ_ELF */ + +#ifndef TARGET_FORMAT +# error No target format specified. +#endif + +#include "struc-symbol.h" /* For definition of symbolS */ +#include "write.h" /* For definition of fixS */ + +extern void md_begin PARAMS ((void)); +extern void md_assemble PARAMS ((char *)); +extern symbolS * md_undefined_symbol PARAMS ((char *)); +extern void md_mcore_end PARAMS ((void)); +extern char * md_atof PARAMS ((int, char *, int *)); +extern int md_parse_option PARAMS ((int, char *)); +extern void md_show_usage PARAMS ((FILE *)); +extern void md_create_short_jump + PARAMS ((char *, addressT, addressT, fragS *, symbolS *)); +extern void md_create_long_jump + PARAMS ((char *, addressT, addressT, fragS *, symbolS *)); +extern void md_convert_frag PARAMS ((bfd *, segT, fragS *)); +extern int md_apply_fix3 PARAMS ((fixS *, valueT *, segT)); +extern void md_operand PARAMS ((expressionS *)); +extern int md_estimate_size_before_relax PARAMS ((fragS *, segT)); +extern void md_number_to_chars PARAMS ((char *, valueT, int)); +extern valueT md_section_align PARAMS ((segT, valueT)); +extern long md_pcrel_from_section PARAMS ((fixS *, segT)); +extern arelent * tc_gen_reloc PARAMS ((asection *, fixS *)); + +#endif /* TC_MCORE */ |