211 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
| /* 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) }
 | |
| }
 |