aboutsummaryrefslogtreecommitdiffstats
path: root/support
diff options
context:
space:
mode:
authorMarti Bolivar <mbolivar@leaflabs.com>2012-04-11 16:56:20 -0400
committerMarti Bolivar <mbolivar@leaflabs.com>2012-04-11 16:56:50 -0400
commit71347f8f430e28b5e5ed565bc5c5f5142c2314e0 (patch)
treee5eb0377dcad27bb26155266c0ea7047f8cab671 /support
parent33c40cbbf0ea025b7e0bf39a4703cf239cc09e08 (diff)
downloadlibrambutan-71347f8f430e28b5e5ed565bc5c5f5142c2314e0.tar.gz
librambutan-71347f8f430e28b5e5ed565bc5c5f5142c2314e0.zip
Fix linking and C runtime initialization on F1.
Reorder the .data and .rodata sections in common.inc. This seems necessary to get the linker to place the data ROM disk and the pointer to it in the right places. Switch from long long to int in start_c.c. I have no idea why this helps, but it does. F1 will crash if you don't do this. It will probably slow things down unnecessarily on F2, but I don't care. Signed-off-by: Marti Bolivar <mbolivar@leaflabs.com>
Diffstat (limited to 'support')
-rw-r--r--support/ld/common.inc53
1 files changed, 23 insertions, 30 deletions
diff --git a/support/ld/common.inc b/support/ld/common.inc
index 926f9eb..f749b19 100644
--- a/support/ld/common.inc
+++ b/support/ld/common.inc
@@ -102,29 +102,6 @@ SECTIONS
} > REGION_TEXT
/*
- * Read-only data
- */
- .rodata :
- {
- *(.rodata .rodata.* .gnu.linkonce.r.*)
-
- /* ROM image configuration; for C startup */
- . = ALIGN(4);
- _lm_rom_img_cfgp = .;
- LONG(LOADADDR(.data));
- } > REGION_RODATA
-
- /*
- * .ARM.exidx exception unwinding; mandated by ARM's C++ ABI
- */
- __exidx_start = .;
- .ARM.exidx :
- {
- *(.ARM.exidx* .gnu.linkonce.armexidx.*)
- } > REGION_RODATA
- __exidx_end = .;
-
- /*
* End of text
*/
.text.align :
@@ -134,12 +111,14 @@ SECTIONS
} > REGION_TEXT
/*
- * .USER_FLASH: We allow users to allocate into Flash here
+ * .ARM.exidx exception unwinding; mandated by ARM's C++ ABI
*/
- .USER_FLASH :
+ __exidx_start = .;
+ .ARM.exidx :
{
- *(.USER_FLASH)
+ *(.ARM.exidx* .gnu.linkonce.armexidx.*)
} > REGION_RODATA
+ __exidx_end = .;
/*
* .data
@@ -152,6 +131,22 @@ SECTIONS
*(.got.plt) *(.got)
*(.data .data.* .gnu.linkonce.d.*)
+ . = ALIGN(8);
+ _edata = .;
+ } > REGION_DATA AT> REGION_RODATA
+
+ /*
+ * Read-only data
+ */
+ .rodata :
+ {
+ *(.rodata .rodata.* .gnu.linkonce.r.*)
+ /* .USER_FLASH: We allow users to allocate into Flash here */
+ *(.USER_FLASH)
+ /* ROM image configuration; for C startup */
+ . = ALIGN(4);
+ _lm_rom_img_cfgp = .;
+ LONG(LOADADDR(.data));
/*
* Heap: Linker scripts may choose a custom heap by overriding
* _lm_heap_start and _lm_heap_end. Otherwise, the heap is in
@@ -163,9 +158,7 @@ SECTIONS
*/
_lm_heap_start = DEFINED(_lm_heap_start) ? _lm_heap_start : _end;
_lm_heap_end = DEFINED(_lm_heap_end) ? _lm_heap_end : __msp_init;
- . = ALIGN (8);
- _edata = .;
- } > REGION_DATA AT> REGION_TEXT
+ } > REGION_RODATA
/*
* .bss
@@ -179,7 +172,7 @@ SECTIONS
. = ALIGN (8);
_ebss = .;
_end = _ebss;
- } > REGION_BSS AT> REGION_TEXT
+ } > REGION_BSS
/*
* Debugging sections