36591ba149
Andrew Jenner <andrew@codesourcery.com> Based on patches from Altera Corporation. bfd/ * Makefile.am (ALL_MACHINES): Add cpu-nios2.lo. (ALL_MACHINES_CFILES): Add cpu-nios2.c. (BFD_BACKENDS): Add elf32-nios2.lo. (BFD32_BACKENDS_CFILES): Add elf32-nios2.c. * Makefile.in: Regenerated. * configure.in: Add entries for bfd_elf32_bignios2_vec and bfd_elf32_littlenios2_vec. * configure: Regenerated. * config.bfd: Add cases for nios2. * archures.c (enum bfd_architecture): Add bfd_arch_nios2. (bfd_mach_nios2): Define. (bfd_nios2_arch): Declare. (bfd_archures_list): Add bfd_nios2_arch. * targets.c (bfd_elf32_bignios2_vec): Declare. (bfd_elf32_littlenios2_vec): Declare. (_bfd_target_vector): Add entries for bfd_elf32_bignios2_vec and bfd_elf32_littlenios2_vec. * elf-bfd.h (enum elf_target_id): Add NIOS2_ELF_DATA. * reloc.c (enum bfd_reloc_code_real): Add Nios II relocations. * bfd-in2.h: Regenerated. * libbfd.h: Regenerated. * cpu-nios2.c: New file. * elf32-nios2.c: New file. opcodes/ * Makefile.am (TARGET_LIBOPCODES_CFILES): Add nios2-dis.c and nios2-opc.c. * Makefile.in: Regenerated. * configure.in: Add case for bfd_nios2_arch. * configure: Regenerated. * disassemble.c (ARCH_nios2): Define. (disassembler): Add case for bfd_arch_nios2. * nios2-dis.c: New file. * nios2-opc.c: New file. include/ * dis-asm.h (print_insn_big_nios2): Declare. (print_insn_little_nios2): Declare. include/elf * nios2.h: New file. include/opcode/ * nios2.h: New file. gas/ * Makefile.am (TARGET_CPU_CFILES): Add config/tc-nios2.c. (TARGET_CPU_HFILES): Add config/tc-nios2.h. * Makefile.in: Regenerated. * configure.tgt: Add case for nios2*-linux*. * config/obj-elf.c: Conditionally include elf/nios2.h. * config/tc-nios2.c: New file. * config/tc-nios2.h: New file. * doc/Makefile.am (CPU_DOCS): Add c-nios2.texi. * doc/Makefile.in: Regenerated. * doc/all.texi: Set NIOSII. * doc/as.texinfo (Overview): Add Nios II options. (Machine Dependencies): Include c-nios2.texi. * doc/c-nios2.texi: New file. * NEWS: Note Altera Nios II support. gas/testsuite/ * gas/nios2/add.d: New. * gas/nios2/add.s: New. * gas/nios2/align_fill.d: New. * gas/nios2/align_fill.s: New. * gas/nios2/align_text.d: New. * gas/nios2/align_text.s: New. * gas/nios2/and.d: New. * gas/nios2/and.s: New. * gas/nios2/branch.d: New. * gas/nios2/branch.s: New. * gas/nios2/break.d: New. * gas/nios2/break.s: New. * gas/nios2/bret.d: New. * gas/nios2/bret.s: New. * gas/nios2/cache.d: New. * gas/nios2/cache.s: New. * gas/nios2/call26.d: New. * gas/nios2/call26.s: New. * gas/nios2/call.d: New. * gas/nios2/call.s: New. * gas/nios2/cmp.d: New. * gas/nios2/cmp.s: New. * gas/nios2/comments.d: New. * gas/nios2/comments.s: New. * gas/nios2/complex.d: New. * gas/nios2/complex.s: New. * gas/nios2/ctl.d: New. * gas/nios2/ctl.s: New. * gas/nios2/custom.d: New. * gas/nios2/custom.s: New. * gas/nios2/etbt.d: New. * gas/nios2/etbt.s: New. * gas/nios2/flushda.d: New. * gas/nios2/flushda.s: New. * gas/nios2/illegal.l: New. * gas/nios2/illegal.s: New. * gas/nios2/jmp.d: New. * gas/nios2/jmp.s: New. * gas/nios2/ldb.d: New. * gas/nios2/ldb.s: New. * gas/nios2/ldh.d: New. * gas/nios2/ldh.s: New. * gas/nios2/ldw.d: New. * gas/nios2/ldw.s: New. * gas/nios2/lineseparator.d: New. * gas/nios2/lineseparator.s: New. * gas/nios2/mov.d: New. * gas/nios2/movia.d: New. * gas/nios2/movia.s: New. * gas/nios2/movi.d: New. * gas/nios2/movi.s: New. * gas/nios2/mov.s: New. * gas/nios2/mul.d: New. * gas/nios2/mul.s: New. * gas/nios2/nios2.exp: New. * gas/nios2/nor.d: New. * gas/nios2/nor.s: New. * gas/nios2/or.d: New. * gas/nios2/or.s: New. * gas/nios2/ret.d: New. * gas/nios2/ret.s: New. * gas/nios2/rol.d: New. * gas/nios2/rol.s: New. * gas/nios2/rotate.d: New. * gas/nios2/rotate.s: New. * gas/nios2/stb.d: New. * gas/nios2/stb.s: New. * gas/nios2/sth.d: New. * gas/nios2/sth.s: New. * gas/nios2/stw.d: New. * gas/nios2/stw.s: New. * gas/nios2/sub.d: New. * gas/nios2/sub.s: New. * gas/nios2/sync.d: New. * gas/nios2/sync.s: New. * gas/nios2/trap.d: New. * gas/nios2/trap.s: New. * gas/nios2/tret.d: New. * gas/nios2/tret.s: New. * gas/nios2/warn_noat.l: New. * gas/nios2/warn_noat.s: New. * gas/nios2/warn_nobreak.l: New. * gas/nios2/warn_nobreak.s: New. * gas/nios2/xor.d: New. * gas/nios2/xor.s: New. ld/ * Makefile.am (enios2elf.c): New rule. * Makefile.in: Regenerated. * configure.tgt: Add case for nios2*-*-*. * emulparams/nios2elf.sh: New file. * NEWS: Note Altera Nios II support. ld/testsuite/ * ld-nios2/emit-relocs-1a.s: New. * ld-nios2/emit-relocs-1b.s: New. * ld-nios2/emit-relocs-1.d: New. * ld-nios2/emit-relocs-1.ld: New. * ld-nios2/gprel.d: New. * ld-nios2/gprel.s: New. * ld-nios2/hilo16.d: New. * ld-nios2/hilo16.s: New. * ld-nios2/hilo16_symbol.s: New. * ld-nios2/imm5.d: New. * ld-nios2/imm5.s: New. * ld-nios2/imm5_symbol.s: New. * ld-nios2/nios2.exp: New. * ld-nios2/pcrel16.d: New. * ld-nios2/pcrel16_label.s: New. * ld-nios2/pcrel16.s: New. * ld-nios2/relax_callr.d: New. * ld-nios2/relax_callr.ld: New. * ld-nios2/relax_callr.s: New. * ld-nios2/relax_cjmp.d: New. * ld-nios2/relax_cjmp.s: New. * ld-nios2/relax_jmp.ld: New. * ld-nios2/relax_section.d: New. * ld-nios2/relax_section.s: New. * ld-nios2/relax_ujmp.d: New. * ld-nios2/relax_ujmp.s: New. * ld-nios2/reloc.d: New. * ld-nios2/reloc.s: New. * ld-nios2/reloc_symbol.s: New. * ld-nios2/s16.d: New. * ld-nios2/s16.s: New. * ld-nios2/s16_symbol.s: New. * ld-nios2/u16.d: New. * ld-nios2/u16.s: New. * ld-nios2/u16_symbol.s: New. * ld-elf/indirect.exp: Skip on targets that don't support -shared -fPIC. * ld-elfcomm/elfcomm.exp: Build with -G0 for nios2. * ld-plugin/lto.exp: Skip shared library tests on targets that don't support them. Skip execution tests on non-native targets. binutils/ * readelf.c: Include elf/nios2.h. (dump_relocations): Add case for EM_ALTERA_NIOS2. (get_nios2_dynamic_type): New. (get_dynamic_type): Add case for EM_ALTERA_NIOS2. (is_32bit_abs_reloc): Fix EM_ALTERA_NIOS2 case. (is_16bit_abs_reloc): Likewise. (is_none_reloc): Add EM_ALTERA_NIOS2 and EM_NIOS32 cases. * NEWS: Note Altera Nios II support. * MAINTAINERS: Add Nios II maintainers.
125 lines
4.8 KiB
C
125 lines
4.8 KiB
C
/* Definitions for Altera Nios II assembler.
|
|
Copyright (C) 2012, 2013 Free Software Foundation, Inc.
|
|
Contributed by Nigel Gray (ngray@altera.com).
|
|
Contributed by Mentor Graphics, 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 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_NIOS2
|
|
#define TC_NIOS2
|
|
|
|
/* If unspecified, default to little endian. We can explicitly specify
|
|
* a big-endian default by configuring with --target=nios2eb-elf. We
|
|
* can override the default with the -EB and -EL options. */
|
|
#ifndef TARGET_BYTES_BIG_ENDIAN
|
|
#define TARGET_BYTES_BIG_ENDIAN 0
|
|
#endif
|
|
|
|
/* Words are big enough to hold addresses. */
|
|
#define WORKING_DOT_WORD 1
|
|
|
|
#ifdef OBJ_ELF
|
|
extern const char *nios2_target_format (void);
|
|
#define TARGET_FORMAT nios2_target_format ()
|
|
#define TARGET_ARCH bfd_arch_nios2
|
|
#endif
|
|
|
|
/* A NIOS2 instruction consists of tokens and separator characters
|
|
the tokens are things like the instruction name (add, or jmp etc),
|
|
the register indices ($5, $7 etc), and constant expressions. The
|
|
separator characters are commas, brackets and space.
|
|
The instruction name is always separated from other tokens by a space
|
|
The maximum number of tokens in an instruction is 5 (the instruction name,
|
|
3 arguments, and a 4th string representing the expected instructin opcode
|
|
after assembly. The latter is only used when the assemble is running in
|
|
self test mode, otherwise its presence will generate an error. */
|
|
#define NIOS2_MAX_INSN_TOKENS 6
|
|
|
|
/* There are no machine-specific operands so we #define this to nothing. */
|
|
#define md_operand(x)
|
|
|
|
/* Function prototypes exported to rest of GAS. */
|
|
extern void md_assemble (char *op_str);
|
|
extern void md_end (void);
|
|
extern void md_begin (void);
|
|
|
|
#define TC_FORCE_RELOCATION(fixp) nios2_force_relocation (fixp)
|
|
extern int nios2_force_relocation (struct fix *);
|
|
|
|
#define tc_fix_adjustable(fixp) nios2_fix_adjustable (fixp)
|
|
extern int nios2_fix_adjustable (struct fix *);
|
|
|
|
#define tc_frob_label(lab) nios2_frob_label (lab)
|
|
extern void nios2_frob_label (symbolS *);
|
|
|
|
#define tc_frob_symbol(symp, punt) punt = nios2_frob_symbol (symp) ? 1 : punt
|
|
extern int nios2_frob_symbol (symbolS * symp);
|
|
|
|
#define md_cons_align(nbytes) nios2_cons_align (nbytes)
|
|
extern void nios2_cons_align (int);
|
|
|
|
extern void md_convert_frag (bfd * headers, segT sec, fragS * fragP);
|
|
|
|
/* When relaxing, we need to generate relocations for alignment
|
|
directives. */
|
|
#define HANDLE_ALIGN(frag) nios2_handle_align (frag)
|
|
extern void nios2_handle_align (fragS *);
|
|
|
|
#define md_relax_frag nios2_relax_frag
|
|
extern long nios2_relax_frag (segT segment, fragS * fragP, long stretch);
|
|
|
|
#ifdef OBJ_ELF
|
|
#define ELF_TC_SPECIAL_SECTIONS \
|
|
{ ".sdata", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL }, \
|
|
{ ".sbss", SHT_NOBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL }, \
|
|
{ ".lit4", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL }, \
|
|
{ ".lit8", SHT_PROGBITS, SHF_ALLOC + SHF_WRITE + SHF_NIOS2_GPREL },
|
|
|
|
/* Processor-specific section directives. */
|
|
#define md_elf_section_letter nios2_elf_section_letter
|
|
extern int nios2_elf_section_letter (int, char **);
|
|
#define md_elf_section_flags nios2_elf_section_flags
|
|
extern flagword nios2_elf_section_flags (flagword, int, int);
|
|
#endif
|
|
|
|
#define GLOBAL_OFFSET_TABLE_NAME "_GLOBAL_OFFSET_TABLE_"
|
|
|
|
#define DIFF_EXPR_OK
|
|
|
|
/* Nios2 ABI doesn't have 32-bit PCREL relocation, and, as relocations for
|
|
CFI information will be in section other than .text, we can't use PC-biased
|
|
relocs. */
|
|
#define CFI_DIFF_EXPR_OK 0
|
|
|
|
#define TC_PARSE_CONS_EXPRESSION(EXP, NBYTES) nios2_cons (EXP, NBYTES)
|
|
extern void nios2_cons (expressionS *exp, int size);
|
|
|
|
#define TC_CONS_FIX_NEW nios2_cons_fix_new
|
|
extern void nios2_cons_fix_new (struct frag *frag, int where,
|
|
unsigned int nbytes, struct expressionS *exp);
|
|
|
|
/* We want .cfi_* pseudo-ops for generating unwind info. */
|
|
#define TARGET_USE_CFIPOP 1
|
|
#define DWARF2_DEFAULT_RETURN_COLUMN 31
|
|
#define DWARF2_CIE_DATA_ALIGNMENT (-4)
|
|
#define tc_regname_to_dw2regnum nios2_regname_to_dw2regnum
|
|
extern int nios2_regname_to_dw2regnum (char *regname);
|
|
#define tc_cfi_frame_initial_instructions nios2_frame_initial_instructions
|
|
extern void nios2_frame_initial_instructions (void);
|
|
|
|
#endif /* TC_NIOS2 */
|