PRU LD Port
* 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. PRU does not export __end symbol because it is ambiguous for it. Users are expected to use instead the section markers __text_end, __data_end, __bss_end or __noinit_end. * 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. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
This commit is contained in:
parent
93f11b16ec
commit
0220170b4d
60
ld/ChangeLog
60
ld/ChangeLog
@ -1,3 +1,63 @@
|
||||
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.
|
||||
|
@ -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}
|
||||
|
||||
|
@ -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}
|
||||
|
||||
|
2
ld/NEWS
2
ld/NEWS
@ -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
|
||||
|
@ -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 ;;
|
||||
|
19
ld/emulparams/pruelf.sh
Normal file
19
ld/emulparams/pruelf.sh
Normal file
@ -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
|
50
ld/emultempl/pruelf.em
Normal file
50
ld/emultempl/pruelf.em
Normal file
@ -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
|
179
ld/scripttempl/pru.sc
Normal file
179
ld/scripttempl/pru.sc
Normal file
@ -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
|
@ -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] .*
|
||||
|
@ -4,6 +4,7 @@
|
||||
#nm: -n
|
||||
#notarget: hppa*-*-hpux*
|
||||
#xfail: m68hc1*-* xgate-* cr16-*-* crx-*-* dlx-*-* nds32*-*-* visium-*-*
|
||||
#xfail: pru-*-*
|
||||
|
||||
#...
|
||||
.* end
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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.*
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
||||
#...
|
||||
|
@ -87,6 +87,7 @@ if { [istarget avr-*-*]
|
||||
|| [istarget moxie-*-*]
|
||||
|| [istarget msp430-*-*]
|
||||
|| [istarget mt-*-*]
|
||||
|| [istarget pru-*-*]
|
||||
|| [istarget visium-*-*]
|
||||
} {
|
||||
set B_test_same_seg 0
|
||||
|
@ -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"
|
||||
|
37
ld/testsuite/ld-pru/emit-relocs-1.d
Normal file
37
ld/testsuite/ld-pru/emit-relocs-1.d
Normal file
@ -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 .*
|
20
ld/testsuite/ld-pru/emit-relocs-1.ld
Normal file
20
ld/testsuite/ld-pru/emit-relocs-1.ld
Normal file
@ -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/ : { *(*) }
|
||||
}
|
24
ld/testsuite/ld-pru/emit-relocs-1a.s
Normal file
24
ld/testsuite/ld-pru/emit-relocs-1a.s
Normal file
@ -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
|
18
ld/testsuite/ld-pru/emit-relocs-1b.s
Normal file
18
ld/testsuite/ld-pru/emit-relocs-1b.s
Normal file
@ -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
|
12
ld/testsuite/ld-pru/ldi32.d
Normal file
12
ld/testsuite/ld-pru/ldi32.d
Normal file
@ -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
|
6
ld/testsuite/ld-pru/ldi32.s
Normal file
6
ld/testsuite/ld-pru/ldi32.s
Normal file
@ -0,0 +1,6 @@
|
||||
# Test the ldi32 relocation
|
||||
|
||||
.text
|
||||
.global _start
|
||||
_start:
|
||||
ldi32 r16, long_symbol
|
2
ld/testsuite/ld-pru/ldi32_symbol.s
Normal file
2
ld/testsuite/ld-pru/ldi32_symbol.s
Normal file
@ -0,0 +1,2 @@
|
||||
.global long_symbol
|
||||
.set long_symbol, 0xDEADBEEF
|
20
ld/testsuite/ld-pru/norelax_ldi32-data.d
Normal file
20
ld/testsuite/ld-pru/norelax_ldi32-data.d
Normal file
@ -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 .*
|
29
ld/testsuite/ld-pru/norelax_ldi32-dis.d
Normal file
29
ld/testsuite/ld-pru/norelax_ldi32-dis.d
Normal file
@ -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>
|
18
ld/testsuite/ld-pru/pcrel_s10.d
Normal file
18
ld/testsuite/ld-pru/pcrel_s10.d
Normal file
@ -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
|
7
ld/testsuite/ld-pru/pcrel_s10.s
Normal file
7
ld/testsuite/ld-pru/pcrel_s10.s
Normal file
@ -0,0 +1,7 @@
|
||||
# Test for pc-relative relocations
|
||||
.text
|
||||
.section .init0, "x"
|
||||
.global _start
|
||||
_start:
|
||||
qba ext_label
|
||||
qba ext_label + 16
|
9
ld/testsuite/ld-pru/pcrel_s10_label.s
Normal file
9
ld/testsuite/ld-pru/pcrel_s10_label.s
Normal file
@ -0,0 +1,9 @@
|
||||
.text
|
||||
ext_label:
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
nop
|
||||
.global ext_label
|
7
ld/testsuite/ld-pru/pcrel_u8-illegal.d
Normal file
7
ld/testsuite/ld-pru/pcrel_u8-illegal.d
Normal file
@ -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.
|
9
ld/testsuite/ld-pru/pcrel_u8-illegal.s
Normal file
9
ld/testsuite/ld-pru/pcrel_u8-illegal.s
Normal file
@ -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
|
7
ld/testsuite/ld-pru/pcrel_u8-illegal2.d
Normal file
7
ld/testsuite/ld-pru/pcrel_u8-illegal2.d
Normal file
@ -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.
|
7
ld/testsuite/ld-pru/pcrel_u8-illegal2.s
Normal file
7
ld/testsuite/ld-pru/pcrel_u8-illegal2.s
Normal file
@ -0,0 +1,7 @@
|
||||
# Test for illegal pc-relative relocations
|
||||
.text
|
||||
.section .init0, "x"
|
||||
.global _start
|
||||
_start:
|
||||
L0:
|
||||
loop L0, r0
|
7
ld/testsuite/ld-pru/pcrel_u8-illegal3.d
Normal file
7
ld/testsuite/ld-pru/pcrel_u8-illegal3.d
Normal file
@ -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.
|
7
ld/testsuite/ld-pru/pcrel_u8-illegal3.s
Normal file
7
ld/testsuite/ld-pru/pcrel_u8-illegal3.s
Normal file
@ -0,0 +1,7 @@
|
||||
# Test for illegal pc-relative relocations
|
||||
.text
|
||||
.section .init0, "x"
|
||||
.global _start
|
||||
_start:
|
||||
loop L1, r0
|
||||
L1:
|
15
ld/testsuite/ld-pru/pcrel_u8.d
Normal file
15
ld/testsuite/ld-pru/pcrel_u8.d
Normal file
@ -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
|
9
ld/testsuite/ld-pru/pcrel_u8.s
Normal file
9
ld/testsuite/ld-pru/pcrel_u8.s
Normal file
@ -0,0 +1,9 @@
|
||||
# Test for pc-relative relocations
|
||||
.text
|
||||
.section .init0, "x"
|
||||
.global _start
|
||||
_start:
|
||||
loop end_loop, 5
|
||||
nop
|
||||
nop
|
||||
nop
|
4
ld/testsuite/ld-pru/pcrel_u8_label.s
Normal file
4
ld/testsuite/ld-pru/pcrel_u8_label.s
Normal file
@ -0,0 +1,4 @@
|
||||
.text
|
||||
end_loop:
|
||||
nop
|
||||
.global end_loop
|
15
ld/testsuite/ld-pru/pmem.d
Normal file
15
ld/testsuite/ld-pru/pmem.d
Normal file
@ -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 .*
|
15
ld/testsuite/ld-pru/pmem.s
Normal file
15
ld/testsuite/ld-pru/pmem.s
Normal file
@ -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
|
13
ld/testsuite/ld-pru/pmem_symbol.s
Normal file
13
ld/testsuite/ld-pru/pmem_symbol.s
Normal file
@ -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)
|
8
ld/testsuite/ld-pru/pru.exp
Normal file
8
ld/testsuite/ld-pru/pru.exp
Normal file
@ -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]
|
||||
}
|
19
ld/testsuite/ld-pru/relax_ldi32-data.d
Normal file
19
ld/testsuite/ld-pru/relax_ldi32-data.d
Normal file
@ -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 .*
|
27
ld/testsuite/ld-pru/relax_ldi32-dis.d
Normal file
27
ld/testsuite/ld-pru/relax_ldi32-dis.d
Normal file
@ -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>
|
30
ld/testsuite/ld-pru/relax_ldi32.s
Normal file
30
ld/testsuite/ld-pru/relax_ldi32.s
Normal file
@ -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
|
5
ld/testsuite/ld-pru/relax_ldi32_symbol.s
Normal file
5
ld/testsuite/ld-pru/relax_ldi32_symbol.s
Normal file
@ -0,0 +1,5 @@
|
||||
.global long_symbol
|
||||
.global short_symbol
|
||||
|
||||
.set long_symbol, 0xDEADBEEF
|
||||
.set short_symbol, 0xceca
|
14
ld/testsuite/ld-pru/reloc.d
Normal file
14
ld/testsuite/ld-pru/reloc.d
Normal file
@ -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 .*
|
9
ld/testsuite/ld-pru/reloc.s
Normal file
9
ld/testsuite/ld-pru/reloc.s
Normal file
@ -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
|
24
ld/testsuite/ld-pru/reloc_symbol.s
Normal file
24
ld/testsuite/ld-pru/reloc_symbol.s
Normal file
@ -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
|
11
ld/testsuite/ld-pru/u16.d
Normal file
11
ld/testsuite/ld-pru/u16.d
Normal file
@ -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
|
4
ld/testsuite/ld-pru/u16.s
Normal file
4
ld/testsuite/ld-pru/u16.s
Normal file
@ -0,0 +1,4 @@
|
||||
.text
|
||||
.global _start
|
||||
_start:
|
||||
ldi r16, short_symbol
|
2
ld/testsuite/ld-pru/u16_symbol.s
Normal file
2
ld/testsuite/ld-pru/u16_symbol.s
Normal file
@ -0,0 +1,2 @@
|
||||
.global short_symbol
|
||||
.set short_symbol, 54321
|
@ -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
|
||||
|
@ -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-*-*]
|
||||
|
Loading…
x
Reference in New Issue
Block a user