aboutsummaryrefslogtreecommitdiff
path: root/ld/scripttempl
diff options
context:
space:
mode:
authorDimitar Dimitrov <dimitar@dinux.eu>2016-12-30 12:39:49 +0200
committerAlan Modra <amodra@gmail.com>2016-12-31 12:04:11 +1030
commit0220170b4d87ce940d40ac98387ff2d7fbed3ab2 (patch)
tree7b2208add3316c08c6e087b37f648690861c1f68 /ld/scripttempl
parent93f11b16ec1f5775c7f6c32b4a39d6dd0fb0c92a (diff)
downloadgdb-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.sc179
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