Subversion Repositories HomeAutomation

Rev

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

Rev 362 Rev 910
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
    __bootloader_start = . ;
118
    __bootloader_start = . ;
119
    *(.bootloader)
119
    *(.bootloader)
120
    . = 0x2000 - __boot_start - 0x80; /* Locate code for BIOS update in the last two pages of flash */
120
    . = 0x2000 - __boot_start - 0x80; /* Locate code for BIOS update in the last two pages of flash */
121
    __flash_code_start = . ;
121
    __flash_code_start = . ;
122
    *(.flash_code)
122
    *(.flash_code)
123
    __bootloader_end = . ;
123
    __bootloader_end = . ;
124
  }  > text
124
  }  > text
125
  .data	 : AT (ADDR (.text) + SIZEOF (.text))
125
  .data	 : AT (ADDR (.text) + SIZEOF (.text))
126
  {
126
  {
127
     PROVIDE (__data_start = .) ;
127
     PROVIDE (__data_start = .) ;
128
    *(.data)
128
    *(.data)
129
    *(.gnu.linkonce.d*)
129
    *(.gnu.linkonce.d*)
130
    . = ALIGN(2);
130
    . = ALIGN(2);
131
     _edata = . ;
131
     _edata = . ;
132
     PROVIDE (__data_end = .) ;
132
     PROVIDE (__data_end = .) ;
133
  }  > data
133
  }  > data
134
  .bss  SIZEOF(.data) + ADDR(.data) :
134
  .bss  SIZEOF(.data) + ADDR(.data) : AT (ADDR (.bss))
135
  {
135
  {
136
     PROVIDE (__bss_start = .) ;
136
     PROVIDE (__bss_start = .) ;
137
    *(.bss)
137
    *(.bss)
138
    *(COMMON)
138
    *(COMMON)
139
     PROVIDE (__bss_end = .) ;
139
     PROVIDE (__bss_end = .) ;
140
  }  > data
140
  }  > data
141
   __data_load_start = LOADADDR(.data);
141
   __data_load_start = LOADADDR(.data);
142
   __data_load_end = __data_load_start + SIZEOF(.data);
142
   __data_load_end = __data_load_start + SIZEOF(.data);
143
   /* Little trick to set __bios_optimal_start to the highest address that
143
   /* Little trick to set __bios_optimal_start to the highest address that
144
      __bios_start can be set to without overlapping .text and .bootloader,
144
      __bios_start can be set to without overlapping .text and .bootloader,
145
      while keeping it aligned to a page boundary. */
145
      while keeping it aligned to a page boundary. */
146
   __temp = . ;
146
   __temp = . ;
147
   . = __boot_start - (__data_load_end - __bios_start) - 0x3f;
147
   . = __boot_start - (__data_load_end - __bios_start) - 0x3f;
148
   __bios_optimal_start = ALIGN(0x40);
148
   __bios_optimal_start = ALIGN(0x40);
149
   . = __temp ;
149
   . = __temp ;
150
   __bios_size = 0x2000 - __bios_start;
150
   __bios_size = 0x2000 - __bios_start;
151
  /* Global data not cleared after reset.  */
151
  /* Global data not cleared after reset.  */
152
  .noinit  SIZEOF(.bss) + ADDR(.bss) :
152
  .noinit  SIZEOF(.bss) + ADDR(.bss) :
153
  {
153
  {
154
     PROVIDE (__noinit_start = .) ;
154
     PROVIDE (__noinit_start = .) ;
155
    *(.noinit*)
155
    *(.noinit*)
156
     PROVIDE (__noinit_end = .) ;
156
     PROVIDE (__noinit_end = .) ;
157
     _end = . ;
157
     _end = . ;
158
     PROVIDE (__bios_ram_end = .) ;
158
     PROVIDE (__bios_ram_end = .) ;
159
  }  > data
159
  }  > data
160
  .eeprom  :
160
  .eeprom  :
161
  {
161
  {
162
    *(.eeprom*)
162
    *(.eeprom*)
163
     __eeprom_end = . ;
163
     __eeprom_end = . ;
164
  }  > eeprom
164
  }  > eeprom
165
  /* Stabs debugging sections.  */
165
  /* Stabs debugging sections.  */
166
  .stab 0 : { *(.stab) }
166
  .stab 0 : { *(.stab) }
167
  .stabstr 0 : { *(.stabstr) }
167
  .stabstr 0 : { *(.stabstr) }
168
  .stab.excl 0 : { *(.stab.excl) }
168
  .stab.excl 0 : { *(.stab.excl) }
169
  .stab.exclstr 0 : { *(.stab.exclstr) }
169
  .stab.exclstr 0 : { *(.stab.exclstr) }
170
  .stab.index 0 : { *(.stab.index) }
170
  .stab.index 0 : { *(.stab.index) }
171
  .stab.indexstr 0 : { *(.stab.indexstr) }
171
  .stab.indexstr 0 : { *(.stab.indexstr) }
172
  .comment 0 : { *(.comment) }
172
  .comment 0 : { *(.comment) }
173
  /* DWARF debug sections.
173
  /* DWARF debug sections.
174
     Symbols in the DWARF debugging sections are relative to the beginning
174
     Symbols in the DWARF debugging sections are relative to the beginning
175
     of the section so we begin them at 0.  */
175
     of the section so we begin them at 0.  */
176
  /* DWARF 1 */
176
  /* DWARF 1 */
177
  .debug          0 : { *(.debug) }
177
  .debug          0 : { *(.debug) }
178
  .line           0 : { *(.line) }
178
  .line           0 : { *(.line) }
179
  /* GNU DWARF 1 extensions */
179
  /* GNU DWARF 1 extensions */
180
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
180
  .debug_srcinfo  0 : { *(.debug_srcinfo) }
181
  .debug_sfnames  0 : { *(.debug_sfnames) }
181
  .debug_sfnames  0 : { *(.debug_sfnames) }
182
  /* DWARF 1.1 and DWARF 2 */
182
  /* DWARF 1.1 and DWARF 2 */
183
  .debug_aranges  0 : { *(.debug_aranges) }
183
  .debug_aranges  0 : { *(.debug_aranges) }
184
  .debug_pubnames 0 : { *(.debug_pubnames) }
184
  .debug_pubnames 0 : { *(.debug_pubnames) }
185
  /* DWARF 2 */
185
  /* DWARF 2 */
186
  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
186
  .debug_info     0 : { *(.debug_info) *(.gnu.linkonce.wi.*) }
187
  .debug_abbrev   0 : { *(.debug_abbrev) }
187
  .debug_abbrev   0 : { *(.debug_abbrev) }
188
  .debug_line     0 : { *(.debug_line) }
188
  .debug_line     0 : { *(.debug_line) }
189
  .debug_frame    0 : { *(.debug_frame) }
189
  .debug_frame    0 : { *(.debug_frame) }
190
  .debug_str      0 : { *(.debug_str) }
190
  .debug_str      0 : { *(.debug_str) }
191
  .debug_loc      0 : { *(.debug_loc) }
191
  .debug_loc      0 : { *(.debug_loc) }
192
  .debug_macinfo  0 : { *(.debug_macinfo) }
192
  .debug_macinfo  0 : { *(.debug_macinfo) }
193
}
193
}