From 960fd8546fb0130058e6a588fbc62d696d01df0e Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 28 Jan 2014 11:52:17 +0100 Subject: bsps: Thread-local storage (TLS) for linkcmds --- c/src/lib/libbsp/sh/gensh1/startup/linkcmds | 20 +++++++++++++++++--- c/src/lib/libbsp/sh/gensh2/startup/linkcmds | 20 +++++++++++++++++--- c/src/lib/libbsp/sh/gensh2/startup/linkcmds.ram | 20 +++++++++++++++++--- c/src/lib/libbsp/sh/gensh2/startup/linkcmds.rom | 20 +++++++++++++++++--- c/src/lib/libbsp/sh/gensh4/startup/linkcmds | 14 ++++++++++++++ c/src/lib/libbsp/sh/gensh4/startup/linkcmds.rom | 14 ++++++++++++++ c/src/lib/libbsp/sh/gensh4/startup/linkcmds.rom2ram | 14 ++++++++++++++ c/src/lib/libbsp/sh/shsim/startup/linkcmds | 18 ++++++++++++++++-- c/src/lib/libbsp/sh/shsim/startup/linkcmds.sim | 18 ++++++++++++++++-- 9 files changed, 142 insertions(+), 16 deletions(-) (limited to 'c/src/lib/libbsp/sh') diff --git a/c/src/lib/libbsp/sh/gensh1/startup/linkcmds b/c/src/lib/libbsp/sh/gensh1/startup/linkcmds index 90715b234e..6a447a4cc7 100644 --- a/c/src/lib/libbsp/sh/gensh1/startup/linkcmds +++ b/c/src/lib/libbsp/sh/gensh1/startup/linkcmds @@ -128,9 +128,23 @@ SECTIONS } > ram _etext = .; PROVIDE (etext = .); - .fini . : { *(.fini) } =0 - .rodata . : { *(.rodata*) *(.gnu.linkonce.r*) } - .rodata1 . : { *(.rodata1) } + .fini . : { *(.fini) } > ram =0 + .rodata . : { *(.rodata*) *(.gnu.linkonce.r*) } > ram + .rodata1 . : { *(.rodata1) } > ram + .tdata : { + __TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __TLS_Data_end = .; + } > ram + .tbss : { + __TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + __TLS_BSS_end = .; + } > ram + __TLS_Data_size = __TLS_Data_end - __TLS_Data_begin; + __TLS_BSS_size = __TLS_BSS_end - __TLS_BSS_begin; + __TLS_Size = __TLS_BSS_end - __TLS_Data_begin; + __TLS_Alignment = ALIGNOF (.tdata); /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(128) + (. & (128 - 1)); diff --git a/c/src/lib/libbsp/sh/gensh2/startup/linkcmds b/c/src/lib/libbsp/sh/gensh2/startup/linkcmds index be04e23faa..7c090bb7ef 100644 --- a/c/src/lib/libbsp/sh/gensh2/startup/linkcmds +++ b/c/src/lib/libbsp/sh/gensh2/startup/linkcmds @@ -139,9 +139,23 @@ SECTIONS } > ram _etext = .; PROVIDE (etext = .); - .fini . : { *(.fini) } =0 - .rodata . : { *(.rodata*) *(.gnu.linkonce.r*) } - .rodata1 . : { *(.rodata1) } + .fini . : { *(.fini) } > ram =0 + .rodata . : { *(.rodata*) *(.gnu.linkonce.r*) } > ram + .rodata1 . : { *(.rodata1) } > ram + .tdata : { + __TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __TLS_Data_end = .; + } > ram + .tbss : { + __TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + __TLS_BSS_end = .; + } > ram + __TLS_Data_size = __TLS_Data_end - __TLS_Data_begin; + __TLS_BSS_size = __TLS_BSS_end - __TLS_BSS_begin; + __TLS_Size = __TLS_BSS_end - __TLS_Data_begin; + __TLS_Alignment = ALIGNOF (.tdata); /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(128) + (. & (128 - 1)); diff --git a/c/src/lib/libbsp/sh/gensh2/startup/linkcmds.ram b/c/src/lib/libbsp/sh/gensh2/startup/linkcmds.ram index 1d75185354..48c5f4fa46 100644 --- a/c/src/lib/libbsp/sh/gensh2/startup/linkcmds.ram +++ b/c/src/lib/libbsp/sh/gensh2/startup/linkcmds.ram @@ -138,9 +138,23 @@ SECTIONS } > ram _etext = .; PROVIDE (etext = .); - .fini . : { *(.fini) } =0 - .rodata . : { *(.rodata) *(.gnu.linkonce.r*) } - .rodata1 . : { *(.rodata1) } + .fini . : { *(.fini) } > ram =0 + .rodata . : { *(.rodata) *(.gnu.linkonce.r*) } > ram + .rodata1 . : { *(.rodata1) } > ram + .tdata : { + __TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __TLS_Data_end = .; + } > ram + .tbss : { + __TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + __TLS_BSS_end = .; + } > ram + __TLS_Data_size = __TLS_Data_end - __TLS_Data_begin; + __TLS_BSS_size = __TLS_BSS_end - __TLS_BSS_begin; + __TLS_Size = __TLS_BSS_end - __TLS_Data_begin; + __TLS_Alignment = ALIGNOF (.tdata); /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(128) + (. & (128 - 1)); diff --git a/c/src/lib/libbsp/sh/gensh2/startup/linkcmds.rom b/c/src/lib/libbsp/sh/gensh2/startup/linkcmds.rom index b734437d5c..930fa6d13d 100644 --- a/c/src/lib/libbsp/sh/gensh2/startup/linkcmds.rom +++ b/c/src/lib/libbsp/sh/gensh2/startup/linkcmds.rom @@ -139,9 +139,23 @@ SECTIONS } > ram _etext = .; PROVIDE (etext = .); - .fini . : { *(.fini) } =0 - .rodata . : { *(.rodata) *(.gnu.linkonce.r*) } - .rodata1 . : { *(.rodata1) } + .fini . : { *(.fini) } > ram =0 + .rodata . : { *(.rodata) *(.gnu.linkonce.r*) } > ram + .rodata1 . : { *(.rodata1) } > ram + .tdata : { + __TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __TLS_Data_end = .; + } > ram + .tbss : { + __TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + __TLS_BSS_end = .; + } > ram + __TLS_Data_size = __TLS_Data_end - __TLS_Data_begin; + __TLS_BSS_size = __TLS_BSS_end - __TLS_BSS_begin; + __TLS_Size = __TLS_BSS_end - __TLS_Data_begin; + __TLS_Alignment = ALIGNOF (.tdata); /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(128) + (. & (128 - 1)); diff --git a/c/src/lib/libbsp/sh/gensh4/startup/linkcmds b/c/src/lib/libbsp/sh/gensh4/startup/linkcmds index 2546bf290f..e38cb63593 100644 --- a/c/src/lib/libbsp/sh/gensh4/startup/linkcmds +++ b/c/src/lib/libbsp/sh/gensh4/startup/linkcmds @@ -93,6 +93,20 @@ SECTIONS *(.rodata.*) *(.gnu.linkonce.r*) } > ram + .tdata : { + __TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __TLS_Data_end = .; + } > ram + .tbss : { + __TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + __TLS_BSS_end = .; + } > ram + __TLS_Data_size = __TLS_Data_end - __TLS_Data_begin; + __TLS_BSS_size = __TLS_BSS_end - __TLS_BSS_begin; + __TLS_Size = __TLS_BSS_end - __TLS_Data_begin; + __TLS_Alignment = ALIGNOF (.tdata); .ctors : { ___ctors = .; diff --git a/c/src/lib/libbsp/sh/gensh4/startup/linkcmds.rom b/c/src/lib/libbsp/sh/gensh4/startup/linkcmds.rom index a5cd939181..89325c04da 100644 --- a/c/src/lib/libbsp/sh/gensh4/startup/linkcmds.rom +++ b/c/src/lib/libbsp/sh/gensh4/startup/linkcmds.rom @@ -105,6 +105,20 @@ SECTIONS *(.gnu.linkonce.r*) . = ALIGN(32); } > rom + .tdata : { + __TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __TLS_Data_end = .; + } > rom + .tbss : { + __TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + __TLS_BSS_end = .; + } > rom + __TLS_Data_size = __TLS_Data_end - __TLS_Data_begin; + __TLS_BSS_size = __TLS_BSS_end - __TLS_BSS_begin; + __TLS_Size = __TLS_BSS_end - __TLS_Data_begin; + __TLS_Alignment = ALIGNOF (.tdata); .ctors : { ___ctors = .; diff --git a/c/src/lib/libbsp/sh/gensh4/startup/linkcmds.rom2ram b/c/src/lib/libbsp/sh/gensh4/startup/linkcmds.rom2ram index 68c3b1a3cc..0ce6effae6 100644 --- a/c/src/lib/libbsp/sh/gensh4/startup/linkcmds.rom2ram +++ b/c/src/lib/libbsp/sh/gensh4/startup/linkcmds.rom2ram @@ -92,6 +92,20 @@ SECTIONS *(.gnu.linkonce.r*) . = ALIGN(32); } > ram + .tdata : { + __TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __TLS_Data_end = .; + } > ram + .tbss : { + __TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + __TLS_BSS_end = .; + } > ram + __TLS_Data_size = __TLS_Data_end - __TLS_Data_begin; + __TLS_BSS_size = __TLS_BSS_end - __TLS_BSS_begin; + __TLS_Size = __TLS_BSS_end - __TLS_Data_begin; + __TLS_Alignment = ALIGNOF (.tdata); .ctors : AT(LOADADDR(.rodata) + SIZEOF(.rodata)) { ___ctors = .; diff --git a/c/src/lib/libbsp/sh/shsim/startup/linkcmds b/c/src/lib/libbsp/sh/shsim/startup/linkcmds index a12af48b9c..4da05e451d 100644 --- a/c/src/lib/libbsp/sh/shsim/startup/linkcmds +++ b/c/src/lib/libbsp/sh/shsim/startup/linkcmds @@ -127,8 +127,22 @@ SECTIONS } =0 _etext = .; PROVIDE (etext = .); - .rodata . : { *(.rodata*) .rodata.* *(.gnu.linkonce.r*) } - .rodata1 . : { *(.rodata1) } + .rodata . : { *(.rodata*) .rodata.* *(.gnu.linkonce.r*) } > ram + .rodata1 . : { *(.rodata1) } > ram + .tdata : { + __TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __TLS_Data_end = .; + } > ram + .tbss : { + __TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + __TLS_BSS_end = .; + } > ram + __TLS_Data_size = __TLS_Data_end - __TLS_Data_begin; + __TLS_BSS_size = __TLS_BSS_end - __TLS_BSS_begin; + __TLS_Size = __TLS_BSS_end - __TLS_Data_begin; + __TLS_Alignment = ALIGNOF (.tdata); /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(128) + (. & (128 - 1)); diff --git a/c/src/lib/libbsp/sh/shsim/startup/linkcmds.sim b/c/src/lib/libbsp/sh/shsim/startup/linkcmds.sim index 9e5c86f923..6543fbd8ce 100644 --- a/c/src/lib/libbsp/sh/shsim/startup/linkcmds.sim +++ b/c/src/lib/libbsp/sh/shsim/startup/linkcmds.sim @@ -121,8 +121,22 @@ SECTIONS } =0 _etext = .; PROVIDE (etext = .); - .rodata . : { *(.rodata*) .rodata.* *(.gnu.linkonce.r*) } - .rodata1 . : { *(.rodata1) } + .rodata . : { *(.rodata*) .rodata.* *(.gnu.linkonce.r*) } > ram + .rodata1 . : { *(.rodata1) } > ram + .tdata : { + __TLS_Data_begin = .; + *(.tdata .tdata.* .gnu.linkonce.td.*) + __TLS_Data_end = .; + } > ram + .tbss : { + __TLS_BSS_begin = .; + *(.tbss .tbss.* .gnu.linkonce.tb.*) *(.tcommon) + __TLS_BSS_end = .; + } > ram + __TLS_Data_size = __TLS_Data_end - __TLS_Data_begin; + __TLS_BSS_size = __TLS_BSS_end - __TLS_BSS_begin; + __TLS_Size = __TLS_BSS_end - __TLS_Data_begin; + __TLS_Alignment = ALIGNOF (.tdata); /* Adjust the address for the data segment. We want to adjust up to the same address within the page on the next page up. */ . = ALIGN(128) + (. & (128 - 1)); -- cgit v1.2.3