aboutsummaryrefslogtreecommitdiff
path: root/linker/linker_script.ld
blob: f2a99aeedd169714364deb3d4140ef3d23b3253a (plain) (blame)
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
MEMORY
{
  flash : org = 0x08000000, len = 256k
  sram1 : org = 0x20000000, len = 48k
  sram2 : org = 0x10000000, len = 16k
}

SECTIONS
{
  /* This is where the code goes. */
  . = ORIGIN(flash);
  .text : {
    *(.vectors); /* All .vector sections go here. */
    *(.text);    /* All .text sections go here. */
  } >flash

  .data : {
    /* Data segment as defined in the flash. */
    INIT_DATA_VALUES = LOADADDR(.data);

    /* Data segment where it will be in memory. */
    DATA_SEGMENT_START = .;
    *(.data);
    DATA_SEGMENT_STOP = .;

    INIT_ROUTINES_FLASH_START =
       LOADADDR(.data) + (DATA_SEGMENT_STOP - DATA_SEGMENT_START);

    INITS_START = .;
    *(.init0);
    INIT_0_END = LOADADDR(.data) + (. - INITS_START);
    *(.init1);
    INIT_1_END = LOADADDR(.data) + (. - INITS_START);
    *(.init2);
    INIT_2_END = LOADADDR(.data) + (. - INITS_START);
    *(.init3);
    INIT_3_END = LOADADDR(.data) + (. - INITS_START);
    *(.init4);
    INIT_4_END = LOADADDR(.data) + (. - INITS_START);
    *(.init5);
    INIT_5_END = LOADADDR(.data) + (. - INITS_START);
    *(.init6);
    INIT_6_END = LOADADDR(.data) + (. - INITS_START);
    *(.init7);
    INIT_7_END = LOADADDR(.data) + (. - INITS_START);
    INITS_END = .;

    INIT_ROUTINES_FLASH_STOP =
       LOADADDR(.data) + (INITS_END - DATA_SEGMENT_START);

    /* Align by 4 so we can optimize the copier to use uint32's. */
    . = ALIGN(0x04);

    *(.noinit);

  } >sram1 AT>flash

  BSS_START = .;
  .bss : {
    *(.bss);
    . = ALIGN(0x04);
  } > sram1
  BSS_END = .;

  HEAP_START = .;
  HEAP_STOP = ORIGIN(sram1) + LENGTH(sram1);
}