|
|
@ -1,14 +1,19 @@ |
|
|
|
/* Default linker script, for normal executables */ |
|
|
|
/* Copyright (C) 2014-2016 Free Software Foundation, Inc. |
|
|
|
Copying and distribution of this script, with or without modification, |
|
|
|
are permitted in any medium without royalty provided the copyright |
|
|
|
notice and this notice are preserved. */ |
|
|
|
OUTPUT_FORMAT("elf32-avr","elf32-avr","elf32-avr") |
|
|
|
OUTPUT_ARCH(avr:6) |
|
|
|
MEMORY |
|
|
|
{ |
|
|
|
text (rx) : ORIGIN = 0, LENGTH = 1024K |
|
|
|
data (rw!x) : ORIGIN = 0x800200, LENGTH = 0xfe00 |
|
|
|
eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K |
|
|
|
text (rx) : ORIGIN = 0, LENGTH = 1024K |
|
|
|
data (rw!x) : ORIGIN = 0x800200, LENGTH = 0xfe00 |
|
|
|
eeprom (rw!x) : ORIGIN = 0x810000, LENGTH = 64K |
|
|
|
fuse (rw!x) : ORIGIN = 0x820000, LENGTH = 1K |
|
|
|
lock (rw!x) : ORIGIN = 0x830000, LENGTH = 1K |
|
|
|
signature (rw!x) : ORIGIN = 0x840000, LENGTH = 1K |
|
|
|
user_signatures (rw!x) : ORIGIN = 0x850000, LENGTH = 1K |
|
|
|
} |
|
|
|
SECTIONS |
|
|
|
{ |
|
|
@ -70,26 +75,32 @@ SECTIONS |
|
|
|
.rel.plt : { *(.rel.plt) } |
|
|
|
.rela.plt : { *(.rela.plt) } |
|
|
|
/* Internal text space or external memory. */ |
|
|
|
.text : |
|
|
|
.text : |
|
|
|
{ |
|
|
|
*(.vectors) |
|
|
|
KEEP(*(.vectors)) |
|
|
|
/* For data that needs to reside in the lower 64k of progmem. */ |
|
|
|
*(.progmem.gcc*) |
|
|
|
*(.progmem*) |
|
|
|
*(.progmem.gcc*) |
|
|
|
/* PR 13812: Placing the trampolines here gives a better chance |
|
|
|
that they will be in range of the code that uses them. */ |
|
|
|
. = ALIGN(2); |
|
|
|
__trampolines_start = . ; |
|
|
|
/* The jump trampolines for the 16-bit limited relocs will reside here. */ |
|
|
|
*(.trampolines) |
|
|
|
*(.trampolines*) |
|
|
|
*(.trampolines*) |
|
|
|
__trampolines_end = . ; |
|
|
|
/* avr-libc expects these data to reside in lower 64K. */ |
|
|
|
*libprintf_flt.a:*(.progmem.data) |
|
|
|
*libc.a:*(.progmem.data) |
|
|
|
*(.progmem*) |
|
|
|
. = ALIGN(2); |
|
|
|
/* For future tablejump instruction arrays for 3 byte pc devices. |
|
|
|
We don't relax jump/call instructions within these sections. */ |
|
|
|
*(.jumptables) |
|
|
|
*(.jumptables*) |
|
|
|
*(.jumptables*) |
|
|
|
/* For code that needs to reside in the lower 128k progmem. */ |
|
|
|
*(.lowtext) |
|
|
|
*(.lowtext*) |
|
|
|
*(.lowtext*) |
|
|
|
__ctors_start = . ; |
|
|
|
*(.ctors) |
|
|
|
__ctors_end = . ; |
|
|
@ -122,7 +133,7 @@ SECTIONS |
|
|
|
KEEP (*(.init9)) |
|
|
|
*(.text) |
|
|
|
. = ALIGN(2); |
|
|
|
*(.text.*) |
|
|
|
*(.text.*) |
|
|
|
. = ALIGN(2); |
|
|
|
*(.fini9) /* _exit() starts here. */ |
|
|
|
KEEP (*(.fini9)) |
|
|
@ -146,13 +157,13 @@ SECTIONS |
|
|
|
KEEP (*(.fini0)) |
|
|
|
_etext = . ; |
|
|
|
} > text |
|
|
|
.data : AT (ADDR (.text) + SIZEOF (.text)) |
|
|
|
.data : |
|
|
|
{ |
|
|
|
PROVIDE (__data_start = .) ; |
|
|
|
*(.data) |
|
|
|
*(.data*) |
|
|
|
*(.data*) |
|
|
|
*(.rodata) /* We need to include .rodata here if gcc is used */ |
|
|
|
*(.rodata*) /* with -fdata-sections. */ |
|
|
|
*(.rodata*) /* with -fdata-sections. */ |
|
|
|
*(.gnu.linkonce.d*) |
|
|
|
PROVIDE (_game_descriptors_start__ = .) ; |
|
|
|
*(.game_descriptors) |
|
|
@ -160,19 +171,19 @@ SECTIONS |
|
|
|
. = ALIGN(2); |
|
|
|
_edata = . ; |
|
|
|
PROVIDE (__data_end = .) ; |
|
|
|
} > data |
|
|
|
.bss SIZEOF(.data) + ADDR(.data) : |
|
|
|
} > data AT> text |
|
|
|
.bss ADDR(.data) + SIZEOF (.data) : AT (ADDR (.bss)) |
|
|
|
{ |
|
|
|
PROVIDE (__bss_start = .) ; |
|
|
|
*(.bss) |
|
|
|
*(.bss*) |
|
|
|
*(.bss*) |
|
|
|
*(COMMON) |
|
|
|
PROVIDE (__bss_end = .) ; |
|
|
|
} > data |
|
|
|
__data_load_start = LOADADDR(.data); |
|
|
|
__data_load_end = __data_load_start + SIZEOF(.data); |
|
|
|
/* Global data not cleared after reset. */ |
|
|
|
.noinit SIZEOF(.bss) + ADDR(.bss) : |
|
|
|
.noinit ADDR(.bss) + SIZEOF (.bss) : AT (ADDR (.noinit)) |
|
|
|
{ |
|
|
|
PROVIDE (__noinit_start = .) ; |
|
|
|
*(.noinit*) |
|
|
@ -182,7 +193,8 @@ SECTIONS |
|
|
|
} > data |
|
|
|
.eeprom : |
|
|
|
{ |
|
|
|
*(.eeprom*) |
|
|
|
/* See .data above... */ |
|
|
|
KEEP(*(.eeprom*)) |
|
|
|
__eeprom_end = . ; |
|
|
|
} > eeprom |
|
|
|
.fuse : |
|
|
@ -208,6 +220,7 @@ SECTIONS |
|
|
|
.stab.index 0 : { *(.stab.index) } |
|
|
|
.stab.indexstr 0 : { *(.stab.indexstr) } |
|
|
|
.comment 0 : { *(.comment) } |
|
|
|
.note.gnu.build-id : { *(.note.gnu.build-id) } |
|
|
|
/* DWARF debug sections. |
|
|
|
Symbols in the DWARF debugging sections are relative to the beginning |
|
|
|
of the section so we begin them at 0. */ |
|
|
@ -221,11 +234,21 @@ SECTIONS |
|
|
|
.debug_aranges 0 : { *(.debug_aranges) } |
|
|
|
.debug_pubnames 0 : { *(.debug_pubnames) } |
|
|
|
/* DWARF 2 */ |
|
|
|
.debug_info 0 : { *(.debug_info) *(.gnu.linkonce.wi.*) } |
|
|
|
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } |
|
|
|
.debug_abbrev 0 : { *(.debug_abbrev) } |
|
|
|
.debug_line 0 : { *(.debug_line) } |
|
|
|
.debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end ) } |
|
|
|
.debug_frame 0 : { *(.debug_frame) } |
|
|
|
.debug_str 0 : { *(.debug_str) } |
|
|
|
.debug_loc 0 : { *(.debug_loc) } |
|
|
|
.debug_macinfo 0 : { *(.debug_macinfo) } |
|
|
|
/* SGI/MIPS DWARF 2 extensions */ |
|
|
|
.debug_weaknames 0 : { *(.debug_weaknames) } |
|
|
|
.debug_funcnames 0 : { *(.debug_funcnames) } |
|
|
|
.debug_typenames 0 : { *(.debug_typenames) } |
|
|
|
.debug_varnames 0 : { *(.debug_varnames) } |
|
|
|
/* DWARF 3 */ |
|
|
|
.debug_pubtypes 0 : { *(.debug_pubtypes) } |
|
|
|
.debug_ranges 0 : { *(.debug_ranges) } |
|
|
|
/* DWARF Extension. */ |
|
|
|
.debug_macro 0 : { *(.debug_macro) } |
|
|
|
} |
|
|
|