linker: tls: fix tdata/tbss locations
__tbss_start should be a virtual address. __tdata_start should also be a virtual address, unless we're using XIP in which case each thread should copy its thread- local data out of flash. Fixes issues with a kernel linked at a virtual address. Signed-off-by: Andrew Boie <andrew.p.boie@intel.com>
This commit is contained in:
parent
868f722ca1
commit
1e7b28e2e6
1 changed files with 6 additions and 1 deletions
|
@ -18,12 +18,17 @@
|
||||||
* thread-local variables, and the code would use
|
* thread-local variables, and the code would use
|
||||||
* the wrong values.
|
* the wrong values.
|
||||||
*/
|
*/
|
||||||
|
#ifdef CONFIG_XIP
|
||||||
|
/* The "master copy" of tdata should be only in flash on XIP systems */
|
||||||
PROVIDE(__tdata_start = LOADADDR(tdata));
|
PROVIDE(__tdata_start = LOADADDR(tdata));
|
||||||
|
#else
|
||||||
|
PROVIDE(__tdata_start = ADDR(tdata));
|
||||||
|
#endif
|
||||||
PROVIDE(__tdata_size = SIZEOF(tdata));
|
PROVIDE(__tdata_size = SIZEOF(tdata));
|
||||||
PROVIDE(__tdata_end = __tdata_start + __tdata_size);
|
PROVIDE(__tdata_end = __tdata_start + __tdata_size);
|
||||||
PROVIDE(__tdata_align = ALIGNOF(tdata));
|
PROVIDE(__tdata_align = ALIGNOF(tdata));
|
||||||
|
|
||||||
PROVIDE(__tbss_start = LOADADDR(tbss));
|
PROVIDE(__tbss_start = ADDR(tbss));
|
||||||
PROVIDE(__tbss_size = SIZEOF(tbss));
|
PROVIDE(__tbss_size = SIZEOF(tbss));
|
||||||
PROVIDE(__tbss_end = __tbss_start + __tbss_size);
|
PROVIDE(__tbss_end = __tbss_start + __tbss_size);
|
||||||
PROVIDE(__tbss_align = ALIGNOF(tbss));
|
PROVIDE(__tbss_align = ALIGNOF(tbss));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue