diff options
56 files changed, 812 insertions, 9 deletions
diff --git a/ld/ChangeLog b/ld/ChangeLog index 144672e..f55272c 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,5 +1,65 @@ 2016-12-31 Dimitar Dimitrov <dimitar@dinux.eu> + * NEWS: Mention new PRU target. + * Makefile.am: Add PRU target. + * configure.tgt: Ditto. + * emulparams/pruelf.sh: New file. + * emultempl/pruelf.em: New file. + * scripttempl/pru.sc: New file. + * Makefile.in: Regenerate. + * testsuite/ld-pru/emit-relocs-1.d: New PRU testcase file. + * testsuite/ld-pru/emit-relocs-1.ld: Ditto. + * testsuite/ld-pru/emit-relocs-1a.s: Ditto. + * testsuite/ld-pru/emit-relocs-1b.s + * testsuite/ld-pru/ldi32.d: Ditto. + * testsuite/ld-pru/ldi32.s: Ditto. + * testsuite/ld-pru/ldi32_symbol.s: Ditto. + * testsuite/ld-pru/norelax_ldi32-data.d: Ditto. + * testsuite/ld-pru/norelax_ldi32-dis.d: Ditto. + * testsuite/ld-pru/pcrel_s10.d: Ditto. + * testsuite/ld-pru/pcrel_s10.s: Ditto. + * testsuite/ld-pru/pcrel_s10_label.s: Ditto. + * testsuite/ld-pru/pcrel_u8-illegal.d: Ditto. + * testsuite/ld-pru/pcrel_u8-illegal.s: Ditto. + * testsuite/ld-pru/pcrel_u8-illegal2.d: Ditto. + * testsuite/ld-pru/pcrel_u8-illegal2.s: Ditto. + * testsuite/ld-pru/pcrel_u8-illegal3.d: Ditto. + * testsuite/ld-pru/pcrel_u8-illegal3.s: Ditto. + * testsuite/ld-pru/pcrel_u8.d: Ditto. + * testsuite/ld-pru/pcrel_u8.s: Ditto. + * testsuite/ld-pru/pcrel_u8_label.s: Ditto. + * testsuite/ld-pru/pmem.d: Ditto. + * testsuite/ld-pru/pmem.s: Ditto. + * testsuite/ld-pru/pmem_symbol.s: Ditto. + * testsuite/ld-pru/pru.exp: Ditto. + * testsuite/ld-pru/relax_ldi32-data.d: Ditto. + * testsuite/ld-pru/relax_ldi32-dis.d: Ditto. + * testsuite/ld-pru/relax_ldi32.s: Ditto. + * testsuite/ld-pru/relax_ldi32_symbol.s: Ditto. + * testsuite/ld-pru/reloc.d: Ditto. + * testsuite/ld-pru/reloc.s: Ditto. + * testsuite/ld-pru/reloc_symbol.s: Ditto. + * testsuite/ld-pru/u16.d: Ditto. + * testsuite/ld-pru/u16.s: Ditto. + * testsuite/ld-pru/u16_symbol.s: Ditto. + * testsuite/lib/ld-lib.exp (check_shared_lib_support): No shared + libraries are supported for PRU. + (check_gc_sections_available): Mark PRU as not supported. + * testsuite/ld-elf/eh-frame-hdr.d: Disable for PRU. + * testsuite/ld-elf/endsym.d: Likewise. + * testsuite/ld-elf/group8a.d: Likewise. + * testsuite/ld-elf/group8b.d: Likewise. + * testsuite/ld-elf/group9a.d: Likewise. + * testsuite/ld-elf/group9b.d: Likewise. + * testsuite/ld-elf/merge.d: Likewise. + * testsuite/ld-elf/pr12851.d: Likewise. + * testsuite/ld-elf/pr14926.d: Likewise. + * testsuite/ld-elf/sec-to-seg.exp: Likewise. + * testsuite/ld-elf/sec64k.exp: Mark sec64k case as too big for PRU. + * testsuite/ld-srec/srec.exp (run_srec_test): Add setup for PRU. + +2016-12-31 Dimitar Dimitrov <dimitar@dinux.eu> + * testsuite/lib/ld-lib.exp (run_dump_test): Pass -- to send_log. 2016-12-28 Alan Modra <amodra@gmail.com> diff --git a/ld/Makefile.am b/ld/Makefile.am index ac908bc..524be3e 100644 --- a/ld/Makefile.am +++ b/ld/Makefile.am @@ -1714,6 +1714,12 @@ eppcnw.c: $(srcdir)/emulparams/ppcnw.sh \ eppcpe.c: $(srcdir)/emulparams/ppcpe.sh \ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/ppcpe.sc ${GEN_DEPENDS} +epruelf.c: $(srcdir)/emulparams/pruelf.sh \ + $(srcdir)/emultempl/elf32.em \ + $(ELF_DEPS) $(srcdir)/scripttempl/pru.sc \ + $(srcdir)/emultempl/pruelf.em ${GEN_DEPENDS} + ${GENSCRIPTS} pruelf "$(tdir_pruelf)" + eriscix.c: $(srcdir)/emulparams/riscix.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} diff --git a/ld/Makefile.in b/ld/Makefile.in index 46c0302..b545eb7 100644 --- a/ld/Makefile.in +++ b/ld/Makefile.in @@ -3307,6 +3307,12 @@ eppcnw.c: $(srcdir)/emulparams/ppcnw.sh \ eppcpe.c: $(srcdir)/emulparams/ppcpe.sh \ $(srcdir)/emultempl/pe.em $(srcdir)/scripttempl/ppcpe.sc ${GEN_DEPENDS} +epruelf.c: $(srcdir)/emulparams/pruelf.sh \ + $(srcdir)/emultempl/elf32.em \ + $(ELF_DEPS) $(srcdir)/scripttempl/pru.sc \ + $(srcdir)/emultempl/pruelf.em ${GEN_DEPENDS} + ${GENSCRIPTS} pruelf "$(tdir_pruelf)" + eriscix.c: $(srcdir)/emulparams/riscix.sh \ $(srcdir)/emultempl/generic.em $(srcdir)/scripttempl/aout.sc ${GEN_DEPENDS} @@ -1,5 +1,7 @@ -*- text -*- +* Add support for the Texas Instruments PRU processor. + Changes in 2.28: * The EXCLUDE_FILE linker script construct can now be applied outside of the diff --git a/ld/configure.tgt b/ld/configure.tgt index b9f4782..5e0447e 100644 --- a/ld/configure.tgt +++ b/ld/configure.tgt @@ -684,6 +684,7 @@ powerpc-*-aix*) targ_emul=aixppc ;; powerpc-*-beos*) targ_emul=aixppc ;; powerpc-*-windiss*) targ_emul=elf32ppcwindiss ;; powerpc-*-lynxos*) targ_emul=ppclynx ;; +pru*-*-*) targ_emul=pruelf ;; riscv32*-*-*) targ_emul=elf32lriscv targ_extra_emuls="elf64lriscv" targ_extra_libpath=$targ_extra_emuls ;; diff --git a/ld/emulparams/pruelf.sh b/ld/emulparams/pruelf.sh new file mode 100644 index 0000000..02debba --- /dev/null +++ b/ld/emulparams/pruelf.sh @@ -0,0 +1,19 @@ +SCRIPT_NAME=elf +TEMPLATE_NAME=elf32 +OUTPUT_FORMAT="elf32-pru" +LITTLE_OUTPUT_FORMAT="elf32-pru" +SCRIPT_NAME=pru + +ARCH=pru +MACHINE= +MAXPAGESIZE="CONSTANT (MAXPAGESIZE)" +COMMONPAGESIZE="CONSTANT (COMMONPAGESIZE)" +EMBEDDED=yes + +TEXT_ORIGIN=0x20000000 +TEXT_LENGTH=8K +DATA_ORIGIN=0x0 +DATA_LENGTH=8K + +ENTRY=_start +EXTRA_EM_FILE=pruelf diff --git a/ld/emultempl/pruelf.em b/ld/emultempl/pruelf.em new file mode 100644 index 0000000..dd3ec76 --- /dev/null +++ b/ld/emultempl/pruelf.em @@ -0,0 +1,50 @@ +# This shell script emits a C file. -*- C -*- +# Copyright (C) 2016 Free Software Foundation, Inc. +# +# This file is part of the GNU Binutils. +# +# This program 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 of the License, or +# (at your option) any later version. +# +# This program 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 this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, +# MA 02110-1301, USA. +# + +# This file is sourced from elf32.em, and defines extra pru-elf +# specific routines. +# +fragment <<EOF + +#include "ldctor.h" + +/* This is called after the sections have been attached to output + sections, but before any sizes or addresses have been set. */ + +static void +pruelf_before_allocation (void) +{ + /* Call the default first. */ + gld${EMULATION_NAME}_before_allocation (); + + /* Enable relaxation by default if the "--no-relax" option was not + specified. This is done here instead of in the before_parse hook + because there is a check in main() to prohibit use of --relax and + -r together. */ + if (RELAXATION_DISABLED_BY_DEFAULT) + ENABLE_RELAXATION; +} + +EOF + +# Put these extra pru-elf routines in ld_${EMULATION_NAME}_emulation +# +LDEMUL_BEFORE_ALLOCATION=pruelf_before_allocation diff --git a/ld/scripttempl/pru.sc b/ld/scripttempl/pru.sc new file mode 100644 index 0000000..88fe06c --- /dev/null +++ b/ld/scripttempl/pru.sc @@ -0,0 +1,179 @@ +cat <<EOF +OUTPUT_FORMAT("${OUTPUT_FORMAT}","${OUTPUT_FORMAT}","${OUTPUT_FORMAT}") +OUTPUT_ARCH(${ARCH}) + +MEMORY +{ + imem (x) : ORIGIN = $TEXT_ORIGIN, LENGTH = $TEXT_LENGTH + dmem (rw!x) : ORIGIN = $DATA_ORIGIN, LENGTH = $DATA_LENGTH +} + +__HEAP_SIZE = DEFINED(__HEAP_SIZE) ? __HEAP_SIZE : 32; +__STACK_SIZE = DEFINED(__STACK_SIZE) ? __STACK_SIZE : 512; + +${RELOCATING+ PROVIDE (_stack_top = ORIGIN(dmem) + LENGTH(dmem)) ; } + +${RELOCATING+ENTRY (_start)} + +SECTIONS +{ + /* Read-only sections, merged into text segment: */ + ${TEXT_DYNAMIC+${DYNAMIC}} + .hash ${RELOCATING-0} : { *(.hash) } + .dynsym ${RELOCATING-0} : { *(.dynsym) } + .dynstr ${RELOCATING-0} : { *(.dynstr) } + .gnu.version ${RELOCATING-0} : { *(.gnu.version) } + .gnu.version_d ${RELOCATING-0} : { *(.gnu.version_d) } + .gnu.version_r ${RELOCATING-0} : { *(.gnu.version_r) } + + .rel.init ${RELOCATING-0} : { *(.rel.init) } + .rela.init ${RELOCATING-0} : { *(.rela.init) } + .rel.text ${RELOCATING-0} : + { + *(.rel.text) + ${RELOCATING+*(.rel.text.*)} + ${RELOCATING+*(.rel.gnu.linkonce.t*)} + } + .rela.text ${RELOCATING-0} : + { + *(.rela.text) + ${RELOCATING+*(.rela.text.*)} + ${RELOCATING+*(.rela.gnu.linkonce.t*)} + } + .rel.fini ${RELOCATING-0} : { *(.rel.fini) } + .rela.fini ${RELOCATING-0} : { *(.rela.fini) } + .rel.rodata ${RELOCATING-0} : + { + *(.rel.rodata) + ${RELOCATING+*(.rel.rodata.*)} + ${RELOCATING+*(.rel.gnu.linkonce.r*)} + } + .rela.rodata ${RELOCATING-0} : + { + *(.rela.rodata) + ${RELOCATING+*(.rela.rodata.*)} + ${RELOCATING+*(.rela.gnu.linkonce.r*)} + } + .rel.data ${RELOCATING-0} : + { + *(.rel.data) + ${RELOCATING+*(.rel.data.*)} + ${RELOCATING+*(.rel.gnu.linkonce.d*)} + } + .rela.data ${RELOCATING-0} : + { + *(.rela.data) + ${RELOCATING+*(.rela.data.*)} + ${RELOCATING+*(.rela.gnu.linkonce.d*)} + } + .rel.ctors ${RELOCATING-0} : { *(.rel.ctors) } + .rela.ctors ${RELOCATING-0} : { *(.rela.ctors) } + .rel.dtors ${RELOCATING-0} : { *(.rel.dtors) } + .rela.dtors ${RELOCATING-0} : { *(.rela.dtors) } + .rel.got ${RELOCATING-0} : { *(.rel.got) } + .rela.got ${RELOCATING-0} : { *(.rela.got) } + .rel.bss ${RELOCATING-0} : { *(.rel.bss) } + .rela.bss ${RELOCATING-0} : { *(.rela.bss) } + .rel.plt ${RELOCATING-0} : { *(.rel.plt) } + .rela.plt ${RELOCATING-0} : { *(.rela.plt) } + + /* Internal text space. */ + .text ${RELOCATING-0} : + { + ${RELOCATING+ _text_start = . ; } + + ${RELOCATING+. = ALIGN(4);} + + ${RELOCATING+*(.init0) /* Start here after reset. */} + ${RELOCATING+KEEP (*(.init0))} + + ${RELOCATING+. = ALIGN(4);} + *(.text) + ${RELOCATING+. = ALIGN(4);} + ${RELOCATING+*(.text.*)} + ${RELOCATING+. = ALIGN(4);} + ${RELOCATING+*(.gnu.linkonce.t*)} + ${RELOCATING+. = ALIGN(4);} + + ${RELOCATING+ _text_end = . ; } + } ${RELOCATING+ > imem} + + .data ${RELOCATING-0} : + { + /* Optional variable that user is prepared to have NULL address. */ + ${RELOCATING+ *(.data.atzero*)} + + /* CRT is prepared for constructor/destructor table to have + a "valid" NULL address. */ + ${CONSTRUCTING+ _ctors_start = . ; } + ${CONSTRUCTING+ KEEP (*(SORT_BY_INIT_PRIORITY(.ctors.*)))} + ${CONSTRUCTING+ KEEP (*(.ctors))} + ${CONSTRUCTING+ _ctors_end = . ; } + ${CONSTRUCTING+ _dtors_start = . ; } + ${CONSTRUCTING+ KEEP (*(SORT_BY_INIT_PRIORITY(.dtors.*)))} + ${CONSTRUCTING+ KEEP (*(.dtors))} + ${CONSTRUCTING+ _dtors_end = . ; } + + /* DATA memory starts at address 0. So to avoid placing a valid static + variable at the invalid NULL address, we introduce the .data.atzero + section. If CRT can make some use of it - great. Otherwise skip a + word. In all cases .data/.bss sections must start at non-zero. */ + . += (. == 0 ? 4 : 0); + + ${RELOCATING+ PROVIDE (_data_start = .) ; } + *(.data) + ${RELOCATING+ *(.data*)} + ${RELOCATING+ *(.rodata) /* We need to include .rodata here if gcc is used. */} + ${RELOCATING+ *(.rodata.*) /* with -fdata-sections. */} + ${RELOCATING+*(.gnu.linkonce.d*)} + ${RELOCATING+*(.gnu.linkonce.r*)} + ${RELOCATING+. = ALIGN(4);} + ${RELOCATING+ PROVIDE (_data_end = .) ; } + } ${RELOCATING+ > dmem } + + .resource_table ${RELOCATING-0} : + { + *(.resource_table) + KEEP (*(.resource_table)) + } > dmem + + .bss ${RELOCATING-0} : + { + ${RELOCATING+ PROVIDE (_bss_start = .) ; } + *(.bss) + ${RELOCATING+ *(.bss.*)} + ${RELOCATING+*(.gnu.linkonce.b*)} + *(COMMON) + ${RELOCATING+ PROVIDE (_bss_end = .) ; } + } ${RELOCATING+ > dmem} + + /* Global data not cleared after reset. */ + .noinit ${RELOCATING-0}: + { + ${RELOCATING+ PROVIDE (_noinit_start = .) ; } + *(.noinit) + ${RELOCATING+ PROVIDE (_noinit_end = .) ; } + ${RELOCATING+ PROVIDE (_heap_start = .) ; } + ${RELOCATING+ . += __HEAP_SIZE ; } + /* Stack is not here really. It will be put at the end of DMEM. + But we take into account its size here, in order to allow + for MEMORY overflow checking during link time. */ + ${RELOCATING+ . += __STACK_SIZE ; } + } ${RELOCATING+ > dmem} + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .note.gnu.build-id : { *(.note.gnu.build-id) } +EOF + +. $srcdir/scripttempl/DWARF.sc + +cat <<EOF +} +EOF diff --git a/ld/testsuite/ld-elf/eh-frame-hdr.d b/ld/testsuite/ld-elf/eh-frame-hdr.d index f73d0e5..a76ac73 100644 --- a/ld/testsuite/ld-elf/eh-frame-hdr.d +++ b/ld/testsuite/ld-elf/eh-frame-hdr.d @@ -2,7 +2,7 @@ #ld: -e _start --eh-frame-hdr #objdump: -hw #target: cfi -#xfail: avr*-*-* or1k*-*-elf or1k*-*-rtems* visium-*-* +#xfail: avr*-*-* or1k*-*-elf or1k*-*-rtems* pru-*-* visium-*-* # These targets support CFI generation but not shared libraries. #... [0-9] .eh_frame_hdr 0*[12][048c] .* diff --git a/ld/testsuite/ld-elf/endsym.d b/ld/testsuite/ld-elf/endsym.d index eefdd43..3472154 100644 --- a/ld/testsuite/ld-elf/endsym.d +++ b/ld/testsuite/ld-elf/endsym.d @@ -4,6 +4,7 @@ #nm: -n #notarget: hppa*-*-hpux* #xfail: m68hc1*-* xgate-* cr16-*-* crx-*-* dlx-*-* nds32*-*-* visium-*-* +#xfail: pru-*-* #... .* end diff --git a/ld/testsuite/ld-elf/group8a.d b/ld/testsuite/ld-elf/group8a.d index 45955ba..52112e9 100644 --- a/ld/testsuite/ld-elf/group8a.d +++ b/ld/testsuite/ld-elf/group8a.d @@ -1,7 +1,7 @@ #source: group8.s #ld: -r --gc-sections --entry foo #readelf: -g --wide -#notarget: d30v-*-* dlx-*-* i960-*-* pj*-*-* +#notarget: d30v-*-* dlx-*-* i960-*-* pj*-*-* pru-*-* #notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #xfail: cr16-*-* crx-*-* # generic linker targets don't support --gc-sections, nor do a bunch of others diff --git a/ld/testsuite/ld-elf/group8b.d b/ld/testsuite/ld-elf/group8b.d index 0175c7f..879cd13 100644 --- a/ld/testsuite/ld-elf/group8b.d +++ b/ld/testsuite/ld-elf/group8b.d @@ -1,7 +1,7 @@ #source: group8.s #ld: -r --gc-sections --entry bar #readelf: -g --wide -#notarget: d30v-*-* dlx-*-* i960-*-* pj*-*-* +#notarget: d30v-*-* dlx-*-* i960-*-* pj*-*-* pru-*-* #notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #xfail: cr16-*-* crx-*-* # generic linker targets don't support --gc-sections, nor do a bunch of others diff --git a/ld/testsuite/ld-elf/group9a.d b/ld/testsuite/ld-elf/group9a.d index 44fe606..346254b 100644 --- a/ld/testsuite/ld-elf/group9a.d +++ b/ld/testsuite/ld-elf/group9a.d @@ -1,7 +1,7 @@ #source: group9.s #ld: -r --gc-sections --entry foo #readelf: -g --wide -#notarget: d30v-*-* dlx-*-* i960-*-* pj*-*-* +#notarget: d30v-*-* dlx-*-* i960-*-* pj*-*-* pru-*-* #notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #xfail: cr16-*-* crx-*-* # generic linker targets don't support --gc-sections, nor do a bunch of others diff --git a/ld/testsuite/ld-elf/group9b.d b/ld/testsuite/ld-elf/group9b.d index 4ab2ba6..3005f8f 100644 --- a/ld/testsuite/ld-elf/group9b.d +++ b/ld/testsuite/ld-elf/group9b.d @@ -1,7 +1,7 @@ #source: group9.s #ld: -r --gc-sections --entry bar #readelf: -g --wide -#notarget: d30v-*-* dlx-*-* i960-*-* pj*-*-* +#notarget: d30v-*-* dlx-*-* i960-*-* pj*-*-* pru-*-* #notarget: alpha-*-* hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* #xfail: cr16-*-* crx-*-* # generic linker targets don't support --gc-sections, nor do a bunch of others diff --git a/ld/testsuite/ld-elf/merge.d b/ld/testsuite/ld-elf/merge.d index 818959d..d46acb6 100644 --- a/ld/testsuite/ld-elf/merge.d +++ b/ld/testsuite/ld-elf/merge.d @@ -6,7 +6,7 @@ #xfail: "i370-*-*" "i860-*-*" "i960-*-*" "ip2k-*-*" "iq2000-*-*" "lm32-*-*" #xfail: "mcore-*-*" "mn102*-*-*" "ms1-*-*" "mep-*-*" "m68hc11-*-*" #xfail: "or32-*-*" "pj-*-*" "sparc*-*-*" "tic6x-*-*" "vax-*-*" "xstormy16-*-*" -#xfail: "xtensa*-*-*" "metag-*-*" "ft32-*-*" +#xfail: "xtensa*-*-*" "metag-*-*" "ft32-*-*" "pru-*-*" .*: file format .*elf.* diff --git a/ld/testsuite/ld-elf/pr12851.d b/ld/testsuite/ld-elf/pr12851.d index 48ecb09..61c224d 100644 --- a/ld/testsuite/ld-elf/pr12851.d +++ b/ld/testsuite/ld-elf/pr12851.d @@ -2,7 +2,7 @@ #source: start.s #ld: --gc-sections #readelf: -s --wide -#notarget: d30v-*-* dlx-*-* i960-*-* pj*-*-* +#notarget: d30v-*-* dlx-*-* i960-*-* pj*-*-* pru-*-* #notarget: hppa64-*-* i370-*-* i860-*-* ia64-*-* mep-*-* mn10200-*-* # generic linker targets don't support --gc-sections, nor do a bunch of others diff --git a/ld/testsuite/ld-elf/pr14926.d b/ld/testsuite/ld-elf/pr14926.d index 88c521c..8fc8e64 100644 --- a/ld/testsuite/ld-elf/pr14926.d +++ b/ld/testsuite/ld-elf/pr14926.d @@ -1,6 +1,6 @@ #ld: -Ttext=0x60 #readelf: -S --wide -#notarget: d10v-* m68hc1*-* msp*-* visium-* xgate-* xstormy*-* +#notarget: d10v-* m68hc1*-* msp*-* visium-* xgate-* xstormy*-* pru-*-* # the above targets use memory regions that don't allow 0x60 for .text #... diff --git a/ld/testsuite/ld-elf/sec-to-seg.exp b/ld/testsuite/ld-elf/sec-to-seg.exp index 8847318..af3d604 100644 --- a/ld/testsuite/ld-elf/sec-to-seg.exp +++ b/ld/testsuite/ld-elf/sec-to-seg.exp @@ -87,6 +87,7 @@ if { [istarget avr-*-*] || [istarget moxie-*-*] || [istarget msp430-*-*] || [istarget mt-*-*] + || [istarget pru-*-*] || [istarget visium-*-*] } { set B_test_same_seg 0 diff --git a/ld/testsuite/ld-elf/sec64k.exp b/ld/testsuite/ld-elf/sec64k.exp index 7f7a9f3..283d779 100644 --- a/ld/testsuite/ld-elf/sec64k.exp +++ b/ld/testsuite/ld-elf/sec64k.exp @@ -170,7 +170,8 @@ if { ![istarget "d10v-*-*"] && ![istarget "avr-*-*"] && ![istarget "msp*-*-*"] && ![istarget "fr30-*-*"] - && ![istarget "iq2000-*-*"] } { + && ![istarget "iq2000-*-*"] + && ![istarget "pru-*-*"] } { foreach sfile $sfiles { puts $ofd "#source: $sfile" } if { [istarget spu*-*-*] } { puts $ofd "#ld: --local-store 0:0" diff --git a/ld/testsuite/ld-pru/emit-relocs-1.d b/ld/testsuite/ld-pru/emit-relocs-1.d new file mode 100644 index 0000000..414234f --- /dev/null +++ b/ld/testsuite/ld-pru/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_PRU_BFD_RELOC32 \.data +00000004 R_PRU_BFD_RELOC32 \.data\+0x00001000 +00000008 R_PRU_BFD_RELOC32 \.merge1\+0x00000002 +0000000c R_PRU_BFD_RELOC32 \.merge2 +00000010 R_PRU_BFD_RELOC32 \.merge3 +00000014 R_PRU_BFD_RELOC32 \.merge3\+0x00000004 +00000020 R_PRU_BFD_RELOC32 \.data\+0x00000020 +00000024 R_PRU_BFD_RELOC32 \.data\+0x00001020 +00000028 R_PRU_BFD_RELOC32 \.merge1 +0000002c R_PRU_BFD_RELOC32 \.merge2\+0x00000002 +00000030 R_PRU_BFD_RELOC32 \.merge3\+0x00000008 +00000034 R_PRU_BFD_RELOC32 \.merge3\+0x00000004 + + +Contents of section \.text: + 80000 e0e0e012 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-pru/emit-relocs-1.ld b/ld/testsuite/ld-pru/emit-relocs-1.ld new file mode 100644 index 0000000..1879ef4 --- /dev/null +++ b/ld/testsuite/ld-pru/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-pru/emit-relocs-1a.s b/ld/testsuite/ld-pru/emit-relocs-1a.s new file mode 100644 index 0000000..bf0a8a1 --- /dev/null +++ b/ld/testsuite/ld-pru/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-pru/emit-relocs-1b.s b/ld/testsuite/ld-pru/emit-relocs-1b.s new file mode 100644 index 0000000..82229c1 --- /dev/null +++ b/ld/testsuite/ld-pru/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-pru/ldi32.d b/ld/testsuite/ld-pru/ldi32.d new file mode 100644 index 0000000..123ead3 --- /dev/null +++ b/ld/testsuite/ld-pru/ldi32.d @@ -0,0 +1,12 @@ +#name: PRU R_PRU_LDI32 +#source: ldi32.s +#source: ldi32_symbol.s +#ld: +#objdump: -dr --prefix-addresses + +# Test the ldi32 relocation +.*: +file format elf32-pru + +Disassembly of section .text: +[0-9a-f]+ <[^>]*> ldi r16, 48879 +[0-9a-f]+ <[^>]*> ldi r16.w2, 57005 diff --git a/ld/testsuite/ld-pru/ldi32.s b/ld/testsuite/ld-pru/ldi32.s new file mode 100644 index 0000000..1165fe6 --- /dev/null +++ b/ld/testsuite/ld-pru/ldi32.s @@ -0,0 +1,6 @@ +# Test the ldi32 relocation + + .text + .global _start +_start: + ldi32 r16, long_symbol diff --git a/ld/testsuite/ld-pru/ldi32_symbol.s b/ld/testsuite/ld-pru/ldi32_symbol.s new file mode 100644 index 0000000..2e16066 --- /dev/null +++ b/ld/testsuite/ld-pru/ldi32_symbol.s @@ -0,0 +1,2 @@ + .global long_symbol + .set long_symbol, 0xDEADBEEF diff --git a/ld/testsuite/ld-pru/norelax_ldi32-data.d b/ld/testsuite/ld-pru/norelax_ldi32-data.d new file mode 100644 index 0000000..47fc2c1 --- /dev/null +++ b/ld/testsuite/ld-pru/norelax_ldi32-data.d @@ -0,0 +1,20 @@ +#name: PRU LDI32 disabled-relaxation data +#source: relax_ldi32.s +#source: relax_ldi32_symbol.s +#as: --mlink-relax +#ld: --no-relax +#objdump: -s + +# Note: default linker script should put a guard at DRAM address 0 + +.*: +file format elf32-pru + +Contents of section .text: + [0-9a-f]+ f0efbe24 d0adde24 0f00f630 f0efbe24 .* + [0-9a-f]+ d0adde24 f0cace24 d0000024 e0cace24 .* + [0-9a-f]+ f0cace24 d0010024 f0efbe24 d0acde24 .* + [0-9a-f]+ f0785624 d0341224 f0785624 d0000024 .* + [0-9a-f]+ f0120024 f100007e .* +Contents of section .data: + 0000 00000000 48000020 40000000 12004000 .* + 0010 10000000 f0ffffff 100040aa .* diff --git a/ld/testsuite/ld-pru/norelax_ldi32-dis.d b/ld/testsuite/ld-pru/norelax_ldi32-dis.d new file mode 100644 index 0000000..072de5f --- /dev/null +++ b/ld/testsuite/ld-pru/norelax_ldi32-dis.d @@ -0,0 +1,29 @@ +#name: PRU LDI32 disabled-relaxation +#source: relax_ldi32.s +#source: relax_ldi32_symbol.s +#as: --mlink-relax +#ld: --no-relax +#objdump: -dr --prefix-addresses + +# Test the LDI32 relaxation +.*: +file format elf32-pru + +Disassembly of section .text: +..000000 <[^>]*> ldi r16, 48879 +..000004 <[^>]*> ldi r16.w2, 57005 +..000008 <[^>]*> loop ..000044 <__end_loop>, r22 +..00000c <[^>]*> ldi r16, 48879 +..000010 <[^>]*> ldi r16.w2, 57005 +..000014 <[^>]*> ldi r16, 52938 +..000018 <[^>]*> ldi r16.w2, 0 +..00001c <[^>]*> ldi r0, 52938 +..000020 <[^>]*> ldi r16, 52938 +..000024 <[^>]*> ldi r16.w2, 1 +..000028 <[^>]*> ldi r16, 48879 +..00002c <[^>]*> ldi r16.w2, 57004 +..000030 <[^>]*> ldi r16, 22136 +..000034 <[^>]*> ldi r16.w2, 4660 +..000038 <[^>]*> ldi r16, 22136 +..00003c <[^>]*> ldi r16.w2, 0 +..000040 <[^>]*> ldi r16, 18 +..000044 <[^>]*> qba ..000008 <__intermediate> diff --git a/ld/testsuite/ld-pru/pcrel_s10.d b/ld/testsuite/ld-pru/pcrel_s10.d new file mode 100644 index 0000000..95602c5 --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_s10.d @@ -0,0 +1,18 @@ +#name: PRU R_PRU_S10_PCREL +#source: pcrel_s10.s +#source: pcrel_s10_label.s +#ld: +#objdump: -dr --prefix-addresses + +# Test the relative quick branch relocations. +.*: +file format elf32-pru + +Disassembly of section .text: +[0-9a-f]+ <[^>]*> qba [0-9a-f]+ <ext_label> +[0-9a-f]+ <[^>]*> qba [0-9a-f]+ <ext_label\+0x10> +[0-9a-f]+ <[^>]*> nop +[0-9a-f]+ <[^>]*> nop +[0-9a-f]+ <[^>]*> nop +[0-9a-f]+ <[^>]*> nop +[0-9a-f]+ <[^>]*> nop +[0-9a-f]+ <[^>]*> nop diff --git a/ld/testsuite/ld-pru/pcrel_s10.s b/ld/testsuite/ld-pru/pcrel_s10.s new file mode 100644 index 0000000..2a55773 --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_s10.s @@ -0,0 +1,7 @@ +# Test for pc-relative relocations + .text + .section .init0, "x" + .global _start +_start: + qba ext_label + qba ext_label + 16 diff --git a/ld/testsuite/ld-pru/pcrel_s10_label.s b/ld/testsuite/ld-pru/pcrel_s10_label.s new file mode 100644 index 0000000..2dc424c --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_s10_label.s @@ -0,0 +1,9 @@ + .text +ext_label: + nop + nop + nop + nop + nop + nop + .global ext_label diff --git a/ld/testsuite/ld-pru/pcrel_u8-illegal.d b/ld/testsuite/ld-pru/pcrel_u8-illegal.d new file mode 100644 index 0000000..a885237 --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_u8-illegal.d @@ -0,0 +1,7 @@ +#name: PRU R_PRU_U8_PCREL illegal +#source: pcrel_u8-illegal.s +#source: pcrel_u8_label.s +#ld: +#error: [^\n]*: relocation truncated to fit: R_PRU_U8_PCREL against `.init0' + +# Check that LOOP cannot reference "prior" labels. diff --git a/ld/testsuite/ld-pru/pcrel_u8-illegal.s b/ld/testsuite/ld-pru/pcrel_u8-illegal.s new file mode 100644 index 0000000..e33bd80 --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_u8-illegal.s @@ -0,0 +1,9 @@ +# Test for illegal pc-relative relocations + .text + .section .init0, "x" + .global _start +_start: +foo: +# Negative loop termination point + nop + loop foo, r20 diff --git a/ld/testsuite/ld-pru/pcrel_u8-illegal2.d b/ld/testsuite/ld-pru/pcrel_u8-illegal2.d new file mode 100644 index 0000000..604ea98 --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_u8-illegal2.d @@ -0,0 +1,7 @@ +#name: PRU R_PRU_U8_PCREL illegal offset 0 +#source: pcrel_u8-illegal2.s +#source: pcrel_u8_label.s +#ld: +#error: [^\n]*: relocation out of range + +# Check that LOOP cannot reference "prior" labels. diff --git a/ld/testsuite/ld-pru/pcrel_u8-illegal2.s b/ld/testsuite/ld-pru/pcrel_u8-illegal2.s new file mode 100644 index 0000000..a4bcf97 --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_u8-illegal2.s @@ -0,0 +1,7 @@ +# Test for illegal pc-relative relocations + .text + .section .init0, "x" + .global _start +_start: +L0: + loop L0, r0 diff --git a/ld/testsuite/ld-pru/pcrel_u8-illegal3.d b/ld/testsuite/ld-pru/pcrel_u8-illegal3.d new file mode 100644 index 0000000..604ea98 --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_u8-illegal3.d @@ -0,0 +1,7 @@ +#name: PRU R_PRU_U8_PCREL illegal offset 0 +#source: pcrel_u8-illegal2.s +#source: pcrel_u8_label.s +#ld: +#error: [^\n]*: relocation out of range + +# Check that LOOP cannot reference "prior" labels. diff --git a/ld/testsuite/ld-pru/pcrel_u8-illegal3.s b/ld/testsuite/ld-pru/pcrel_u8-illegal3.s new file mode 100644 index 0000000..8eb71f5 --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_u8-illegal3.s @@ -0,0 +1,7 @@ +# Test for illegal pc-relative relocations + .text + .section .init0, "x" + .global _start +_start: + loop L1, r0 +L1: diff --git a/ld/testsuite/ld-pru/pcrel_u8.d b/ld/testsuite/ld-pru/pcrel_u8.d new file mode 100644 index 0000000..60ff058 --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_u8.d @@ -0,0 +1,15 @@ +#name: PRU R_PRU_U8_PCREL +#source: pcrel_u8.s +#source: pcrel_u8_label.s +#ld: +#objdump: -dr --prefix-addresses + +# Test the relative quick branch relocations. +.*: +file format elf32-pru + +Disassembly of section .text: +[0-9a-f]+ <[^>]*> loop [0-9a-f]+ <end_loop>, 5 +[0-9a-f]+ <[^>]*> nop +[0-9a-f]+ <[^>]*> nop +[0-9a-f]+ <[^>]*> nop +[0-9a-f]+ <[^>]*> nop diff --git a/ld/testsuite/ld-pru/pcrel_u8.s b/ld/testsuite/ld-pru/pcrel_u8.s new file mode 100644 index 0000000..948e5a5 --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_u8.s @@ -0,0 +1,9 @@ +# Test for pc-relative relocations + .text + .section .init0, "x" + .global _start +_start: + loop end_loop, 5 + nop + nop + nop diff --git a/ld/testsuite/ld-pru/pcrel_u8_label.s b/ld/testsuite/ld-pru/pcrel_u8_label.s new file mode 100644 index 0000000..e4652fa --- /dev/null +++ b/ld/testsuite/ld-pru/pcrel_u8_label.s @@ -0,0 +1,4 @@ + .text +end_loop: + nop + .global end_loop diff --git a/ld/testsuite/ld-pru/pmem.d b/ld/testsuite/ld-pru/pmem.d new file mode 100644 index 0000000..b5747de --- /dev/null +++ b/ld/testsuite/ld-pru/pmem.d @@ -0,0 +1,15 @@ +#name: PRU R_PRU_BFD_*_PMEM +#source: pmem.s +#source: pmem_symbol.s +#ld: +#objdump: -s + +# Note: default linker script should put a guard at DRAM address 0 + +.*: +file format elf32-pru + +Contents of section .text: + [0-9a-f]+ e0050024 e0070024 05000000 05000600 .* + [0-9a-f]+ e0e0e012 e0e0e012 .* +Contents of section .data: + 0000 00000000 .* diff --git a/ld/testsuite/ld-pru/pmem.s b/ld/testsuite/ld-pru/pmem.s new file mode 100644 index 0000000..4c67ae3 --- /dev/null +++ b/ld/testsuite/ld-pru/pmem.s @@ -0,0 +1,15 @@ +# Test for PRU pmem relocations + + .global byte_sym + .global short_sym + .global long_sym + + .set byte_sym, 0xFA + .set short_sym, 0xFACE + .set long_sym, 0xDEADBEEF + + .text + .global _text_label + nop +_text_label: + nop diff --git a/ld/testsuite/ld-pru/pmem_symbol.s b/ld/testsuite/ld-pru/pmem_symbol.s new file mode 100644 index 0000000..d3eb386 --- /dev/null +++ b/ld/testsuite/ld-pru/pmem_symbol.s @@ -0,0 +1,13 @@ + .text + .section .init0, "x" + .global _start +_start: + + # U16_PMEMIMM + ldi r0, %pmem(_text_label) + ldi r0, %pmem(_text_label + 8) + +# Try 32/16_PMEM + .4byte %pmem(_text_label) + .2byte %pmem(_text_label) + .2byte %pmem(_text_label + 4) diff --git a/ld/testsuite/ld-pru/pru.exp b/ld/testsuite/ld-pru/pru.exp new file mode 100644 index 0000000..ac01a3c --- /dev/null +++ b/ld/testsuite/ld-pru/pru.exp @@ -0,0 +1,8 @@ +if { ! [istarget pru-*-*] } { + return +} + +foreach test [lsort [glob -nocomplain $srcdir/$subdir/*.d]] { + verbose [file rootname $test] + run_dump_test [file rootname $test] +} diff --git a/ld/testsuite/ld-pru/relax_ldi32-data.d b/ld/testsuite/ld-pru/relax_ldi32-data.d new file mode 100644 index 0000000..2c24fe4 --- /dev/null +++ b/ld/testsuite/ld-pru/relax_ldi32-data.d @@ -0,0 +1,19 @@ +#name: PRU LDI32 relaxation data +#source: relax_ldi32.s +#source: relax_ldi32_symbol.s +#as: --mlink-relax +#ld: --relax +#objdump: -s + +# Note: default linker script should put a guard at DRAM address 0 + +.*: +file format elf32-pru + +Contents of section .text: + [0-9a-f]+ f0efbe24 d0adde24 0d00f630 f0efbe24 .* + [0-9a-f]+ d0adde24 f0cace24 e0cace24 f0cace24 .* + [0-9a-f]+ d0010024 f0efbe24 d0acde24 f0785624 .* + [0-9a-f]+ d0341224 f0785624 f0100024 f300007e .* +Contents of section .data: + 0000 00000000 40000020 38000000 10003800 .* + 0010 0e000000 f2ffffff 0e0038aa .* diff --git a/ld/testsuite/ld-pru/relax_ldi32-dis.d b/ld/testsuite/ld-pru/relax_ldi32-dis.d new file mode 100644 index 0000000..1371f1c --- /dev/null +++ b/ld/testsuite/ld-pru/relax_ldi32-dis.d @@ -0,0 +1,27 @@ +#name: PRU LDI32 relaxation +#source: relax_ldi32.s +#source: relax_ldi32_symbol.s +#as: --mlink-relax +#ld: --relax +#objdump: -dr --prefix-addresses + +# Test the LDI32 relaxation +.*: +file format elf32-pru + +Disassembly of section .text: +..000000 <[^>]*> ldi r16, 48879 +..000004 <[^>]*> ldi r16.w2, 57005 +..000008 <[^>]*> loop ..00003c <__end_loop>, r22 +..00000c <[^>]*> ldi r16, 48879 +..000010 <[^>]*> ldi r16.w2, 57005 +..000014 <[^>]*> ldi r16, 52938 +..000018 <[^>]*> ldi r0, 52938 +..00001c <[^>]*> ldi r16, 52938 +..000020 <[^>]*> ldi r16.w2, 1 +..000024 <[^>]*> ldi r16, 48879 +..000028 <[^>]*> ldi r16.w2, 57004 +..00002c <[^>]*> ldi r16, 22136 +..000030 <[^>]*> ldi r16.w2, 4660 +..000034 <[^>]*> ldi r16, 22136 +..000038 <[^>]*> ldi r16, 16 +..00003c <[^>]*> qba ..000008 <__intermediate> diff --git a/ld/testsuite/ld-pru/relax_ldi32.s b/ld/testsuite/ld-pru/relax_ldi32.s new file mode 100644 index 0000000..18fb57f --- /dev/null +++ b/ld/testsuite/ld-pru/relax_ldi32.s @@ -0,0 +1,30 @@ +# Test LDI32 relaxation + + .text + .global _start +_start: + ldi32 r16, long_symbol +__intermediate: + loop __end_loop, r22 + ldi32 r16, long_symbol + ldi32 r16, short_symbol + ldi r0, short_symbol + ldi32 r16, short_symbol + 0x10000 + ldi32 r16, long_symbol - 0x10000 + ldi32 r16, 0x12345678 + ldi32 r16, 0x5678 + ldi r16, %pmem(__end) +__end_loop: + qba __intermediate +__end: + + .data + .4byte __end + .4byte (__end - __intermediate) + .2byte %pmem(__end) + .2byte (__end - __intermediate) + .4byte %pmem(__end - __intermediate) + .4byte %pmem(__intermediate - __end) + .2byte %pmem(__end - __intermediate) + .byte (__end - __intermediate) + .byte 0xaa diff --git a/ld/testsuite/ld-pru/relax_ldi32_symbol.s b/ld/testsuite/ld-pru/relax_ldi32_symbol.s new file mode 100644 index 0000000..c2cf554 --- /dev/null +++ b/ld/testsuite/ld-pru/relax_ldi32_symbol.s @@ -0,0 +1,5 @@ + .global long_symbol + .global short_symbol + + .set long_symbol, 0xDEADBEEF + .set short_symbol, 0xceca diff --git a/ld/testsuite/ld-pru/reloc.d b/ld/testsuite/ld-pru/reloc.d new file mode 100644 index 0000000..8bd1cec --- /dev/null +++ b/ld/testsuite/ld-pru/reloc.d @@ -0,0 +1,14 @@ +#name: PRU R_PRU_BFD_RELOC_XX +#source: reloc.s +#source: reloc_symbol.s +#ld: +#objdump: -s + +# Note: default linker script should put a guard at DRAM address 0 + +.*: +file format elf32-pru + +Contents of section .text: + [0-9a-f]+ fa00cefa efbeadde facefaef beadde00 .* +Contents of section .data: + 0000 00000000 .* diff --git a/ld/testsuite/ld-pru/reloc.s b/ld/testsuite/ld-pru/reloc.s new file mode 100644 index 0000000..3d40c2e --- /dev/null +++ b/ld/testsuite/ld-pru/reloc.s @@ -0,0 +1,9 @@ +# Test for PRU 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-pru/reloc_symbol.s b/ld/testsuite/ld-pru/reloc_symbol.s new file mode 100644 index 0000000..160a824 --- /dev/null +++ b/ld/testsuite/ld-pru/reloc_symbol.s @@ -0,0 +1,24 @@ + .text + .section .init0, "x" + .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-pru/u16.d b/ld/testsuite/ld-pru/u16.d new file mode 100644 index 0000000..9cc6482 --- /dev/null +++ b/ld/testsuite/ld-pru/u16.d @@ -0,0 +1,11 @@ +#name: PRU R_PRU_U16 +#source: u16.s +#source: u16_symbol.s +#ld: +#objdump: -dr --prefix-addresses + +# Test the regulard LDI relocation +.*: +file format elf32-pru + +Disassembly of section .text: +[0-9a-f]+ <[^>]*> ldi r16, 54321 diff --git a/ld/testsuite/ld-pru/u16.s b/ld/testsuite/ld-pru/u16.s new file mode 100644 index 0000000..4527b8f --- /dev/null +++ b/ld/testsuite/ld-pru/u16.s @@ -0,0 +1,4 @@ + .text + .global _start +_start: + ldi r16, short_symbol diff --git a/ld/testsuite/ld-pru/u16_symbol.s b/ld/testsuite/ld-pru/u16_symbol.s new file mode 100644 index 0000000..5e4e79d --- /dev/null +++ b/ld/testsuite/ld-pru/u16_symbol.s @@ -0,0 +1,2 @@ + .global short_symbol + .set short_symbol, 54321 diff --git a/ld/testsuite/ld-srec/srec.exp b/ld/testsuite/ld-srec/srec.exp index 9fcf07a..10b0a51 100644 --- a/ld/testsuite/ld-srec/srec.exp +++ b/ld/testsuite/ld-srec/srec.exp @@ -300,6 +300,11 @@ proc run_srec_test { test objs } { set flags "$flags -no-relax" } + # PRU ELF target relaxes by default; S-Record linker does not + if [istarget pru*-*-*] { + set flags "$flags -no-relax" + } + if { ![ld_simple_link $ld tmpdir/sr1 "$flags $objs"] \ || ![ld_simple_link $ld tmpdir/sr2.sr "$flags --oformat srec $objs"] } { fail $test diff --git a/ld/testsuite/lib/ld-lib.exp b/ld/testsuite/lib/ld-lib.exp index de0848a..5049b12 100644 --- a/ld/testsuite/lib/ld-lib.exp +++ b/ld/testsuite/lib/ld-lib.exp @@ -1705,6 +1705,7 @@ proc check_gc_sections_available { } { || [istarget dlx-*-*] || [istarget i960-*-*] || [istarget pj*-*-*] + || [istarget pru*-*-*] || [istarget alpha-*-*] || [istarget hppa*64-*-*] || [istarget i370-*-*] @@ -1777,6 +1778,7 @@ proc check_shared_lib_support { } { && ![istarget nds32*-*-*] && ![istarget or1k*-*-*] && ![istarget pj-*-*] + && ![istarget pru-*-*] && ![istarget rl78-*-*] && ![istarget rx-*-*] && ![istarget spu-*-*] |