aboutsummaryrefslogtreecommitdiff
path: root/prog/link.ld
blob: 5c9926c1148cd67f1a850ae29908ee4f0086f258 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
MEMORY
{
  ROM (rx)  : ORIGIN = 0x00010000, LENGTH = 4K /* (1024 words, 0x0001_0000 to 0x0001_FFFF) */
  RAM (rwx) : ORIGIN = 0x00100000, LENGTH = 4K /* (1024 words, 0x0010_0000 to 0x0010_FFFF) */
}

ENTRY(_start)

SECTIONS
{
  .text :
  {
    _stext = .;
    . = ORIGIN(ROM);
    _start = .;                /* entry point address */
    *(.text.startup)
    *(.text)                   /* .text sections (code) */
    *(.text.*)
    . = ALIGN(4);
    _etext = .;                /* end of code section */
  } > ROM

  .rodata :
  {
    *(.rodata)                 /* Read-only data */
    *(.rodata.*)
  } > ROM

  .data : 
  {
    _sidata = LOADADDR(.data); /* start address of .data section in ROM */
    . = ALIGN(4);
    _sdata = .;                /* start of .data section in RAM */
    *(.data)                   /* .data sections (initialized data) */
    *(.data.*)
    *(.sdata)                  /* .sdata sections (small initialized data) */
    *(.sdata.*)
    . = ALIGN(4);
    _edata = .;                /* end of .data section in RAM */
  } > RAM AT > ROM

  .bss :
  {
    . = ALIGN(4);
    _sbss = .;                 /* start of .bss section */
    *(.bss)                    /* .bss sections (zero-initialized data) */
    *(.bss.*)
    *(.sbss)                   /* .sbss sections (small zero-initialized data) */
    *(.sbss.*)
    *(COMMON)
    . = ALIGN(4);
    _ebss = .;                 /* end of .bss section */
  } > RAM

  .heap (NOLOAD) :
  {
    . = ALIGN(4);
    _sheap = .;                /* start of heap */
    . = . + 1K;                /* size of heap */
    _eheap = .;                /* end of heap */
    . = ALIGN(4);
  } > RAM

  .stack (NOLOAD) :
  {
    . = ALIGN(4);
    _sstack = .;              /* start of stack */
    . = . + 1K;               /* size of stack */
    _estack = .;              /* end of stack */
    . = ALIGN(4);
  } > RAM

  /DISCARD/ : 
  {
    *(.comment)
    *(.note)
    *(.note.*)
  }
}