Add BSP and semihosting library for nios2-generic-nommu QEMU emulation.
This commit is contained in:
committed by
Corinna Vinschen
parent
054ff18f5f
commit
fddc74d12b
210
libgloss/nios2/qemu-hosted.ld
Normal file
210
libgloss/nios2/qemu-hosted.ld
Normal file
@ -0,0 +1,210 @@
|
||||
/* qemu-hosted.ld -- Linker script for QEMU generic-nommu board emulation.
|
||||
|
||||
Copyright (c) 2018 Mentor Graphics
|
||||
|
||||
The authors hereby grant permission to use, copy, modify, distribute,
|
||||
and license this software and its documentation for any purpose, provided
|
||||
that existing copyright notices are retained in all copies and that this
|
||||
notice is included verbatim in any distributions. No written agreement,
|
||||
license, or royalty fee is required for any of the authorized uses.
|
||||
Modifications to this software may be copyrighted by their authors
|
||||
and need not follow the licensing terms described here, provided that
|
||||
the new terms are clearly indicated on the first page of each file where
|
||||
they apply.
|
||||
|
||||
Parts of this file were derived from code written by Altera Corporation
|
||||
and distributed under the following license:
|
||||
|
||||
Copyright (c) 2008
|
||||
Altera Corporation, San Jose, California, USA.
|
||||
All rights reserved.
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a
|
||||
copy of this software and associated documentation files (the "Software"),
|
||||
to deal in the Software without restriction, including without limitation
|
||||
the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
and/or sell copies of the Software, and to permit persons to whom the
|
||||
Software is furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||
DEALINGS IN THE SOFTWARE.
|
||||
|
||||
This agreement shall be governed in all respects by the laws of the State
|
||||
of California and by the laws of the United States of America.
|
||||
|
||||
*/
|
||||
|
||||
ENTRY(__start)
|
||||
SEARCH_DIR(.)
|
||||
GROUP(-lgcc -lc -lnios2)
|
||||
|
||||
MEMORY
|
||||
{
|
||||
rom (rx) : ORIGIN = 0x0, LENGTH = 64M
|
||||
ram (rwx) : ORIGIN = 0x10000000, LENGTH = 128M
|
||||
tlbmiss (rwx) : ORIGIN = 0x7fff400, LENGTH = 1K
|
||||
descriptor (rwx) : ORIGIN = 0x8002000, LENGTH = 8K
|
||||
}
|
||||
|
||||
/* Force the linker to search for these symbols from
|
||||
the start of the link process. */
|
||||
EXTERN(__reset)
|
||||
EXTERN(__start)
|
||||
EXTERN(main __stack __heap_start __heap_end __heap_end)
|
||||
|
||||
/* Where to put the stack and heap. Allocate 1M heap space. */
|
||||
PROVIDE(__heap_start = _end);
|
||||
PROVIDE(__heap_end = _end + 100000);
|
||||
PROVIDE(__stack = 0x18000000);
|
||||
|
||||
/* Force exit to be picked up in a hosted environment. */
|
||||
EXTERN(exit atexit)
|
||||
|
||||
/* Ensure that newlib runs the finalizers. */
|
||||
__libc_fini = _fini;
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text :
|
||||
{
|
||||
_ftext = .;
|
||||
*(.text.entry)
|
||||
*(.text.start)
|
||||
*(.text .text.* .gnu.linkonce.t.*)
|
||||
|
||||
. = ALIGN(0x4);
|
||||
KEEP (*crtbegin.o(.jcr))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .jcr))
|
||||
KEEP (*crtend.o(.jcr))
|
||||
|
||||
. = ALIGN(0x4);
|
||||
*(.gcc_except_table .gcc_except_table.*)
|
||||
*(.gnu_extab .gnu_extab.*)
|
||||
} > ram
|
||||
.eh_frame_hdr : ALIGN (4)
|
||||
{
|
||||
KEEP (*(.eh_frame_hdr))
|
||||
*(.eh_frame_entry .eh_frame_entry.*)
|
||||
} > ram
|
||||
.eh_frame : ALIGN (4)
|
||||
{
|
||||
KEEP (*(.eh_frame)) *(.eh_frame.*)
|
||||
} > ram
|
||||
.note.gnu.build-id : ALIGN (4)
|
||||
{
|
||||
KEEP (*(.note.gnu.build-id))
|
||||
} > ram
|
||||
.rodata : ALIGN (4)
|
||||
{
|
||||
*(.rodata .rodata.* .gnu.linkonce.r.*)
|
||||
|
||||
. = ALIGN(4);
|
||||
KEEP(*(.init))
|
||||
|
||||
. = ALIGN(4);
|
||||
__preinit_array_start = .;
|
||||
KEEP (*(.preinit_array))
|
||||
__preinit_array_end = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
__init_array_start = .;
|
||||
KEEP (*(SORT(.init_array.*)))
|
||||
KEEP (*(.init_array))
|
||||
__init_array_end = .;
|
||||
|
||||
. = ALIGN(4);
|
||||
KEEP(*(.fini))
|
||||
|
||||
. = ALIGN(4);
|
||||
__fini_array_start = .;
|
||||
KEEP (*(.fini_array))
|
||||
KEEP (*(SORT(.fini_array.*)))
|
||||
__fini_array_end = .;
|
||||
|
||||
. = ALIGN(0x4);
|
||||
KEEP (*crtbegin.o(.ctors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
|
||||
KEEP (*(SORT(.ctors.*)))
|
||||
KEEP (*crtend.o(.ctors))
|
||||
|
||||
. = ALIGN(0x4);
|
||||
KEEP (*crtbegin.o(.dtors))
|
||||
KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
|
||||
KEEP (*(SORT(.dtors.*)))
|
||||
KEEP (*crtend.o(.dtors))
|
||||
|
||||
*(.lit)
|
||||
|
||||
. = ALIGN (8);
|
||||
_etext = .;
|
||||
} > ram
|
||||
|
||||
.data : ALIGN (8)
|
||||
{
|
||||
*(.shdata)
|
||||
*(.data .data.* .gnu.linkonce.d.*)
|
||||
. = ALIGN(8);
|
||||
_gp = ABSOLUTE(. + 0x8000);
|
||||
*(.got.plt) *(.got)
|
||||
*(.lit8)
|
||||
*(.lit4)
|
||||
*(.sdata .sdata.* .gnu.linkonce.s.*)
|
||||
. = ALIGN (8);
|
||||
*(.ram)
|
||||
. = ALIGN (8);
|
||||
_edata = .;
|
||||
} > ram
|
||||
.bss : ALIGN (8)
|
||||
{
|
||||
__bss_start = ABSOLUTE(.);
|
||||
*(.sbss .sbss.* .gnu.linkonce.sb.*)
|
||||
*(.scommon)
|
||||
*(.bss .bss.* .gnu.linkonce.b.*)
|
||||
*(COMMON)
|
||||
. = ALIGN (8);
|
||||
__bss_end = ABSOLUTE(.);
|
||||
_end = .;
|
||||
__end = .;
|
||||
} > ram
|
||||
|
||||
.stab 0 (NOLOAD) : { *(.stab) }
|
||||
.stabstr 0 (NOLOAD) : { *(.stabstr) }
|
||||
/* 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) }
|
||||
/* DWARF 2.1 */
|
||||
.debug_ranges 0 : { *(.debug_ranges) }
|
||||
/* 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) }
|
||||
|
||||
.debug_alt_sim_info 0 : { *(.debug_alt_sim_info) }
|
||||
}
|
Reference in New Issue
Block a user