From 7585b2b8b643f4f20c25374f433081aee848e71f Mon Sep 17 00:00:00 2001 From: Denis Chertykov Date: Mon, 25 Jan 2016 22:33:25 +0300 Subject: [PATCH] Prevent .noinit section from incorrect placement for AVR. When .data and .bss sections are empty .noinit section is placed at data region's start. This will be incorrect for devices that has different data start address than data region start in linker script. The patch updates .noinit section's VMA to end of .bss section. So, .noinit section will be placed at .data section address (-Tdata=
) when .data and .bss sections are empty. ld/ * scripttempl/avr.sc (.noinit): Force .noinit VMA to end of .bss VMA. * scripttempl/avrtiny.sc (.noinit): Likewise. --- ld/ChangeLog | 5 +++++ ld/scripttempl/avr.sc | 2 +- ld/scripttempl/avrtiny.sc | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/ld/ChangeLog b/ld/ChangeLog index c13a202bc29..2462b30bf10 100644 --- a/ld/ChangeLog +++ b/ld/ChangeLog @@ -1,3 +1,8 @@ +2016-01-22 Pitchumani Sivanupandi + + * scripttempl/avr.sc (.noinit): Force .noinit VMA to end of .bss VMA. + * scripttempl/avrtiny.sc (.noinit): Likewise. + 2016-01-21 Nick Clifton PR ld/19453 diff --git a/ld/scripttempl/avr.sc b/ld/scripttempl/avr.sc index de819875bda..c26f4ead94d 100644 --- a/ld/scripttempl/avr.sc +++ b/ld/scripttempl/avr.sc @@ -210,7 +210,7 @@ SECTIONS ${RELOCATING+ __data_load_end = __data_load_start + SIZEOF(.data); } /* Global data not cleared after reset. */ - .noinit ${RELOCATING-0}: + .noinit ${RELOCATING+ ADDR(.bss) + SIZEOF (.bss)} ${RELOCATING-0}: ${RELOCATING+ AT (ADDR (.noinit))} { ${RELOCATING+ PROVIDE (__noinit_start = .) ; } *(.noinit*) diff --git a/ld/scripttempl/avrtiny.sc b/ld/scripttempl/avrtiny.sc index 00daf114649..045bc4b26e0 100644 --- a/ld/scripttempl/avrtiny.sc +++ b/ld/scripttempl/avrtiny.sc @@ -210,7 +210,7 @@ SECTIONS ${RELOCATING+ __data_load_end = __data_load_start + SIZEOF(.data); } /* Global data not cleared after reset. */ - .noinit ${RELOCATING-0}: + .noinit ${RELOCATING+ ADDR(.bss) + SIZEOF (.bss)} ${RELOCATING-0} : ${RELOCATING+ AT (ADDR (.noinit))} { ${RELOCATING+ PROVIDE (__noinit_start = .) ; } *(.noinit*) -- 2.30.2