mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
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.
250 lines
6.8 KiB
Plaintext
250 lines
6.8 KiB
Plaintext
@c Copyright 2012, 2013 Free Software Foundation, Inc.
|
|
@c This is part of the GAS manual.
|
|
@c For copying conditions, see the file as.texinfo.
|
|
@c man end
|
|
@ifset GENERIC
|
|
@page
|
|
@node NiosII-Dependent
|
|
@chapter Nios II Dependent Features
|
|
@end ifset
|
|
@ifclear GENERIC
|
|
@node Machine Dependencies
|
|
@chapter Nios II Dependent Features
|
|
@end ifclear
|
|
|
|
@cindex Altera Nios II support
|
|
@cindex Nios support
|
|
@cindex Nios II support
|
|
@menu
|
|
* Nios II Options:: Options
|
|
* Nios II Syntax:: Syntax
|
|
* Nios II Relocations:: Relocations
|
|
* Nios II Directives:: Nios II Machine Directives
|
|
* Nios II Opcodes:: Opcodes
|
|
@end menu
|
|
|
|
@node Nios II Options
|
|
@section Options
|
|
@cindex Nios II options
|
|
@cindex options for Nios II
|
|
|
|
@c man begin OPTIONS
|
|
@table @gcctabopt
|
|
|
|
@cindex @code{relax-section} command line option, Nios II
|
|
@item -relax-section
|
|
Replace identified out-of-range branches with PC-relative @code{jmp}
|
|
sequences when possible. The generated code sequences are suitable
|
|
for use in position-independent code, but there is a practical limit
|
|
on the extended branch range because of the length of the sequences.
|
|
This option is the default.
|
|
|
|
@cindex @code{relax-all} command line option, Nios II
|
|
@item -relax-all
|
|
Replace branch instructions not determinable to be in range
|
|
and all call instructions with @code{jmp} and @code{callr} sequences
|
|
(respectively). This option generates absolute relocations against the
|
|
target symbols and is not appropriate for position-independent code.
|
|
|
|
@cindex @code{no-relax} command line option, Nios II
|
|
@item -no-relax
|
|
Do not replace any branches or calls.
|
|
|
|
@cindex @code{EB} command line option, Nios II
|
|
@item -EB
|
|
Generate big-endian output.
|
|
|
|
@cindex @code{EL} command line option, Nios II
|
|
@item -EL
|
|
Generate little-endian output. This is the default.
|
|
|
|
@end table
|
|
@c man end
|
|
|
|
@node Nios II Syntax
|
|
@section Syntax
|
|
@menu
|
|
* Nios II Chars:: Special Characters
|
|
@end menu
|
|
|
|
|
|
@node Nios II Chars
|
|
@subsection Special Characters
|
|
|
|
@cindex line comment character, Nios II
|
|
@cindex Nios II line comment character
|
|
@cindex line separator character, Nios II
|
|
@cindex Nios II line separator character
|
|
@samp{#} is the line comment character.
|
|
@samp{;} is the line separator character.
|
|
|
|
|
|
@node Nios II Relocations
|
|
@section Nios II Machine Relocations
|
|
|
|
@cindex machine relocations, Nios II
|
|
@cindex Nios II machine relocations
|
|
|
|
@table @code
|
|
@cindex @code{hiadj} directive, Nios II
|
|
@item %hiadj(@var{expression})
|
|
Extract the upper 16 bits of @var{expression} and add
|
|
one if the 15th bit is set.
|
|
|
|
The value of @code{%hiadj(@var{expression})} is:
|
|
@smallexample
|
|
((@var{expression} >> 16) & 0xffff) + ((@var{expression} >> 15) & 0x01)
|
|
@end smallexample
|
|
|
|
The @code{%hiadj} relocation is intended to be used with
|
|
the @code{addi}, @code{ld} or @code{st} instructions
|
|
along with a @code{%lo}, in order to load a 32-bit constant.
|
|
|
|
@smallexample
|
|
movhi r2, %hiadj(symbol)
|
|
addi r2, r2, %lo(symbol)
|
|
@end smallexample
|
|
|
|
@cindex @code{hi} directive, Nios II
|
|
@item %hi(@var{expression})
|
|
Extract the upper 16 bits of @var{expression}.
|
|
|
|
@cindex @code{lo} directive, Nios II
|
|
@item %lo(@var{expression})
|
|
Extract the lower 16 bits of @var{expression}.
|
|
|
|
@cindex @code{gprel} directive, Nios II
|
|
@item %gprel(@var{expression})
|
|
Subtract the value of the symbol @code{_gp} from
|
|
@var{expression}.
|
|
|
|
The intention of the @code{%gprel} relocation is
|
|
to have a fast small area of memory which only
|
|
takes a 16-bit immediate to access.
|
|
|
|
@smallexample
|
|
.section .sdata
|
|
fastint:
|
|
.int 123
|
|
.section .text
|
|
ldw r4, %gprel(fastint)(gp)
|
|
@end smallexample
|
|
|
|
@cindex @code{call} directive, Nios II
|
|
@cindex @code{got} directive, Nios II
|
|
@cindex @code{gotoff} directive, Nios II
|
|
@cindex @code{gotoff_lo} directive, Nios II
|
|
@cindex @code{gotoff_hiadj} directive, Nios II
|
|
@cindex @code{tls_gd} directive, Nios II
|
|
@cindex @code{tls_ie} directive, Nios II
|
|
@cindex @code{tls_le} directive, Nios II
|
|
@cindex @code{tls_ldm} directive, Nios II
|
|
@cindex @code{tls_ldo} directive, Nios II
|
|
@item %call(@var{expression})
|
|
@itemx %got(@var{expression})
|
|
@itemx %gotoff(@var{expression})
|
|
@itemx %gotoff_lo(@var{expression})
|
|
@itemx %gotoff_hiadj(@var{expression})
|
|
@itemx %tls_gd(@var{expression})
|
|
@itemx %tls_ie(@var{expression})
|
|
@itemx %tls_le(@var{expression})
|
|
@itemx %tls_ldm(@var{expression})
|
|
@itemx %tls_ldo(@var{expression})
|
|
|
|
These relocations support the ABI for Linux Systems documented in the
|
|
@cite{Nios II Processor Reference Handbook}.
|
|
@end table
|
|
|
|
|
|
@node Nios II Directives
|
|
@section Nios II Machine Directives
|
|
|
|
@cindex machine directives, Nios II
|
|
@cindex Nios II machine directives
|
|
|
|
@table @code
|
|
|
|
@cindex @code{align} directive, Nios II
|
|
@item .align @var{expression} [, @var{expression}]
|
|
This is the generic @code{.align} directive, however
|
|
this aligns to a power of two.
|
|
|
|
@cindex @code{half} directive, Nios II
|
|
@item .half @var{expression}
|
|
Create an aligned constant 2 bytes in size.
|
|
|
|
@cindex @code{word} directive, Nios II
|
|
@item .word @var{expression}
|
|
Create an aligned constant 4 bytes in size.
|
|
|
|
@cindex @code{dword} directive, Nios II
|
|
@item .dword @var{expression}
|
|
Create an aligned constant 8 bytes in size.
|
|
|
|
@cindex @code{2byte} directive, Nios II
|
|
@item .2byte @var{expression}
|
|
Create an unaligned constant 2 bytes in size.
|
|
|
|
@cindex @code{4byte} directive, Nios II
|
|
@item .4byte @var{expression}
|
|
Create an unaligned constant 4 bytes in size.
|
|
|
|
@cindex @code{8byte} directive, Nios II
|
|
@item .8byte @var{expression}
|
|
Create an unaligned constant 8 bytes in size.
|
|
|
|
@cindex @code{16byte} directive, Nios II
|
|
@item .16byte @var{expression}
|
|
Create an unaligned constant 16 bytes in size.
|
|
|
|
@cindex @code{set noat} directive, Nios II
|
|
@item .set noat
|
|
Allows assembly code to use @code{at} register without
|
|
warning. Macro or relaxation expansions
|
|
generate warnings.
|
|
|
|
@cindex @code{set at} directive, Nios II
|
|
@item .set at
|
|
Assembly code using @code{at} register generates
|
|
warnings, and macro expansion and relaxation are
|
|
enabled.
|
|
|
|
@cindex @code{set nobreak} directive, Nios II
|
|
@item .set nobreak
|
|
Allows assembly code to use @code{ba} and @code{bt}
|
|
registers without warning.
|
|
|
|
@cindex @code{set break} directive, Nios II
|
|
@item .set break
|
|
Turns warnings back on for using @code{ba} and @code{bt}
|
|
registers.
|
|
|
|
@cindex @code{set norelax} directive, Nios II
|
|
@item .set norelax
|
|
Do not replace any branches or calls.
|
|
|
|
@cindex @code{set relaxsection} directive, Nios II
|
|
@item .set relaxsection
|
|
Replace identified out-of-range branches with
|
|
@code{jmp} sequences (default).
|
|
|
|
@cindex @code{set relaxall} directive, Nios II
|
|
@item .set relaxsection
|
|
Replace all branch and call instructions with
|
|
@code{jmp} and @code{callr} sequences.
|
|
|
|
@cindex @code{set} directive, Nios II
|
|
@item .set @dots{}
|
|
All other @code{.set} are the normal use.
|
|
|
|
@end table
|
|
|
|
@node Nios II Opcodes
|
|
@section Opcodes
|
|
|
|
@cindex Nios II opcodes
|
|
@cindex opcodes for Nios II
|
|
@code{@value{AS}} implements all the standard Nios II opcodes documented in the
|
|
@cite{Nios II Processor Reference Handbook}, including the assembler
|
|
pseudo-instructions.
|