Guest User

linker_example

a guest
Nov 29th, 2025
13
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.51 KB | None | 0 0
  1. STACK_SIZE = 32K;
  2. RAM_BOOT_OFFSET = 0x00100000;
  3. RAM_ENTRY_OFFSET = 0x80400000;
  4.  
  5. MEMORY {
  6.     ROM  (rx)  : ORIGIN = 0xFFFC0000, LENGTH = 256K
  7.     RAM  (rwx) : ORIGIN = 0x80000000, LENGTH = 64M /* Paged virtual RAM */
  8.     RAMP (rwx) : ORIGIN = 0x00000000, LENGTH = 64M /* Physical RAM for boot code */
  9. }
  10.  
  11. SECTIONS {
  12.     .rom_header : {
  13.         KEEP(*(.rom_header))
  14.     } > ROM
  15.  
  16.     .boot_code (RAM_BOOT_OFFSET) : ALIGN(16) {
  17.         KEEP(*(.boot_code));
  18.         . = ALIGN(4);
  19.     } > RAMP AT> ROM
  20.  
  21.     .boot_bss (NOLOAD) : ALIGN(16) {
  22.         __boot_bss_start = .;
  23.         KEEP(*(.boot_bss));
  24.         __boot_bss_end = .;
  25.         . = ALIGN(4);
  26.     } > RAMP
  27.  
  28.     .boot_stack (NOLOAD) : ALIGN(16) {
  29.         __boot_stack_end = .;
  30.         . += STACK_SIZE;
  31.         . = ALIGN(16);
  32.         __boot_stack = .;
  33.     } > RAMP
  34.  
  35.     .kernel : ALIGN(16) {
  36.         KEEP(*(.kernel))
  37.     } > ROM
  38.  
  39.     .text (RAM_ENTRY_OFFSET) : ALIGN(16) {
  40.         *(.text)
  41.         *(.text.*)
  42.         . = ALIGN(4);
  43.     } > RAM AT> ROM
  44.  
  45.     .data : ALIGN(16) {
  46.         *(.data)
  47.         *(.data.*)
  48.         . = ALIGN(4);
  49.     } > RAM AT> ROM
  50.  
  51.     .rodata : ALIGN(16) {
  52.         *(.rdata)
  53.         *(.rdata.*)
  54.         *(.rodata)
  55.         *(.rodata.*)
  56.         . = ALIGN(4);
  57.     } > RAM AT> ROM
  58.  
  59.     .bss (NOLOAD) : ALIGN(16) {
  60.         __bss_start = .;
  61.         *(.bss)
  62.         *(.bss.*)
  63.         __bss_end = .;
  64.         . = ALIGN(4);
  65.     }
  66.  
  67.     .stack (NOLOAD) : ALIGN(16) {
  68.         __stack_end = .;
  69.         . += STACK_SIZE;
  70.         . = ALIGN(16);
  71.         __stack = .;
  72.     }
  73.  
  74.     .heap (NOLOAD) : ALIGN(16) {
  75.         __heap_start = .;
  76.         . += 1M;
  77.         __heap_end = .;
  78.     }
  79.  
  80.     /DISCARD/ : {
  81.         *(.comment)
  82.         *(.note*)
  83.         *(.eh_frame*)
  84.     }
  85.  
  86.     __boot_code_vma = ADDR(.boot_code);
  87.     __boot_code_lma = LOADADDR(.boot_code);
  88.     __boot_code_size = SIZEOF(.boot_code);
  89.  
  90.     __text_vma = ADDR(.text);
  91.     __text_lma = LOADADDR(.text);
  92.     __text_size = SIZEOF(.text);
  93.  
  94.     __rodata_vma = ADDR(.rodata);
  95.     __rodata_lma = LOADADDR(.rodata);
  96.     __rodata_size = SIZEOF(.rodata);
  97.  
  98.     __data_vma = ADDR(.data);
  99.     __data_lma = LOADADDR(.data);
  100.     __data_size = SIZEOF(.data);
  101.  
  102.     __bss_dsize = SIZEOF(.bss) / 4;
  103.     __boot_bss_dsize = SIZEOF(.boot_bss) / 4;
  104. }
Add Comment
Please, Sign In to add comment