Add a check that the data area does not overrun the stack.
* msp430/msp430-sim.ld (.stack): Add an assertion to make sure that the data area does not overrun the stack. PROVIDE a new symbol __stack_size to allow the user to set the limit. * msp430/msp430xl-sim.ld (.stack): Likewise. * rl78/rl78-sim.ld (.stack): Likewise. * rl78/rl78.ld (.stack): Likewise. * rx/rx-sim.ld (.stack): Likewise. * rx/rx.ld (.stack): Likewise.
This commit is contained in:
parent
7b3c1cffce
commit
324bd11706
|
@ -1,3 +1,14 @@
|
||||||
|
2015-05-18 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
* msp430/msp430-sim.ld (.stack): Add an assertion to make sure
|
||||||
|
that the data area does not overrun the stack. PROVIDE a new
|
||||||
|
symbol __stack_size to allow the user to set the limit.
|
||||||
|
* msp430/msp430xl-sim.ld (.stack): Likewise.
|
||||||
|
* rl78/rl78-sim.ld (.stack): Likewise.
|
||||||
|
* rl78/rl78.ld (.stack): Likewise.
|
||||||
|
* rx/rx-sim.ld (.stack): Likewise.
|
||||||
|
* rx/rx.ld (.stack): Likewise.
|
||||||
|
|
||||||
2015-05-05 Nick Clifton <nickc@redhat.com>
|
2015-05-05 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
* msp430/msp430.ld: Delete.
|
* msp430/msp430.ld: Delete.
|
||||||
|
|
|
@ -175,10 +175,26 @@ SECTIONS
|
||||||
_end = .;
|
_end = .;
|
||||||
PROVIDE (end = .);
|
PROVIDE (end = .);
|
||||||
|
|
||||||
|
/* The __stack_size value of 0x100 is just a guess, but since it is
|
||||||
|
PROVIDEd the user can override it on the command line. It has to be
|
||||||
|
set here, rather than inside the .stack section, as symbols defined
|
||||||
|
inside sections are only evaluated during the final phase of the link,
|
||||||
|
long after the ASSERT is checked. An ASSERT referencing a PROVIDED but
|
||||||
|
not yet evaluated symbol will automatically fail.
|
||||||
|
|
||||||
|
FIXME: It would be nice if this value could be automatically set via
|
||||||
|
gcc's -fstack-usage command line option somehow. */
|
||||||
|
PROVIDE (__stack_size = 0x100);
|
||||||
|
|
||||||
.stack (ORIGIN (RAM) + LENGTH(RAM)) :
|
.stack (ORIGIN (RAM) + LENGTH(RAM)) :
|
||||||
{
|
{
|
||||||
PROVIDE (__stack = .);
|
PROVIDE (__stack = .);
|
||||||
*(.stack)
|
*(.stack)
|
||||||
|
|
||||||
|
/* Linker section checking ignores empty sections like
|
||||||
|
this one so we have to have our own test here. */
|
||||||
|
ASSERT ((__stack > (_end + __stack_size)),
|
||||||
|
"Error: Too much data - no room left for the stack");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure that .upper sections are not used without -mlarge support. */
|
/* Make sure that .upper sections are not used without -mlarge support. */
|
||||||
|
|
|
@ -61,7 +61,7 @@ SECTIONS
|
||||||
|
|
||||||
The same reasoning applies to the absence of definitions for the
|
The same reasoning applies to the absence of definitions for the
|
||||||
.either.text, .either.data and .either.bss sections as well. */
|
.either.text, .either.data and .either.bss sections as well. */
|
||||||
|
|
||||||
. = ALIGN(2);
|
. = ALIGN(2);
|
||||||
*(.rodata .rodata.* .gnu.linkonce.r.* .const .const:*)
|
*(.rodata .rodata.* .gnu.linkonce.r.* .const .const:*)
|
||||||
*(.rodata1)
|
*(.rodata1)
|
||||||
|
@ -318,6 +318,17 @@ SECTIONS
|
||||||
LONG(0);
|
LONG(0);
|
||||||
} > HIFRAM
|
} > HIFRAM
|
||||||
|
|
||||||
|
/* The __stack_size value of 0x100 is just a guess, but since it is
|
||||||
|
PROVIDEd the user can override it on the command line. It has to be
|
||||||
|
set here, rather than inside the .stack section, as symbols defined
|
||||||
|
inside sections are only evaluated during the final phase of the link,
|
||||||
|
long after the ASSERT is checked. An ASSERT referencing a PROVIDED but
|
||||||
|
not yet evaluated symbol will automatically fail.
|
||||||
|
|
||||||
|
FIXME: It would be nice if this value could be automatically set via
|
||||||
|
gcc's -fstack-usage command line option somehow. */
|
||||||
|
PROVIDE (__stack_size = 0x100);
|
||||||
|
|
||||||
/* Note: We place the stack in HIFRAM because then there is less
|
/* Note: We place the stack in HIFRAM because then there is less
|
||||||
chance that it will collide with allocated data in the RAM region.
|
chance that it will collide with allocated data in the RAM region.
|
||||||
In scripts targeted at real MCUs however it may be better to place
|
In scripts targeted at real MCUs however it may be better to place
|
||||||
|
@ -329,6 +340,11 @@ SECTIONS
|
||||||
.stack (ORIGIN (HIFRAM) + LENGTH (HIFRAM)) :
|
.stack (ORIGIN (HIFRAM) + LENGTH (HIFRAM)) :
|
||||||
{
|
{
|
||||||
PROVIDE (__stack = .);
|
PROVIDE (__stack = .);
|
||||||
|
|
||||||
|
/* Linker section checking ignores empty sections like
|
||||||
|
this one so we have to have our own test here. */
|
||||||
|
ASSERT ((__stack > (_end + __stack_size)),
|
||||||
|
"Error: Too much data - no room left for the stack");
|
||||||
}
|
}
|
||||||
|
|
||||||
.text :
|
.text :
|
||||||
|
|
|
@ -122,10 +122,26 @@ SECTIONS
|
||||||
} > RAM
|
} > RAM
|
||||||
PROVIDE (__bsssize = SIZEOF(.bss));
|
PROVIDE (__bsssize = SIZEOF(.bss));
|
||||||
|
|
||||||
|
/* The __stack_size value of 0x100 is just a guess, but since it is
|
||||||
|
PROVIDEd the user can override it on the command line. It has to be
|
||||||
|
set here, rather than inside the .stack section, as symbols defined
|
||||||
|
inside sections are only evaluated during the final phase of the link,
|
||||||
|
long after the ASSERT is checked. An ASSERT referencing a PROVIDED but
|
||||||
|
not yet evaluated symbol will automatically fail.
|
||||||
|
|
||||||
|
FIXME: It would be nice if this value could be automatically set via
|
||||||
|
gcc's -fstack-usage command line option somehow. */
|
||||||
|
PROVIDE (__stack_size = 0x100);
|
||||||
|
|
||||||
.stack (ORIGIN (STACK)) :
|
.stack (ORIGIN (STACK)) :
|
||||||
{
|
{
|
||||||
PROVIDE (__stack = .);
|
PROVIDE (__stack = .);
|
||||||
*(.stack)
|
*(.stack)
|
||||||
|
|
||||||
|
/* Linker section checking ignores empty sections like
|
||||||
|
this one so we have to have our own test here. */
|
||||||
|
ASSERT ((__stack > (_end + __stack_size)),
|
||||||
|
"Error: Too much data - no room left for the stack");
|
||||||
}
|
}
|
||||||
|
|
||||||
.saddr : {
|
.saddr : {
|
||||||
|
|
|
@ -122,10 +122,26 @@ SECTIONS
|
||||||
} > RAM
|
} > RAM
|
||||||
PROVIDE (__bsssize = SIZEOF(.bss));
|
PROVIDE (__bsssize = SIZEOF(.bss));
|
||||||
|
|
||||||
|
/* The __stack_size value of 0x100 is just a guess, but since it is
|
||||||
|
PROVIDEd the user can override it on the command line. It has to be
|
||||||
|
set here, rather than inside the .stack section, as symbols defined
|
||||||
|
inside sections are only evaluated during the final phase of the link,
|
||||||
|
long after the ASSERT is checked. An ASSERT referencing a PROVIDED but
|
||||||
|
not yet evaluated symbol will automatically fail.
|
||||||
|
|
||||||
|
FIXME: It would be nice if this value could be automatically set via
|
||||||
|
gcc's -fstack-usage command line option somehow. */
|
||||||
|
PROVIDE (__stack_size = 0x100);
|
||||||
|
|
||||||
.stack (ORIGIN (STACK)) :
|
.stack (ORIGIN (STACK)) :
|
||||||
{
|
{
|
||||||
PROVIDE (__stack = .);
|
PROVIDE (__stack = .);
|
||||||
*(.stack)
|
*(.stack)
|
||||||
|
|
||||||
|
/* Linker section checking ignores empty sections like
|
||||||
|
this one so we have to have our own test here. */
|
||||||
|
ASSERT ((__stack > (_end + __stack_size)),
|
||||||
|
"Error: Too much data - no room left for the stack");
|
||||||
}
|
}
|
||||||
|
|
||||||
.saddr : {
|
.saddr : {
|
||||||
|
|
|
@ -155,10 +155,26 @@ SECTIONS
|
||||||
} > RAM
|
} > RAM
|
||||||
PROVIDE (__bsssize = SIZEOF(.bss) / 4);
|
PROVIDE (__bsssize = SIZEOF(.bss) / 4);
|
||||||
|
|
||||||
|
/* The __stack_size value of 0x100 is just a guess, but since it is
|
||||||
|
PROVIDEd the user can override it on the command line. It has to be
|
||||||
|
set here, rather than inside the .stack section, as symbols defined
|
||||||
|
inside sections are only evaluated during the final phase of the link,
|
||||||
|
long after the ASSERT is checked. An ASSERT referencing a PROVIDED but
|
||||||
|
not yet evaluated symbol will automatically fail.
|
||||||
|
|
||||||
|
FIXME: It would be nice if this value could be automatically set via
|
||||||
|
gcc's -fstack-usage command line option somehow. */
|
||||||
|
PROVIDE (__stack_size = 0x100);
|
||||||
|
|
||||||
.stack (ORIGIN (STACK)) :
|
.stack (ORIGIN (STACK)) :
|
||||||
{
|
{
|
||||||
PROVIDE (__stack = .);
|
PROVIDE (__stack = .);
|
||||||
*(.stack)
|
*(.stack)
|
||||||
|
|
||||||
|
/* Linker section checking ignores empty sections like
|
||||||
|
this one so we have to have our own test here. */
|
||||||
|
ASSERT ((__stack > (_end + __stack_size)),
|
||||||
|
"Error: Too much data - no room left for the stack");
|
||||||
} > STACK
|
} > STACK
|
||||||
|
|
||||||
/* Providing one of these symbols in your code is sufficient to have
|
/* Providing one of these symbols in your code is sufficient to have
|
||||||
|
@ -213,7 +229,7 @@ SECTIONS
|
||||||
/* DWARF 2 */
|
/* DWARF 2 */
|
||||||
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
.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_frame 0 : { *(.debug_frame) }
|
||||||
.debug_str 0 : { *(.debug_str) }
|
.debug_str 0 : { *(.debug_str) }
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
.debug_loc 0 : { *(.debug_loc) }
|
||||||
|
|
|
@ -159,10 +159,26 @@ SECTIONS
|
||||||
} > RAM
|
} > RAM
|
||||||
PROVIDE (__bsssize = SIZEOF(.bss) / 4);
|
PROVIDE (__bsssize = SIZEOF(.bss) / 4);
|
||||||
|
|
||||||
|
/* The __stack_size value of 0x100 is just a guess, but since it is
|
||||||
|
PROVIDEd the user can override it on the command line. It has to be
|
||||||
|
set here, rather than inside the .stack section, as symbols defined
|
||||||
|
inside sections are only evaluated during the final phase of the link,
|
||||||
|
long after the ASSERT is checked. An ASSERT referencing a PROVIDED but
|
||||||
|
not yet evaluated symbol will automatically fail.
|
||||||
|
|
||||||
|
FIXME: It would be nice if this value could be automatically set via
|
||||||
|
gcc's -fstack-usage command line option somehow. */
|
||||||
|
PROVIDE (__stack_size = 0x100);
|
||||||
|
|
||||||
.stack (ORIGIN (STACK)) :
|
.stack (ORIGIN (STACK)) :
|
||||||
{
|
{
|
||||||
PROVIDE (__stack = .);
|
PROVIDE (__stack = .);
|
||||||
*(.stack)
|
*(.stack)
|
||||||
|
|
||||||
|
/* Linker section checking ignores empty sections like
|
||||||
|
this one so we have to have our own test here. */
|
||||||
|
ASSERT ((__stack > (_end + __stack_size)),
|
||||||
|
"Error: Too much data - no room left for the stack");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Providing one of these symbols in your code is sufficient to have
|
/* Providing one of these symbols in your code is sufficient to have
|
||||||
|
@ -217,7 +233,7 @@ SECTIONS
|
||||||
/* DWARF 2 */
|
/* DWARF 2 */
|
||||||
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
.debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) }
|
||||||
.debug_abbrev 0 : { *(.debug_abbrev) }
|
.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_frame 0 : { *(.debug_frame) }
|
||||||
.debug_str 0 : { *(.debug_str) }
|
.debug_str 0 : { *(.debug_str) }
|
||||||
.debug_loc 0 : { *(.debug_loc) }
|
.debug_loc 0 : { *(.debug_loc) }
|
||||||
|
|
Loading…
Reference in New Issue