Subversion Repositories HomeAutomation

Rev

Rev 283 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 283 Rev 299
1
/* Default linker script, for normal executables */
1
/* Default linker script, for normal executables */
2
OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
2
OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr")
3
OUTPUT_ARCH(avr:4)
3
OUTPUT_ARCH(avr:4)
4
MEMORY
4
MEMORY
5
{
5
{
6
  text   (rx)   : ORIGIN = 0x0, LENGTH = 8K
6
  text   (rx)   : ORIGIN = 0x0, LENGTH = 8K
7
  data   (rw!x) : ORIGIN = 0x800060, LENGTH = 1K
7
  data   (rw!x) : ORIGIN = 0x800060, LENGTH = 1K
8
  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 512
8
  eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 512
9
}
9
}
10
SECTIONS
10
SECTIONS
11
{
11
{
12
  /* Read-only sections, merged into text segment: */
12
  /* Read-only sections, merged into text segment: */
13
  .hash          : { *(.hash)		}
13
  .hash          : { *(.hash)		}
14
  .dynsym        : { *(.dynsym)		}
14
  .dynsym        : { *(.dynsym)		}
15
  .dynstr        : { *(.dynstr)		}
15
  .dynstr        : { *(.dynstr)		}
16
  .gnu.version   : { *(.gnu.version)	}
16
  .gnu.version   : { *(.gnu.version)	}
17
  .gnu.version_d   : { *(.gnu.version_d)	}
17
  .gnu.version_d   : { *(.gnu.version_d)	}
18
  .gnu.version_r   : { *(.gnu.version_r)	}
18
  .gnu.version_r   : { *(.gnu.version_r)	}
19
  .rel.init      : { *(.rel.init)		}
19
  .rel.init      : { *(.rel.init)		}
20
  .rela.init     : { *(.rela.init)	}
20
  .rela.init     : { *(.rela.init)	}
21
  .rel.text      :
21
  .rel.text      :
22
    {
22
    {
23
      *(.rel.text)
23
      *(.rel.text)
24
      *(.rel.text.*)
24
      *(.rel.text.*)
25
      *(.rel.gnu.linkonce.t*)
25
      *(.rel.gnu.linkonce.t*)
26
    }
26
    }
27
  .rela.text     :
27
  .rela.text     :
28
    {
28
    {
29
      *(.rela.text)
29
      *(.rela.text)
30
      *(.rela.text.*)
30
      *(.rela.text.*)
31
      *(.rela.gnu.linkonce.t*)
31
      *(.rela.gnu.linkonce.t*)
32
    }
32
    }
33
  .rel.fini      : { *(.rel.fini)		}
33
  .rel.fini      : { *(.rel.fini)		}
34
  .rela.fini     : { *(.rela.fini)	}
34
  .rela.fini     : { *(.rela.fini)	}
35
  .rel.rodata    :
35
  .rel.rodata    :
36
    {
36
    {
37
      *(.rel.rodata)
37
      *(.rel.rodata)
38
      *(.rel.rodata.*)
38
      *(.rel.rodata.*)
39
      *(.rel.gnu.linkonce.r*)
39
      *(.rel.gnu.linkonce.r*)
40
    }
40
    }
41
  .rela.rodata   :
41
  .rela.rodata   :
42
    {
42
    {
43
      *(.rela.rodata)
43
      *(.rela.rodata)
44
      *(.rela.rodata.*)
44
      *(.rela.rodata.*)
45
      *(.rela.gnu.linkonce.r*)
45
      *(.rela.gnu.linkonce.r*)
46
    }
46
    }
47
  .rel.data      :
47
  .rel.data      :
48
    {
48
    {
49
      *(.rel.data)
49
      *(.rel.data)
50
      *(.rel.data.*)
50
      *(.rel.data.*)
51
      *(.rel.gnu.linkonce.d*)
51
      *(.rel.gnu.linkonce.d*)
52
    }
52
    }
53
  .rela.data     :
53
  .rela.data     :
54
    {
54
    {
55
      *(.rela.data)
55
      *(.rela.data)
56
      *(.rela.data.*)
56
      *(.rela.data.*)
57
      *(.rela.gnu.linkonce.d*)
57
      *(.rela.gnu.linkonce.d*)
58
    }
58
    }
59
  .rel.ctors     : { *(.rel.ctors)	}
59
  .rel.ctors     : { *(.rel.ctors)	}
60
  .rela.ctors    : { *(.rela.ctors)	}
60
  .rela.ctors    : { *(.rela.ctors)	}
61
  .rel.dtors     : { *(.rel.dtors)	}
61
  .rel.dtors     : { *(.rel.dtors)	}
62
  .rela.dtors    : { *(.rela.dtors)	}
62
  .rela.dtors    : { *(.rela.dtors)	}
63
  .rel.got       : { *(.rel.got)		}
63
  .rel.got       : { *(.rel.got)		}
64
  .rela.got      : { *(.rela.got)		}
64
  .rela.got      : { *(.rela.got)		}
65
  .rel.bss       : { *(.rel.bss)		}
65
  .rel.bss       : { *(.rel.bss)		}
66
  .rela.bss      : { *(.rela.bss)		}
66
  .rela.bss      : { *(.rela.bss)		}
67
  .rel.plt       : { *(.rel.plt)		}
67
  .rel.plt       : { *(.rel.plt)		}
68
  .rela.plt      : { *(.rela.plt)		}
68
  .rela.plt      : { *(.rela.plt)		}
69
  /* Internal text space or external memory */
69
  /* Internal text space or external memory */
70
  /DISCARD/ :
70
  /DISCARD/ :
71
  {
71
  {
72
    *(.vectors)
72
    *(.vectors)
73
  }
73
  }
74
  .app_vectors 0x0 :
74
  .app_vectors 0x0 :
75
  {
75
  {
76
    *(.app_vectors)
76
    *(.app_vectors)
77
  }
77
  }
78
  .text __bios_start :
78
  .text __bios_start :
79
  {
79
  {
80
    __ctors_start = . ;
80
    __ctors_start = . ;
81
    *(.ctors)
81
    *(.ctors)
82
    __ctors_end = . ;
82
    __ctors_end = . ;
83
    __dtors_start = . ;
83
    __dtors_start = . ;
84
    *(.dtors)
84
    *(.dtors)
85
    __dtors_end = . ;
85
    __dtors_end = . ;
86
    *(.progmem.gcc*)
86
    *(.progmem.gcc*)
87
    *(.progmem*)
87
    *(.progmem*)
88
    . = ALIGN(2);
88
    . = ALIGN(2);
89
    *(.init0)  /* Start here after reset.  */
89
    *(.init0)  /* Start here after reset.  */
90
    *(.init1)
90
    *(.init1)
91
    *(.init2)  /* Clear __zero_reg__, set up stack pointer.  */
91
    *(.init2)  /* Clear __zero_reg__, set up stack pointer.  */
92
    *(.init3)
92
    *(.init3)
93
    *(.init4)  /* Initialize data and BSS.  */
93
    *(.init4)  /* Initialize data and BSS.  */
94
    *(.init5)
94
    *(.init5)
95
    *(.init6)  /* C++ constructors.  */
95
    *(.init6)  /* C++ constructors.  */
96
    *(.init7)
96
    *(.init7)
97
    *(.init8)
97
    *(.init8)
98
    *(.init9)  /* Call main().  */
98
    *(.init9)  /* Call main().  */
99
    *(.text)
99
    *(.text)
100
    . = ALIGN(2);
100
    . = ALIGN(2);
101
    *(.text.*)
101
    *(.text.*)
102
    . = ALIGN(2);
102
    . = ALIGN(2);
103
    *(.fini9)  /* _exit() starts here.  */
103
    *(.fini9)  /* _exit() starts here.  */
104
    *(.fini8)
104
    *(.fini8)
105
    *(.fini7)
105
    *(.fini7)
106
    *(.fini6)  /* C++ destructors.  */
106
    *(.fini6)  /* C++ destructors.  */
107
    *(.fini5)
107
    *(.fini5)
108
    *(.fini4)
108
    *(.fini4)
109
    *(.fini3)
109
    *(.fini3)
110
    *(.fini2)
110
    *(.fini2)
111
    *(.fini1)
111
    *(.fini1)
112
    *(.fini0)  /* Infinite loop after program termination.  */
112
    *(.fini0)  /* Infinite loop after program termination.  */
113
     _etext = . ;
113
     _etext = . ;
114
  }  > text
114
  }  > text
115
  .bootloader __boot_start :
115
  .bootloader __boot_start :
116
  {
116
  {
117
    *(.boot_vectors)
117
    *(.boot_vectors)
118
    . = ALIGN(64); /* To locate the bootloader code in a different flash page than the vectors. */
-
 
119
    __bootloader_start = . ;
118
    __bootloader_start = . ;
120
    *(.bootloader)
119
    *(.bootloader)
121
    __bootloader_end = . ;
120
    __bootloader_end = . ;
-
 
121
  }  > text
-
 
122
  .flash_code 0x1f80 : /* Locate code for BIOS update in the last two pages of flash */
-
 
123
  {
-
 
124
    __flash_code_start = . ;
-
 
125
    *(.flash_code)
122
  }  > text
126
  }  > text
123
  .data	 : AT (ADDR (.text) + SIZEOF (.text))
127
  .data	 : AT (ADDR (.text) + SIZEOF (.text))
124
  {
128
  {
125
     PROVIDE (__data_start = .) ;
129
     PROVIDE (__data_start = .) ;
126
    *(.bios_interface)
130
    *(.bios_interface)
127
    *(.data)
131
    *(.data)
128
    *(.gnu.linkonce.d*)
132
    *(.gnu.linkonce.d*)
129
    . = ALIGN(2);
133
    . = ALIGN(2);
130
     _edata = . ;
134
     _edata = . ;
131
     PROVIDE (__data_end = .) ;
135
     PROVIDE (__data_end = .) ;
132
  }  > data
136
  }  > data
133
  .bss  SIZEOF(.data) + ADDR(.data) :
137
  .bss  SIZEOF(.data) + ADDR(.data) :
134
  {
138
  {
135
     PROVIDE (__bss_start = .) ;
139
     PROVIDE (__bss_start = .) ;
136
    *(.bss)
140
    *(.bss)
137
    *(COMMON)
141
    *(COMMON)
138
     PROVIDE (__bss_end = .) ;
142
     PROVIDE (__bss_end = .) ;
139
  }  > data
143
  }  > data
140
   __data_load_start = LOADADDR(.data);
144
   __data_load_start = LOADADDR(.data);
141
   __data_load_end = __data_load_start + SIZEOF(.data);
145
   __data_load_end = __data_load_start + SIZEOF(.data);
142
  /* Global data not cleared after reset.  */
146
  /* Global data not cleared after reset.  */
143
  .noinit  SIZEOF(.bss) + ADDR(.bss) :
147
  .noinit  SIZEOF(.bss) + ADDR(.bss) :
144
  {
148
  {
145
     PROVIDE (__noinit_start = .) ;
149
     PROVIDE (__noinit_start = .) ;
146
    *(.noinit*)
150
    *(.noinit*)
147
     PROVIDE (__noinit_end = .) ;
151
     PROVIDE (__noinit_end = .) ;
148
     _end = . ;
152
     _end = . ;
149
     PROVIDE (__bios_ram_end = .) ;
153
     PROVIDE (__bios_ram_end = .) ;
150
  }  > data
154
  }  > data
151
  .eeprom  :
155
  .eeprom  :
152
  {
156
  {
153
    *(.eeprom*)
157
    *(.eeprom*)
154
     __eeprom_end = . ;
158
     __eeprom_end = . ;
155
  }  > eeprom
159
  }  > eeprom
156
  /* Stabs debugging sections.  */
160
  /* Stabs debugging sections.  */
157
  .stab 0 : { *(.stab) }
161
  .stab 0 : { *(.stab) }
158
  .stabstr 0 : { *(.stabstr) }
162
  .stabstr 0 : { *(.stabstr) }
159
  .stab.excl 0 : { *(.stab.excl) }
163
  .stab.excl 0 : { *(.stab.excl) }
160
  .stab.exclstr 0 : { *(.stab.exclstr) }
164
  .stab.exclstr 0 : { *(.stab.exclstr) }
161
  .stab.index 0 : { *(.stab.index) }
165
  .stab.index 0 : { *(.stab.index) }
162
  .stab.indexstr 0 : { *(.stab.indexstr) }
166
  .stab.indexstr 0 : { *(.stab.indexstr) }
163
  .comment 0 : { *(.comment) }
167
  .comment 0 : { *(.comment) }
164
  /* DWARF debug sections.
168
  /* DWARF debug sections.
165
     Symbols in the DWARF debugging sections are relative to the beginning
169
     Symbols in the DWARF debugging sections are relative to the beginning
166
     of the section so we begin them at 0.  */
170
     of the section so we begin them at 0.  */
167
  /* DWARF 1 */
171
  /* DWARF 1 */
168
  .debug          0 : { *(.debug) }
172
  .debug          0 : { *(.debug) }
169
  .line           0 : { *(.line) }
173
  .line           0 : { *(.line) }
170
  /* GNU DWARF 1 extensions */
174
  /* GNU DWARF 1 extensions */
171
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
175
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
172
  .debug_sfnames  0 : { *(.debug_sfnames) }
176
  .debug_sfnames  0 : { *(.debug_sfnames) }
173
  /* DWARF 1.1 and DWARF 2 */
177
  /* DWARF 1.1 and DWARF 2 */
174
  .debug_aranges  0 : { *(.debug_aranges) }
178
  .debug_aranges  0 : { *(.debug_aranges) }
175
  .debug_pubnames 0 : { *(.debug_pubnames) }
179
  .debug_pubnames 0 : { *(.debug_pubnames) }
176
  /* DWARF 2 */
180
  /* DWARF 2 */
177
  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
181
  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
178
  .debug_abbrev   0 : { *(.debug_abbrev) }
182
  .debug_abbrev   0 : { *(.debug_abbrev) }
179
  .debug_line     0 : { *(.debug_line) }
183
  .debug_line     0 : { *(.debug_line) }
180
  .debug_frame    0 : { *(.debug_frame) }
184
  .debug_frame    0 : { *(.debug_frame) }
181
  .debug_str      0 : { *(.debug_str) }
185
  .debug_str      0 : { *(.debug_str) }
182
  .debug_loc      0 : { *(.debug_loc) }
186
  .debug_loc      0 : { *(.debug_loc) }
183
  .debug_macinfo  0 : { *(.debug_macinfo) }
187
  .debug_macinfo  0 : { *(.debug_macinfo) }
184
}
188
}