mirror of
				https://github.com/Atmosphere-NX/Atmosphere.git
				synced 2025-10-25 09:45:47 +02:00 
			
		
		
		
	
		
			
				
	
	
		
			169 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			4.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| OUTPUT_FORMAT("elf32-littlearm", "elf32-bigarm", "elf32-littlearm")
 | |
| OUTPUT_ARCH(arm)
 | |
| ENTRY(_start)
 | |
| 
 | |
| PHDRS
 | |
| {
 | |
|     crt0        PT_LOAD;
 | |
|     main        PT_LOAD;
 | |
| }
 | |
| 
 | |
| /* Mostly copied from https://github.com/devkitPro/buildscripts/blob/master/dkarm-eabi/crtls/3dsx.ld */
 | |
| MEMORY
 | |
| {
 | |
|     NULL        : ORIGIN = 0x00000000, LENGTH = 0x1000
 | |
|     main        : ORIGIN = 0x40010040, LENGTH = 0x1000
 | |
|     high_iram   : ORIGIN = 0x4003F000, LENGTH = 0x1000
 | |
|     low_iram    : ORIGIN = 0x40003000, LENGTH = 0x8000
 | |
| }
 | |
| 
 | |
| SECTIONS
 | |
| {
 | |
|     PROVIDE(__crt0_start__      = 0x4003F000);
 | |
|     PROVIDE(__main_start__      = 0x40010040);
 | |
|     PROVIDE(__stack_top__       = 0x40010000);
 | |
|     PROVIDE(__stack_bottom__    = 0x4000C000);
 | |
|     PROVIDE(__heap_start__      = 0);
 | |
|     PROVIDE(__heap_end__        = 0);
 | |
|     
 | |
|     . = __crt0_start__;
 | |
| 
 | |
|     .crt0 :
 | |
|     {
 | |
|         KEEP( *(.text.start) )
 | |
|         KEEP( *(.text.ipatch_word) )
 | |
|         KEEP( *(.init) )
 | |
|         . = ALIGN(32);
 | |
|     } >high_iram AT>high_iram :crt0
 | |
|     
 | |
|     __main_phys_start__ = ABSOLUTE(.) ;
 | |
|     
 | |
|     .text :
 | |
|     {
 | |
|         /* .text */
 | |
|         KEEP( *(.text.jump_to_main) )
 | |
|         *(.text)
 | |
|         *(.text.*)
 | |
|         *(.glue_7)
 | |
|         *(.glue_7t)
 | |
|         *(.stub)
 | |
|         *(.gnu.warning)
 | |
|         *(.gnu.linkonce.t*)
 | |
| 
 | |
|         /* .fini */
 | |
|         KEEP( *(.fini) )
 | |
|         . = ALIGN(8);
 | |
|     } >main  AT>high_iram :main
 | |
| 
 | |
|     .rodata :
 | |
|     {
 | |
|         *(.rodata)
 | |
|         *(.roda)
 | |
|         *(.rodata.*)
 | |
|         *all.rodata*(*)
 | |
|         *(.gnu.linkonce.r*)
 | |
|         SORT(CONSTRUCTORS)
 | |
|         . = ALIGN(8);
 | |
|     } >main AT>high_iram 
 | |
| 
 | |
|     .preinit_array :
 | |
|     {
 | |
|         PROVIDE (__preinit_array_start = .);
 | |
|         KEEP (*(.preinit_array))
 | |
|         PROVIDE (__preinit_array_end = .);
 | |
|     } >main AT>high_iram 
 | |
| 
 | |
|     .init_array ALIGN(4) :
 | |
|     {
 | |
|         PROVIDE (__init_array_start = .);
 | |
|         KEEP (*(SORT(.init_array.*)))
 | |
|         KEEP (*(.init_array))
 | |
|         PROVIDE (__init_array_end = .);
 | |
|     } >main AT>high_iram 
 | |
| 
 | |
|     .fini_array ALIGN(4) :
 | |
|     {
 | |
|         PROVIDE (__fini_array_start = .);
 | |
|         KEEP (*(.fini_array))
 | |
|         KEEP (*(SORT(.fini_array.*)))
 | |
|         PROVIDE (__fini_array_end = .);
 | |
|     } >main AT>high_iram 
 | |
| 
 | |
|     .ctors ALIGN(4) :
 | |
|     {
 | |
|         KEEP (*crtbegin.o(.ctors)) /* MUST be first -- GCC requires it */
 | |
|         KEEP (*(EXCLUDE_FILE (*crtend.o) .ctors))
 | |
|         KEEP (*(SORT(.ctors.*)))
 | |
|         KEEP (*(.ctors))
 | |
|         . = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
 | |
|     } >main AT>high_iram 
 | |
| 
 | |
|     .dtors ALIGN(4) :
 | |
|     {
 | |
|         KEEP (*crtbegin.o(.dtors))
 | |
|         KEEP (*(EXCLUDE_FILE (*crtend.o) .dtors))
 | |
|         KEEP (*(SORT(.dtors.*)))
 | |
|         KEEP (*(.dtors))
 | |
|         . = ALIGN(4);   /* REQUIRED. LD is flaky without it. */
 | |
|     } >main AT>high_iram 
 | |
| 
 | |
|     .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) __exidx_start = ABSOLUTE(.);} >main AT>high_iram 
 | |
|     ARM.exidx : { *(.ARM.exidx* .gnu.linkonce.armexidx.*)  __exidx_end = ABSOLUTE(.);} >main AT>high_iram 
 | |
| 
 | |
|     .bss (NOLOAD) :
 | |
|     {
 | |
|         . = ALIGN(32);
 | |
|         PROVIDE (__bss_start__ = ABSOLUTE(.));
 | |
|         *(.dynbss)
 | |
|         *(.bss)
 | |
|         *(.bss.*)
 | |
|         *(.gnu.linkonce.b*)
 | |
|         *(COMMON)
 | |
|         . = ALIGN(32);
 | |
|         PROVIDE (__bss_end__ = ABSOLUTE(.));
 | |
|     } >main AT>high_iram :NONE
 | |
|     __main_end__ = ABSOLUTE(.) ;
 | |
|     
 | |
|     PROVIDE(__main_size__    = (__main_end__ - __main_start__));
 | |
| 
 | |
|     /* ==================
 | |
|        ==== Metadata ====
 | |
|        ================== */
 | |
| 
 | |
|     /* Discard sections that difficult post-processing */
 | |
|     /DISCARD/ : { *(.group .comment .note) }
 | |
| 
 | |
|     /* 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) }
 | |
| 
 | |
|     /* 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) }
 | |
|     .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) }
 | |
| }
 |