diff options
Diffstat (limited to 'libgloss/rx')
-rw-r--r-- | libgloss/rx/rx-sim.ld | 18 | ||||
-rw-r--r-- | libgloss/rx/rx.ld | 18 |
2 files changed, 34 insertions, 2 deletions
diff --git a/libgloss/rx/rx-sim.ld b/libgloss/rx/rx-sim.ld index b5802c511..a9bbf1fec 100644 --- a/libgloss/rx/rx-sim.ld +++ b/libgloss/rx/rx-sim.ld @@ -155,10 +155,26 @@ SECTIONS } > RAM 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)) : { PROVIDE (__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 /* Providing one of these symbols in your code is sufficient to have @@ -213,7 +229,7 @@ SECTIONS /* DWARF 2 */ .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) } diff --git a/libgloss/rx/rx.ld b/libgloss/rx/rx.ld index f56fe01ea..1a56d8daf 100644 --- a/libgloss/rx/rx.ld +++ b/libgloss/rx/rx.ld @@ -159,10 +159,26 @@ SECTIONS } > RAM 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)) : { PROVIDE (__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 @@ -217,7 +233,7 @@ SECTIONS /* DWARF 2 */ .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) } |