binutils-gdb/gas/config/tc-csky.h

108 lines
3.1 KiB
C
Raw Normal View History

Add support for the C_SKY series of processors. This patch series is a new binutils port for C-SKY processors, including support for both the V1 and V2 processor variants. V1 is derived from the MCore architecture while V2 is substantially different, with mixed 16- and 32-bit instructions, a larger register set, a different (but overlapping) ABI, etc. There is support for bare-metal ELF targets and Linux with both glibc and uClibc. This code is being contributed jointly by C-SKY Microsystems and Mentor Graphics. C-SKY is responsible for the technical content and has proposed Lifang Xia and Yunhai Shang as port maintainers. (Note that C-SKY does have a corporate copyright assignment on file with the FSF.) Mentor Graphics' role has been cleaning up the code, adding documentation and additional test cases, etc, to address issues we anticipated reviewers would complain about. bfd * Makefile.am (ALL_MACHINES, ALL_MACHINES_CFILES): Add C-SKY. (BFD32_BACKENDS, BFD_BACKENDS_CFILES): Likewise. * Makefile.in: Regenerated. * archures.c (enum bfd_architecture): Add bfd_arch_csky and related bfd_mach defines. (bfd_csky_arch): Declare. (bfd_archures_list): Add C-SKY. * bfd-in.h (elf32_csky_build_stubs): Declare. (elf32_csky_size_stubs): Declare. (elf32_csky_next_input_section: Declare. (elf32_csky_setup_section_lists): Declare. * bfd-in2.h: Regenerated. * config.bfd: Add C-SKY. * configure.ac: Likewise. * configure: Regenerated. * cpu-csky.c: New file. * elf-bfd.h (enum elf_target_id): Add C-SKY. * elf32-csky.c: New file. * libbfd.h: Regenerated. * reloc.c: Add C-SKY relocations. * targets.c (csky_elf32_be_vec, csky_elf32_le_vec): Declare. (_bfd_target_vector): Add C-SKY target vector entries. binutils* readelf.c: Include elf/csky.h. (guess_is_rela): Handle EM_CSKY. (dump_relocations): Likewise. (get_machine_name): Likewise. (is_32bit_abs_reloc): Likewise. include * dis-asm.h (csky_symbol_is_valid): Declare. * opcode/csky.h: New file. opcodes * Makefile.am (TARGET_LIBOPCODES_CFILES): Add csky-dis.c. * Makefile.in: Regenerated. * configure.ac: Add C-SKY. * configure: Regenerated. * csky-dis.c: New file. * csky-opc.h: New file. * disassemble.c (ARCH_csky): Define. (disassembler, disassemble_init_for_target): Add case for ARCH_csky. * disassemble.h (print_insn_csky, csky_get_disassembler): Declare. gas * Makefile.am (TARGET_CPU_CFILES): Add entry for C-SKY. (TARGET_CPU_HFILES, TARGET_ENV_HFILES): Likewise. * Makefile.in: Regenerated. * config/tc-csky.c: New file. * config/tc-csky.h: New file. * config/te-csky_abiv1.h: New file. * config/te-csky_abiv1_linux.h: New file. * config/te-csky_abiv2.h: New file. * config/te-csky_abiv2_linux.h: New file. * configure.tgt: Add C-SKY. * doc/Makefile.am (CPU_DOCS): Add entry for C-SKY. * doc/Makefile.in: Regenerated. * doc/all.texi: Set CSKY feature. * doc/as.texi (Overview): Add C-SKY options. (Machine Dependencies): Likewise. * doc/c-csky.texi: New file. * testsuite/gas/csky/*: New test cases. ld * Makefile.am (ALL_EMULATION_SOURCES): Add C-SKY emulations. (ecskyelf.c, ecskyelf_linux.c): New rules. * Makefile.in: Regenerated. * configure.tgt: Add C-SKY. * emulparams/cskyelf.sh: New file. * emulparams/cskyelf_linux.sh: New file. * emultempl/cskyelf.em: New file. * gen-doc.texi: Add C-SKY. * ld.texi: Likewise. (Options specific to C-SKY targets): New section. * testsuite/ld-csky/*: New tests.
2018-07-30 19:24:14 +08:00
/* tc-csky.h -- Header file for tc-csky.c
Copyright (C) 1989-2018 Free Software Foundation, Inc.
Contributed by C-SKY Microsystems and Mentor Graphics.
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 3, 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, 51 Franklin Street - Fifth Floor, Boston, MA
02110-1301, USA. */
#ifndef TC_CSKY
#define TC_CSKY 1
#define WORKING_DOT_WORD
#define TARGET_ARCH bfd_arch_csky
#define LISTING_HEADER "CSKY GAS"
#ifdef OBJ_ELF
#define TARGET_FORMAT elf32_csky_target_format ()
#endif
#define TARGET_BYTES_BIG_ENDIAN 0
#define MD_PCREL_FROM_SECTION(F,S) md_pcrel_from_section (F, S)
#define TC_GENERIC_RELAX_TABLE csky_relax_table
#define md_end md_csky_end
#define md_relax_frag csky_relax_frag
#define DOUBLESLASH_LINE_COMMENTS
#define LOCAL_LABELS_FB 1
#define PAD_LITERAL_LENGTH 6
#define PAD_FILL_CONTENT 0x1c00
/* Reloc API. */
#define EXTERN_FORCE_RELOC 1
#define TC_CONS_FIX_NEW csky_cons_fix_new
#define TC_FORCE_RELOCATION(fix) csky_force_relocation (fix)
#define tc_fix_adjustable(FIX) csky_fix_adjustable (FIX)
#define TC_SEGMENT_INFO_TYPE csky_segment_info_type
/* Dwarf API. */
#define DWARF2_LINE_MIN_INSN_LENGTH 2
#define DWARF2_ADDR_SIZE(bfd) 4
#define DWARF2_FDE_RELOC_SIZE 4
#define TARGET_USE_CFIPOP 1
#define tc_cfi_frame_initial_instructions csky_cfi_frame_initial_instructions
#define tc_regname_to_dw2regnum tc_csky_regname_to_dw2regnum
#define DWARF2_DEFAULT_RETURN_COLUMN 15
#define DWARF2_CIE_DATA_ALIGNMENT (-4)
typedef enum
{
MAP_UNDEFINED = 0,
MAP_DATA,
MAP_TEXT,
} map_state;
typedef struct
{
map_state current_state;
} csky_segment_info_type;
struct tls_addend
{
fragS *frag;
offsetT offset;
};
#define TC_FIX_TYPE struct tls_addend
#define TC_INIT_FIX_DATA(FIX) \
{ (FIX)->tc_fix_data.frag = NULL; (FIX)->tc_fix_data.offset = 0; }
#include "write.h"
extern const relax_typeS csky_relax_table [];
extern void md_csky_end (void);
extern long md_pcrel_from_section (fixS *, segT);
extern void csky_cons_fix_new (fragS *,
unsigned int off,
unsigned int len,
expressionS *,
bfd_reloc_code_real_type);
extern int csky_force_relocation (fixS *);
extern bfd_boolean csky_fix_adjustable (fixS *);
extern void csky_cfi_frame_initial_instructions (void);
extern int tc_csky_regname_to_dw2regnum (char *);
extern long csky_relax_frag (segT, fragS *, long);
#ifdef OBJ_ELF
const char * elf32_csky_target_format (void);
#endif
#endif