From 99648958668d3a33ee57974479b36201fe303f34 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Fri, 20 Apr 2018 10:35:35 +0200 Subject: bsps: Move startup files to bsps Adjust build support files to new directory layout. This patch is a part of the BSP source reorganization. Update #3285. --- bsps/v850/gdbv850sim/start/bsp_specs | 5 + bsps/v850/gdbv850sim/start/bspreset.c | 23 ++++ bsps/v850/gdbv850sim/start/linkcmds | 242 ++++++++++++++++++++++++++++++++++ bsps/v850/gdbv850sim/start/trap.S | 14 ++ 4 files changed, 284 insertions(+) create mode 100644 bsps/v850/gdbv850sim/start/bsp_specs create mode 100644 bsps/v850/gdbv850sim/start/bspreset.c create mode 100644 bsps/v850/gdbv850sim/start/linkcmds create mode 100644 bsps/v850/gdbv850sim/start/trap.S (limited to 'bsps/v850') diff --git a/bsps/v850/gdbv850sim/start/bsp_specs b/bsps/v850/gdbv850sim/start/bsp_specs new file mode 100644 index 0000000000..13be8e3f41 --- /dev/null +++ b/bsps/v850/gdbv850sim/start/bsp_specs @@ -0,0 +1,5 @@ +%rename startfile old_startfile + +*startfile: +%{!qrtems: %(old_startfile)} \ +%{!nostdlib: %{qrtems: }} diff --git a/bsps/v850/gdbv850sim/start/bspreset.c b/bsps/v850/gdbv850sim/start/bspreset.c new file mode 100644 index 0000000000..b2986f4a24 --- /dev/null +++ b/bsps/v850/gdbv850sim/start/bspreset.c @@ -0,0 +1,23 @@ +/** + * @file + * + * This routine exits the simulator. + */ + +/* + * COPYRIGHT (c) 1989-2012. + * On-Line Applications Research Corporation (OAR). + * + * The license and distribution terms for this file may be + * found in the file LICENSE in this distribution or at + * http://www.rtems.org/license/LICENSE. + */ + +#include +#include +#include + +void bsp_reset( void ) +{ + TRAP0 (SYS_exit, 0, 0, 0); +} diff --git a/bsps/v850/gdbv850sim/start/linkcmds b/bsps/v850/gdbv850sim/start/linkcmds new file mode 100644 index 0000000000..42dccab5ae --- /dev/null +++ b/bsps/v850/gdbv850sim/start/linkcmds @@ -0,0 +1,242 @@ +/* + * Declare some sizes. + */ +_RamBase = DEFINED(_RamBase) ? _RamBase : 0x100000; /* RAM starts at 1MB */ +_RamSize = DEFINED(_RamSize) ? _RamSize : 0x100000; /* default is 1MB */ +_HeapSize = DEFINED(_HeapSize) ? _HeapSize : 0x0; +_StackSize = DEFINED(_StackSize) ? _StackSize : 0x1000; + +/* Default linker script, for normal executables */ +OUTPUT_FORMAT("elf32-v850-rh850", "elf32-v850-rh850", + "elf32-v850-rh850") +STARTUP(start.o) +OUTPUT_ARCH(v850-rh850) +ENTRY(_start) +/* GROUP(-lc -lsim -lgcc) */ +SEARCH_DIR(.); +EXTERN(__ctbp __ep __gp); +SECTIONS +{ + /* This saves a little space in the ELF file, since the zda starts + at a higher location that the ELF headers take up. */ + .zdata 0x160 : + { + *(.zdata) + *(.zbss) + *(reszdata) + *(.zcommon) + } + /* This is the read only part of the zero data area. + Having it as a seperate section prevents its + attributes from being inherited by the zdata + section. Specifically it prevents the zdata + section from being marked READONLY. */ + .rozdata ALIGN (4) : + { + *(.rozdata) + *(romzdata) + *(romzbss) + } + /* Read-only sections, merged into text segment. */ + . = 0x100000; + .interp : { *(.interp) } + .hash : { *(.hash) } + .dynsym : { *(.dynsym) } + .dynstr : { *(.dynstr) } + .rel.text : { *(.rel.text) } + .rela.text : { *(.rela.text) } + .rel.data : { *(.rel.data) } + .rela.data : { *(.rela.data) } + .rel.rodata : { *(.rel.rodata) } + .rela.rodata : { *(.rela.rodata) } + .rel.gcc_except_table : { *(.rel.gcc_except_table) } + .rela.gcc_except_table : { *(.rela.gcc_except_table) } + .rel.got : { *(.rel.got) } + .rela.got : { *(.rela.got) } + .rel.ctors : { *(.rel.ctors) } + .rela.ctors : { *(.rela.ctors) } + .rel.dtors : { *(.rel.dtors) } + .rela.dtors : { *(.rela.dtors) } + .rel.init : { *(.rel.init) } + .rela.init : { *(.rela.init) } + .rel.fini : { *(.rel.fini) } + .rela.fini : { *(.rela.fini) } + .rel.bss : { *(.rel.bss) } + .rela.bss : { *(.rela.bss) } + .rel.plt : { *(.rel.plt) } + .rela.plt : { *(.rela.plt) } + .init : { KEEP (*(.init)) } =0 + .plt : { *(.plt) } + .text : + { + *(.text) + *(.text.*) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + *(.gnu.linkonce.t*) + } =0 + _etext = .; + PROVIDE (etext = .); + /* This is special code area at the end of the normal text section. + It contains a small lookup table at the start followed by the + code pointed to by entries in the lookup table. */ + .call_table_data ALIGN (4) : + { + PROVIDE(__ctbp = .); + *(.call_table_data) + } = 0xff /* Fill gaps with 0xff. */ + .call_table_text : + { + *(.call_table_text) + } + .fini : { KEEP (*(.fini)) } =0 + .rodata : { *(.rodata .rodata.* .gnu.linkonce.r.*) } + .rodata1 : { *(.rodata1) } + .rtemsroset : { + /* for pre rtems-libbsd FreeBSD code */ + ___start_set_sysctl_set = .; + *(set_sysctl_*); + ___stop_set_sysctl_set = .; + *(set_domain_*); + *(set_pseudo_*); + + KEEP (*(SORT(.rtemsroset.*))) + } =0xff + .tdata : { + __TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __TLS_Data_end = .; + } + .tbss : { + __TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + __TLS_BSS_end = .; + } + __TLS_Data_size = __TLS_Data_end - __TLS_Data_begin; + __TLS_Data_begin = __TLS_Data_size != 0 ? __TLS_Data_begin : __TLS_BSS_begin; + __TLS_Data_end = __TLS_Data_size != 0 ? __TLS_Data_end : __TLS_BSS_begin; + __TLS_BSS_size = __TLS_BSS_end - __TLS_BSS_begin; + __TLS_Size = __TLS_BSS_end - __TLS_Data_begin; + __TLS_Alignment = MAX (ALIGNOF (.tdata), ALIGNOF (.tbss)); + .data : + { + *(.data) + *(.data.*) + KEEP (*(SORT(.rtemsrwset.*))) + *(.gnu.linkonce.d*) + CONSTRUCTORS + } + .data1 : { *(.data1) } + .ctors : + { + ___ctors = .; + KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*crtend(.ctors)) + ___ctors_end = .; + } + .dtors : + { + ___dtors = .; + KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*crtend.o(.dtors)) + ___dtors_end = .; + } + .jcr : + { + KEEP (*(.jcr)) + } + .gcc_except_table : { *(.gcc_except_table) } + .got : { *(.got.plt) *(.got) } + .dynamic : { *(.dynamic) } + .tdata ALIGN (4) : + { + PROVIDE (__ep = .); + *(.tbyte) + *(.tcommon_byte) + *(.tdata) + *(.tbss) + *(.tcommon) + } + /* We want the small data sections together, so single-instruction offsets + can access them all, and initialized data all before uninitialized, so + we can shorten the on-disk segment size. */ + .sdata ALIGN (4) : + { + PROVIDE (__gp = . + 0x8000); + *(.sdata) + } + /* See comment about .rozdata. */ + .rosdata ALIGN (4) : + { + *(.rosdata) + } + /* We place the .sbss data section AFTER the .rosdata section, so that + it can directly preceed the .bss section. This allows runtime startup + code to initialise all the zero-data sections by simply taking the + value of '_edata' and zeroing until it reaches '_end'. */ + .sbss : + { + __sbss_start = .; + *(.sbss) + *(.scommon) + } + _edata = DEFINED (__sbss_start) ? __sbss_start : . ; + PROVIDE (edata = _edata); + .bss : + { + __bss_start = DEFINED (__sbss_start) ? __sbss_start : . ; + __real_bss_start = . ; + *(.dynbss) + *(.bss) + *(COMMON) + } + . += _StackSize; + _stack = .; + _WorkAreaBase = .; + _end = . ; + PROVIDE (end = .); + /* 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) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions. */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + /* libgloss - User stack. */ +/* + .stack 0x200000 : + { + __stack = .; + *(.stack) + } +*/ +} + diff --git a/bsps/v850/gdbv850sim/start/trap.S b/bsps/v850/gdbv850sim/start/trap.S new file mode 100644 index 0000000000..b6003b216d --- /dev/null +++ b/bsps/v850/gdbv850sim/start/trap.S @@ -0,0 +1,14 @@ +/* from libgloss/v850 */ + .text + .global ___trap0 +___trap0: + trap 31 + tst r10,r10 + bz .L0 +/* + * Libgloss cares about the errno from this. We don't + movhi hi(_errno),r0,r6 + st.w r10,lo(_errno)[r6] +*/ +.L0: + jmp [r31] -- cgit v1.2.3