diff options
author | Dimitar Dimitrov <dimitar@dinux.eu> | 2016-12-30 12:39:49 +0200 |
---|---|---|
committer | Alan Modra <amodra@gmail.com> | 2016-12-31 12:04:11 +1030 |
commit | 0220170b4d87ce940d40ac98387ff2d7fbed3ab2 (patch) | |
tree | 7b2208add3316c08c6e087b37f648690861c1f68 /ld/scripttempl | |
parent | 93f11b16ec1f5775c7f6c32b4a39d6dd0fb0c92a (diff) | |
download | gdb-0220170b4d87ce940d40ac98387ff2d7fbed3ab2.zip gdb-0220170b4d87ce940d40ac98387ff2d7fbed3ab2.tar.gz gdb-0220170b4d87ce940d40ac98387ff2d7fbed3ab2.tar.bz2 |
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>
Diffstat (limited to 'ld/scripttempl')
-rw-r--r-- | ld/scripttempl/pru.sc | 179 |
1 files changed, 179 insertions, 0 deletions
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 |