diff options
author | Sandra Loosemore <sandra@codesourcery.com> | 2013-02-06 23:22:26 +0000 |
---|---|---|
committer | Sandra Loosemore <sandra@codesourcery.com> | 2013-02-06 23:22:26 +0000 |
commit | 36591ba149edf6c6608d931a6d53bb99849fdc99 (patch) | |
tree | 9ca2405118dd7414b90a8fffb09eb1d5023dfd96 /ld | |
parent | 574b0b3165dfa8ce1bdc2a41ae73148b6d8ea6be (diff) | |
download | fsf-binutils-gdb-36591ba149edf6c6608d931a6d53bb99849fdc99.zip fsf-binutils-gdb-36591ba149edf6c6608d931a6d53bb99849fdc99.tar.gz fsf-binutils-gdb-36591ba149edf6c6608d931a6d53bb99849fdc99.tar.bz2 |
2013-02-06 Sandra Loosemore <sandra@codesourcery.com>
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.
Diffstat (limited to 'ld')
45 files changed, 713 insertions, 1 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index ec0c220..cf809f1 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,14 @@ +2013-02-06 Sandra Loosemore <sandra@codesourcery.com> + Andrew Jenner <andrew@codesourcery.com> + + Based on patches from Altera Corporation. + + * 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. + 2013-02-06 Senthil Kumar Selvaraj <senthil_kumar.selvaraj@atmel.com> * emultempl/avrelf.em (avr_elf_before_parse): New function. diff --git a/ld/Makefile.am b/ld/Makefile.am index 837a878..20b15b4 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -1770,6 +1770,9 @@ emsp430xW427.c: $(srcdir)/emulparams/msp430all.sh \ enews.c: $(srcdir)/emulparams/news.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} ${GENSCRIPTS} news "$(tdir_news)" +enios2elf.c: $(srcdir)/emulparams/nios2elf.sh \ + $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} nios2elf "$(tdir_nios2)" ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/netbsd.em \ $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} diff --git a/ld/Makefile.in b/ld/Makefile.in index 3fd08fc..c09399a 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -3255,6 +3255,9 @@ emsp430xW427.c: $(srcdir)/emulparams/msp430all.sh \ enews.c: $(srcdir)/emulparams/news.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} ${GENSCRIPTS} news "$(tdir_news)" +enios2elf.c: $(srcdir)/emulparams/nios2elf.sh \ + $(ELF_DEPS) $(srcdir)/scripttempl/elf.sc ${GEN_DEPENDS} + ${GENSCRIPTS} nios2elf "$(tdir_nios2)" ens32knbsd.c: $(srcdir)/emulparams/ns32knbsd.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/emultempl/netbsd.em \ $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} @@ -1,5 +1,7 @@ -*- text -*- +* Add support for Altera Nios II. + * Add support for the V850E3V5 architecture. * Add support for the Imagination Technologies Meta processor. diff --git a/ld/configure.tgt b/ld/configure.tgt index f4d1c31..b015dde 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -515,6 +515,7 @@ mt-*elf) targ_emul=elf32mt msp430-*-*) targ_emul=msp430x110 targ_extra_emuls="msp430x112 msp430x1101 msp430x1111 msp430x1121 msp430x1122 msp430x1132 msp430x122 msp430x123 msp430x1222 msp430x1232 msp430x133 msp430x135 msp430x1331 msp430x1351 msp430x147 msp430x148 msp430x149 msp430x155 msp430x156 msp430x157 msp430x167 msp430x168 msp430x169 msp430x1610 msp430x1611 msp430x1612 msp430x2101 msp430x2111 msp430x2121 msp430x2131 msp430x311 msp430x312 msp430x313 msp430x314 msp430x315 msp430x323 msp430x325 msp430x336 msp430x337 msp430x412 msp430x413 msp430x415 msp430x417 msp430xE423 msp430xE425 msp430xE427 msp430xW423 msp430xW425 msp430xW427 msp430xG437 msp430xG438 msp430xG439 msp430x435 msp430x436 msp430x437 msp430x447 msp430x448 msp430x449" ;; +nios2*-*-*) targ_emul=nios2elf ;; ns32k-pc532-mach* | ns32k-pc532-ux*) targ_emul=pc532macha ;; ns32k-*-netbsd* | ns32k-pc532-lites*) targ_emul=ns32knbsd ;; diff --git a/ld/emulparams/nios2elf.sh b/ld/emulparams/nios2elf.sh new file mode 100644 index 0000000..767f3de --- /dev/null +++ b/ld/emulparams/nios2elf.sh @@ -0,0 +1,20 @@ +SCRIPT_NAME=elf +TEMPLATE_NAME=elf32 +EXTRA_EM_FILE= +OUTPUT_FORMAT="elf32-littlenios2" +LITTLE_OUTPUT_FORMAT="elf32-littlenios2" +BIG_OUTPUT_FORMAT="elf32-bignios2" +TEXT_START_ADDR=0x1000 +OTHER_GOT_SYMBOLS=' + _gp = ALIGN(16) + 0x7ff0; + PROVIDE(gp = _gp); +' +ARCH=nios2 +MACHINE= +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" +ENTRY=_start +NOP=0x0001883a + +GENERATE_SHLIB_SCRIPT=yes +GENERATE_PIE_SCRIPT=yes diff --git a/ld/testsuite/ChangeLog b/ld/testsuite/ChangeLog index e172a1b..11535a6 100644 --- a/ld/testsuite/ChangeLog +++ b/ld/testsuite/ChangeLog @@ -1,3 +1,49 @@ +2013-02-06 Sandra Loosemore <sandra@codesourcery.com> + Andrew Jenner <andrew@codesourcery.com> + + Based on patches from Altera Corporation. + + * 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. + 2013-02-06 H.J. Lu <hongjiu.lu@intel.com> * ld-elf/now-1.d: New file. diff --git a/ld/testsuite/ld-elf/indirect.exp b/ld/testsuite/ld-elf/indirect.exp index 07df2cc..d5d3abc 100644 --- a/ld/testsuite/ld-elf/indirect.exp +++ b/ld/testsuite/ld-elf/indirect.exp @@ -37,6 +37,11 @@ if { [which $CC] == 0 } { return } +# Some bare-metal targets don't support shared libs or PIC. +if { ![run_host_cmd_yesno $CC "-shared -fPIC $srcdir/$subdir/dummy.c -o tmpdir/t.so"] } { + return +} + proc check_link_message { cmd string testname } { send_log "$cmd\n" verbose "$cmd" diff --git a/ld/testsuite/ld-elfcomm/elfcomm.exp b/ld/testsuite/ld-elfcomm/elfcomm.exp index 572931b..c5c7539 100644 --- a/ld/testsuite/ld-elfcomm/elfcomm.exp +++ b/ld/testsuite/ld-elfcomm/elfcomm.exp @@ -181,6 +181,10 @@ proc assembler_generates_commons {} { return 1 } +if [istarget nios2*-*-*] { + set CFLAGS "$CFLAGS -G0" +} + # Explicitly use "-fcommon" so that even if $CFLAGS includes # "-fno-common", these tests are compiled as expected. if { ![ld_compile "$CC $CFLAGS -fcommon" $srcdir/$subdir/common1a.c tmpdir/common1a.o] diff --git a/ld/testsuite/ld-nios2/emit-relocs-1.d b/ld/testsuite/ld-nios2/emit-relocs-1.d new file mode 100644 index 0000000..aba0a53 --- /dev/null +++ b/ld/testsuite/ld-nios2/emit-relocs-1.d @@ -0,0 +1,37 @@ +#name: Emit relocs 1 +#source: emit-relocs-1a.s +#source: emit-relocs-1b.s +#ld: -q -T emit-relocs-1.ld +#objdump: -sr + +.*: file format .* + +RELOCATION RECORDS FOR \[\.data\]: +OFFSET TYPE VALUE * +00000000 R_NIOS2_BFD_RELOC32 \.data +00000004 R_NIOS2_BFD_RELOC32 \.data\+0x00001000 +00000008 R_NIOS2_BFD_RELOC32 \.merge1\+0x00000002 +0000000c R_NIOS2_BFD_RELOC32 \.merge2 +00000010 R_NIOS2_BFD_RELOC32 \.merge3 +00000014 R_NIOS2_BFD_RELOC32 \.merge3\+0x00000004 +00000020 R_NIOS2_BFD_RELOC32 \.data\+0x00000020 +00000024 R_NIOS2_BFD_RELOC32 \.data\+0x00001020 +00000028 R_NIOS2_BFD_RELOC32 \.merge1 +0000002c R_NIOS2_BFD_RELOC32 \.merge2\+0x00000002 +00000030 R_NIOS2_BFD_RELOC32 \.merge3\+0x00000008 +00000034 R_NIOS2_BFD_RELOC32 \.merge3\+0x00000004 + + +Contents of section \.text: + 80000 3a880100 00000000 00000000 00000000 .* +Contents of section \.merge1: + 80400 666c7574 74657200 flutter.* +Contents of section \.merge2: + 80800 74617374 696e6700 tasting.* +Contents of section \.merge3: + 80c00 00010000 00020000 00030000 .* +Contents of section \.data: + 81000 00100800 00200800 02040800 00080800 .* + 81010 000c0800 040c0800 00000000 00000000 .* + 81020 20100800 20200800 00040800 02080800 .* + 81030 080c0800 040c0800 .* diff --git a/ld/testsuite/ld-nios2/emit-relocs-1.ld b/ld/testsuite/ld-nios2/emit-relocs-1.ld new file mode 100644 index 0000000..1879ef4 --- /dev/null +++ b/ld/testsuite/ld-nios2/emit-relocs-1.ld @@ -0,0 +1,20 @@ +ENTRY(_start) +SECTIONS +{ + . = 0x80000; + .text : { *(.text) } + + . = ALIGN (0x400); + .merge1 : { *(.merge1) } + + . = ALIGN (0x400); + .merge2 : { *(.merge2) } + + . = ALIGN (0x400); + .merge3 : { *(.merge3) } + + . = ALIGN (0x400); + .data : { *(.data) } + + /DISCARD/ : { *(*) } +} diff --git a/ld/testsuite/ld-nios2/emit-relocs-1a.s b/ld/testsuite/ld-nios2/emit-relocs-1a.s new file mode 100644 index 0000000..bf0a8a1 --- /dev/null +++ b/ld/testsuite/ld-nios2/emit-relocs-1a.s @@ -0,0 +1,24 @@ + .text + .align 4 + .globl _start +_start: + nop + + .section .merge1,"aMS",@progbits,1 +A: .string "utter" + + .section .merge2,"aMS",@progbits,1 +B: .string "tasting" + + .section .merge3,"aM",@progbits,4 +C: .4byte 0x100 +D: .4byte 0x200 + + .data + .align 4 +E: .4byte E + .4byte E + 0x1000 + .4byte A + .4byte B + .4byte C + .4byte D diff --git a/ld/testsuite/ld-nios2/emit-relocs-1b.s b/ld/testsuite/ld-nios2/emit-relocs-1b.s new file mode 100644 index 0000000..82229c1 --- /dev/null +++ b/ld/testsuite/ld-nios2/emit-relocs-1b.s @@ -0,0 +1,18 @@ + .section .merge1,"aMS",@progbits,1 +A: .string "flutter" + + .section .merge2,"aMS",@progbits,1 +B: .string "sting" + + .section .merge3,"aM",@progbits,4 +C: .4byte 0x300 +D: .4byte 0x200 + + .data + .align 4 +E: .4byte E + .4byte E + 0x1000 + .4byte A + .4byte B + .4byte C + .4byte D diff --git a/ld/testsuite/ld-nios2/gprel.d b/ld/testsuite/ld-nios2/gprel.d new file mode 100644 index 0000000..202aece --- /dev/null +++ b/ld/testsuite/ld-nios2/gprel.d @@ -0,0 +1,17 @@ +#name: NIOS2 gp-relative relocations +#source: gprel.s +#ld: +#objdump: -dr --prefix-addresses + +# Test the %gprel macro. + +.*: +file format elf32-littlenios2 + +Disassembly of section .text: +[0-9a-f]+ <[^>]*> movui gp,[0-9]+ +[0-9a-f]+ <[^>]*> ldw at,-[0-9]+\(gp\) +[0-9a-f]+ <[^>]*> ldw r2,-[0-9]+\(gp\) +[0-9a-f]+ <[^>]*> ldb r3,-[0-9]+\(gp\) +[0-9a-f]+ <[^>]*> ldw at,-[0-9]+\(gp\) +[0-9a-f]+ <[^>]*> ldw r2,-[0-9]+\(gp\) +[0-9a-f]+ <[^>]*> ldb r3,-[0-9]+\(gp\) diff --git a/ld/testsuite/ld-nios2/gprel.s b/ld/testsuite/ld-nios2/gprel.s new file mode 100644 index 0000000..2414722 --- /dev/null +++ b/ld/testsuite/ld-nios2/gprel.s @@ -0,0 +1,29 @@ +.set noat + +.sdata + +sym1: +.long 0xdead +sym2: +.long 0xbeef +sym3: +.byte 0x7f + +.section .sbss, "w" +sym4: +.long 0 +sym5: +.long 0 +sym6: +.byte 0 + +.text +.global _start +_start: + movui gp, _gp + ldw r1, %gprel(sym1)(gp) + ldw r2, %gprel(sym2)(gp) + ldb r3, %gprel(sym3)(gp) + ldw r1, %gprel(sym4)(gp) + ldw r2, %gprel(sym5)(gp) + ldb r3, %gprel(sym6)(gp) diff --git a/ld/testsuite/ld-nios2/hilo16.d b/ld/testsuite/ld-nios2/hilo16.d new file mode 100644 index 0000000..c703413 --- /dev/null +++ b/ld/testsuite/ld-nios2/hilo16.d @@ -0,0 +1,13 @@ +#name: NIOS2 R_NIOS2_HI16,LO16,HIADJ16 +#source: hilo16.s +#source: hilo16_symbol.s +#ld: +#objdump: -dr --prefix-addresses + +# Test the %hi, %lo and %hiadi relocations +.*: +file format elf32-littlenios2 + +Disassembly of section .text: +[0-9a-f]+ <[^>]*> addi at,at,-8531 +[0-9a-f]+ <[^>]*> addi at,at,-16657 +[0-9a-f]+ <[^>]*> addi at,at,-8530 diff --git a/ld/testsuite/ld-nios2/hilo16.s b/ld/testsuite/ld-nios2/hilo16.s new file mode 100644 index 0000000..47b404f1 --- /dev/null +++ b/ld/testsuite/ld-nios2/hilo16.s @@ -0,0 +1,10 @@ +# Test the %hi, lo and %hiadj relocations + +.set noat + +.text +.global _start +_start: + addi r1, r1, %hi(long_symbol) + addi r1, r1, %lo(long_symbol) + addi r1, r1, %hiadj(long_symbol) diff --git a/ld/testsuite/ld-nios2/hilo16_symbol.s b/ld/testsuite/ld-nios2/hilo16_symbol.s new file mode 100644 index 0000000..88fdddc --- /dev/null +++ b/ld/testsuite/ld-nios2/hilo16_symbol.s @@ -0,0 +1,3 @@ +.global long_symbol +.set long_symbol, 0xDEADBEEF + diff --git a/ld/testsuite/ld-nios2/imm5.d b/ld/testsuite/ld-nios2/imm5.d new file mode 100644 index 0000000..2640c9c --- /dev/null +++ b/ld/testsuite/ld-nios2/imm5.d @@ -0,0 +1,13 @@ +#name: NIOS2 R_NIOS2_IMM5 +#source: imm5.s +#source: imm5_symbol.s +#ld: +#objdump: -dr --prefix-addresses + +# Test the branch instructions. +.*: +file format elf32-littlenios2 + +Disassembly of section .text: +[0-9a-f]+ <[^>]*> roli at,at,31 +[0-9a-f]+ <.[^>]*> Address 0x[0-9a-f]+ is out of bounds. + diff --git a/ld/testsuite/ld-nios2/imm5.s b/ld/testsuite/ld-nios2/imm5.s new file mode 100644 index 0000000..21bbfc3 --- /dev/null +++ b/ld/testsuite/ld-nios2/imm5.s @@ -0,0 +1,9 @@ +# Test the imm5 relocation + +.set noat +.text +.global _start +_start: + roli r1, r1, imm5 + + diff --git a/ld/testsuite/ld-nios2/imm5_symbol.s b/ld/testsuite/ld-nios2/imm5_symbol.s new file mode 100644 index 0000000..d988951 --- /dev/null +++ b/ld/testsuite/ld-nios2/imm5_symbol.s @@ -0,0 +1,4 @@ +.global imm5 +.text +.byte imm5 +.set imm5, 31 diff --git a/ld/testsuite/ld-nios2/nios2.exp b/ld/testsuite/ld-nios2/nios2.exp new file mode 100644 index 0000000..22080b4 --- /dev/null +++ b/ld/testsuite/ld-nios2/nios2.exp @@ -0,0 +1,7 @@ +if { ! [istarget nios2-*-*] } { + return +} + +foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] { + run_dump_test [file rootname $test] +} diff --git a/ld/testsuite/ld-nios2/pcrel16.d b/ld/testsuite/ld-nios2/pcrel16.d new file mode 100644 index 0000000..d4dda2e --- /dev/null +++ b/ld/testsuite/ld-nios2/pcrel16.d @@ -0,0 +1,15 @@ +#name: NIOS2 R_NIOS2_PCREL16 +#source: pcrel16.s +#source: pcrel16_label.s +#ld: +#objdump: -dr --prefix-addresses + +# Test the relative branch relocations. +.*: +file format elf32-littlenios2 + +Disassembly of section .text: + +[0-9a-f]+ <[^>]*> br [0-9a-f]+ <ext_label> +[0-9a-f]+ <[^>]*> br [0-9a-f]+ <ext_label\+0x10> +[0-9a-f]+ <[^>]*> nop +[0-9a-f]+ <[^>]*> nop diff --git a/ld/testsuite/ld-nios2/pcrel16.s b/ld/testsuite/ld-nios2/pcrel16.s new file mode 100644 index 0000000..61c1c7e --- /dev/null +++ b/ld/testsuite/ld-nios2/pcrel16.s @@ -0,0 +1,8 @@ +# Test for pc-relative relocations +.set norelax +.text +.global _start +_start: + br ext_label + br ext_label + 16 + diff --git a/ld/testsuite/ld-nios2/pcrel16_label.s b/ld/testsuite/ld-nios2/pcrel16_label.s new file mode 100644 index 0000000..3a76612 --- /dev/null +++ b/ld/testsuite/ld-nios2/pcrel16_label.s @@ -0,0 +1,5 @@ +.text +ext_label: + nop + nop +.global ext_label diff --git a/ld/testsuite/ld-nios2/relax_callr.d b/ld/testsuite/ld-nios2/relax_callr.d new file mode 100644 index 0000000..7d40fe4 --- /dev/null +++ b/ld/testsuite/ld-nios2/relax_callr.d @@ -0,0 +1,24 @@ +#name: NIOS2 relax_callr +#as: -relax-all +#ld: --relax -Trelax_callr.ld +#source: relax_callr.s +#objdump: -dr --prefix-addresses +# Test relaxation of callr + +.*: +file format elf32-littlenios2 + +Disassembly of section text1: +00000000 <[^>]*> movhi at,2048 +00000004 <[^>]*> ori at,at,0 +00000008 <[^>]*> callr at +0000000c <[^>]*> movhi at,2048 +00000010 <[^>]*> ori at,at,20 +00000014 <[^>]*> callr at + +Disassembly of section text2: +08000000 <func> nop +08000004 <[^>]*> br 08000014 <func1> +08000008 <[^>]*> nop +0800000c <[^>]*> nop +08000010 <[^>]*> nop +08000014 <func1> nop diff --git a/ld/testsuite/ld-nios2/relax_callr.ld b/ld/testsuite/ld-nios2/relax_callr.ld new file mode 100644 index 0000000..bc02d40 --- /dev/null +++ b/ld/testsuite/ld-nios2/relax_callr.ld @@ -0,0 +1,11 @@ +/* Simple script for testing relaxation */ + +OUTPUT_FORMAT("elf32-littlenios2", "elf32-littlenios2", "elf32-littlenios2") +OUTPUT_ARCH(nios2) +ENTRY(_start) +SECTIONS +{ + _start = .; + text1 0 : { *(text1) } + text2 0x08000000 : { *(text2) } +} diff --git a/ld/testsuite/ld-nios2/relax_callr.s b/ld/testsuite/ld-nios2/relax_callr.s new file mode 100644 index 0000000..b4cc2c4 --- /dev/null +++ b/ld/testsuite/ld-nios2/relax_callr.s @@ -0,0 +1,17 @@ +# relaxation test for callr + +.globl text1 +.section text1, "ax", @progbits + + call func + call func1 + +.section text2, "ax", @progbits +func: + nop + br func1 + nop + nop + nop +func1: + nop diff --git a/ld/testsuite/ld-nios2/relax_cjmp.d b/ld/testsuite/ld-nios2/relax_cjmp.d new file mode 100644 index 0000000..535c59d --- /dev/null +++ b/ld/testsuite/ld-nios2/relax_cjmp.d @@ -0,0 +1,38 @@ +#name: NIOS2 relax_cjmp +#as: -relax-all +#ld: --relax -Trelax_jmp.ld +#source: relax_cjmp.s +#objdump: -dr --prefix-addresses + +# Test relaxation of conditional jumps + +.*: +file format elf32-littlenios2 + +Disassembly of section text2: +00000000 <[^>]*> bge r2,r3,00008000 <[^>]*> +00000004 <[^>]*> bge r2,r3,00000014 <[^>]*> +00000008 <[^>]*> movhi at,1 +0000000c <[^>]*> ori at,at,24 +00000010 <[^>]*> jmp at +00000014 <[^>]*> bge r3,r2,00000020 <sym> +00000018 <[^>]*> nop +0000001c <[^>]*> nop +00000020 <sym> nop + +Disassembly of section text1: +00008000 <[^>]*> beq r2,r3,00010000 <on_border> +00008004 <[^>]*> bne r2,r3,00008014 <[^>]*> +00008008 <[^>]*> movhi at,1 +0000800c <[^>]*> ori at,at,24 +00008010 <[^>]*> jmp at +00008014 <[^>]*> nop +00008018 <[^>]*> nop +#... +00010000 <on_border> bne r2,r3,00010018 <in_range> +00010004 <[^>]*> nop +00010008 <[^>]*> nop +0001000c <[^>]*> nop +00010010 <[^>]*> nop +00010014 <[^>]*> nop +00010018 <in_range> nop +#pass diff --git a/ld/testsuite/ld-nios2/relax_cjmp.s b/ld/testsuite/ld-nios2/relax_cjmp.s new file mode 100644 index 0000000..af00a1e --- /dev/null +++ b/ld/testsuite/ld-nios2/relax_cjmp.s @@ -0,0 +1,32 @@ +# relaxing conditional jumps -- absolute + +.globl text1 +.section text1, "ax", @progbits + beq r2, r3, on_border + beq r2, r3, out_of_range + nop + nop + +.align 15 +on_border: + bne r2, r3, in_range + nop + nop + nop + nop + nop +out_of_range: +in_range: + nop + +.globl text2 +.section text2, "ax", @progbits + + bge r2, r3, text1 + blt r2, r3, out_of_range + ble r2, r3, sym + nop + nop +sym: + nop + diff --git a/ld/testsuite/ld-nios2/relax_jmp.ld b/ld/testsuite/ld-nios2/relax_jmp.ld new file mode 100644 index 0000000..df6c220 --- /dev/null +++ b/ld/testsuite/ld-nios2/relax_jmp.ld @@ -0,0 +1,11 @@ +/* Simple script for testing relaxation */ + +OUTPUT_FORMAT("elf32-littlenios2", "elf32-littlenios2", "elf32-littlenios2") +OUTPUT_ARCH(nios2) +ENTRY(_start) +SECTIONS +{ + _start = .; + text2 0 : { *(text2) } + text1 0x8000 : { *(text1) } +} diff --git a/ld/testsuite/ld-nios2/relax_section.d b/ld/testsuite/ld-nios2/relax_section.d new file mode 100644 index 0000000..93980cd --- /dev/null +++ b/ld/testsuite/ld-nios2/relax_section.d @@ -0,0 +1,35 @@ +#name: NIOS2 relax_section +#as: -relax-section +#ld: --relax -Trelax_jmp.ld +#source: relax_section.s +#objdump: -dr --prefix-addresses + +# Test relaxation of section + +.*: +file format elf32-littlenios2 + +Disassembly of section text1: +00008000 <[^>]*> bne r2,r3,00008010 <[^>]*> +00008004 <[^>]*> nextpc at +00008008 <[^>]*> addi at,at,32764 +0000800c <[^>]*> jmp at +00008010 <[^>]*> bge r2,r3,00008024 <[^>]*> +00008014 <[^>]*> nextpc at +00008018 <[^>]*> addi at,at,32767 +0000801c <[^>]*> addi at,at,9 +00008020 <[^>]*> jmp at +00008024 <[^>]*> bne r2,r3,00008030 <in_range> +00008028 <[^>]*> nop +0000802c <[^>]*> nop +00008030 <in_range> nop +#... +00010000 <[^>]*> br 00008030 <in_range> +00010004 <just_out_of_range> nop +00010008 <[^>]*> nop +0001000c <[^>]*> nop +00010010 <[^>]*> nop +00010014 <[^>]*> nop +00010018 <[^>]*> nop +0001001c <[^>]*> nop +00010020 <farther_out_of_range> nop +#pass diff --git a/ld/testsuite/ld-nios2/relax_section.s b/ld/testsuite/ld-nios2/relax_section.s new file mode 100644 index 0000000..0e803d1 --- /dev/null +++ b/ld/testsuite/ld-nios2/relax_section.s @@ -0,0 +1,23 @@ +# relaxing conditional and unconditional jumps -- pc-relative + +.globl text1 +.section text1, "ax", @progbits + beq r2, r3, just_out_of_range + blt r2, r3, farther_out_of_range + bne r2, r3, in_range + nop + nop +in_range: + nop +.align 15 + br in_range +just_out_of_range: + nop + nop + nop + nop + nop + nop + nop +farther_out_of_range: + nop diff --git a/ld/testsuite/ld-nios2/relax_ujmp.d b/ld/testsuite/ld-nios2/relax_ujmp.d new file mode 100644 index 0000000..68313c1 --- /dev/null +++ b/ld/testsuite/ld-nios2/relax_ujmp.d @@ -0,0 +1,32 @@ +#name: NIOS2 relax_ujmp +#as: -relax-all +#ld: --relax -Trelax_jmp.ld +#source: relax_ujmp.s +#objdump: -dr --prefix-addresses + +# Test relaxation of unconditional jumps + +.*: +file format elf32-littlenios2 + +Disassembly of section text2: +00000000 <[^>]*> br 00008000 <[^>]*> +00000004 <[^>]*> movhi at,1 +00000008 <[^>]*> ori at,at,16 +0000000c <[^>]*> jmp at +00000010 <[^>]*> br 0000001c <sym> +00000014 <[^>]*> nop +00000018 <[^>]*> nop +0000001c <sym> nop + +Disassembly of section text1: +00008000 <[^>]*> br 00010000 <on_border> +00008004 <[^>]*> movhi at,1 +00008008 <[^>]*> ori at,at,16 +0000800c <[^>]*> jmp at +#... +00010000 <on_border> br 00010010 <in_range> +00010004 <[^>]*> nop +00010008 <[^>]*> nop +0001000c <[^>]*> nop +00010010 <in_range> nop +#pass diff --git a/ld/testsuite/ld-nios2/relax_ujmp.s b/ld/testsuite/ld-nios2/relax_ujmp.s new file mode 100644 index 0000000..8982d73 --- /dev/null +++ b/ld/testsuite/ld-nios2/relax_ujmp.s @@ -0,0 +1,37 @@ +# relaxing unconditional jumps + +.globl text1 +.section text1, "ax", @progbits + + br on_border + br out_of_range + nop + nop + + +.align 15 +# nop +# nop +on_border: + br in_range + nop + nop + nop +out_of_range: +in_range: + nop + +.globl text2 +.section text2, "ax", @progbits + + br text1 + br out_of_range + br sym + nop + nop +sym: + nop + + + + diff --git a/ld/testsuite/ld-nios2/reloc.d b/ld/testsuite/ld-nios2/reloc.d new file mode 100644 index 0000000..cb2959d --- /dev/null +++ b/ld/testsuite/ld-nios2/reloc.d @@ -0,0 +1,10 @@ +#name: NIOS2 R_NIOS2_BFD_RELOC_XX +#source: reloc.s +#source: reloc_symbol.s +#ld: +#objdump: -s + +.*: +file format elf32-littlenios2 + +Contents of section .text: + [0-9a-f]+ fa00cefa efbeadde facefaef beadde00 ................ diff --git a/ld/testsuite/ld-nios2/reloc.s b/ld/testsuite/ld-nios2/reloc.s new file mode 100644 index 0000000..2d555c3 --- /dev/null +++ b/ld/testsuite/ld-nios2/reloc.s @@ -0,0 +1,9 @@ +# Test for Nios II 32-bit, 16 and 8-bit relocations + +.global byte_sym +.global short_sym +.global long_sym + +.set byte_sym, 0xFA +.set short_sym, 0xFACE +.set long_sym, 0xDEADBEEF diff --git a/ld/testsuite/ld-nios2/reloc_symbol.s b/ld/testsuite/ld-nios2/reloc_symbol.s new file mode 100644 index 0000000..fa7ac95 --- /dev/null +++ b/ld/testsuite/ld-nios2/reloc_symbol.s @@ -0,0 +1,24 @@ +.text +.global _start +_start: + +# byte aligned +.align 0 +.byte byte_sym + +# short aligned +.align 1 +.short short_sym + +# word aligned +.align 2 +.long long_sym + +# now lets try some unaligned words and halfwords +.byte byte_sym +.2byte short_sym +.4byte long_sym + +#.align 2 +#nop + diff --git a/ld/testsuite/ld-nios2/s16.d b/ld/testsuite/ld-nios2/s16.d new file mode 100644 index 0000000..6257e18 --- /dev/null +++ b/ld/testsuite/ld-nios2/s16.d @@ -0,0 +1,12 @@ +#name: NIOS2 R_NIOS2_S16 +#source: s16.s +#source: s16_symbol.s +#ld: +#objdump: -s + +# Test the signed 16-bit relocations. +.*: +file format elf32-littlenios2 + +Contents of section .text: + [0-9a-f]+ 04004408 04006008 c4ff5f08 44004808 ..D...`..._.D.H. + [0-9a-f]+ 44004008 D.@. diff --git a/ld/testsuite/ld-nios2/s16.s b/ld/testsuite/ld-nios2/s16.s new file mode 100644 index 0000000..df13efa --- /dev/null +++ b/ld/testsuite/ld-nios2/s16.s @@ -0,0 +1,16 @@ +# Test for Nios II 32-bit, 16 and 8-bit relocations + +.set noat +.set some_other_sym, 0x1000 +.text +.global _start +_start: +# signed 16-bit relocation + addi r1, r1, some_sym + addi r1, r1, min + addi r1, r1, max + addi r1, r1, some_sym + some_other_sym + 1 + addi r1, r1, some_sym - some_other_sym + 1 + + + diff --git a/ld/testsuite/ld-nios2/s16_symbol.s b/ld/testsuite/ld-nios2/s16_symbol.s new file mode 100644 index 0000000..3902177 --- /dev/null +++ b/ld/testsuite/ld-nios2/s16_symbol.s @@ -0,0 +1,10 @@ +.global some_sym +.global some_other_sym +.global min +.global max + +.set max, 0x7fff +.set min, -0x8000 +.set some_sym, 0x1000 + + diff --git a/ld/testsuite/ld-nios2/u16.d b/ld/testsuite/ld-nios2/u16.d new file mode 100644 index 0000000..7d1df05 --- /dev/null +++ b/ld/testsuite/ld-nios2/u16.d @@ -0,0 +1,12 @@ +#name: NIOS2 R_NIOS2_U16 +#source: u16.s +#source: u16_symbol.s +#ld: +#objdump: -s + +# Test the unsigned 16-bit relocations. +.*: +file format elf32-littlenios2 + +Contents of section .text: + [0-9a-f]+ 0c004408 0c004008 ccff7f08 4c004808 ..D...@.....L.H. + [0-9a-f]+ 4c004008 L.@. diff --git a/ld/testsuite/ld-nios2/u16.s b/ld/testsuite/ld-nios2/u16.s new file mode 100644 index 0000000..b890682 --- /dev/null +++ b/ld/testsuite/ld-nios2/u16.s @@ -0,0 +1,16 @@ +# Test for Nios II 32-bit, 16 and 8-bit relocations + +.set noat +.set some_other_sym, 0x1000 +.text +.global _start +_start: +# unsigned 16-bit relocation + andi r1, r1, some_sym + andi r1, r1, min + andi r1, r1, max + andi r1, r1, some_sym + some_other_sym + 1 + andi r1, r1, some_sym - some_other_sym + 1 + + + diff --git a/ld/testsuite/ld-nios2/u16_symbol.s b/ld/testsuite/ld-nios2/u16_symbol.s new file mode 100644 index 0000000..518b4de --- /dev/null +++ b/ld/testsuite/ld-nios2/u16_symbol.s @@ -0,0 +1,9 @@ +.global some_sym +.global min +.global max + +.set max, 0xffff +.set min, 0 +.set some_sym, 0x1000 + + diff --git a/ld/testsuite/ld-plugin/lto.exp b/ld/testsuite/ld-plugin/lto.exp index a3898c9..365b988 100644 --- a/ld/testsuite/ld-plugin/lto.exp +++ b/ld/testsuite/ld-plugin/lto.exp @@ -265,7 +265,9 @@ set lto_run_elf_tests { run_cc_link_tests $lto_link_tests -if { [is_elf_format] } { +# Restrict these to ELF targets that support shared libs and PIC. +if { [is_elf_format] + && [run_host_cmd_yesno $CC "-shared -fPIC $srcdir/$subdir/dummy.c -o tmpdir/t.so"] } { run_cc_link_tests $lto_link_elf_tests } @@ -295,6 +297,11 @@ remote_exec host "mv" "tmpdir/dump tmpdir/lto-5.o" run_cc_link_tests $lto_link_symbol_tests +# The following tests require running the executable generated by ld. +if ![isnative] { + return +} + run_ld_link_exec_tests [] $lto_run_tests if { [is_elf_format] } { |