|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Minios-devel] [UNIKRAFT PATCH 1/4] plat: prepare linker script for thread-local storage
Aggregate all .tdata and .tbss variables in the correct sections, and
define global variables that point at section beginning and end.
Signed-off-by: Florian Schmidt <florian.schmidt@xxxxxxxxx>
---
plat/common/include/sections.h | 5 +++++
plat/kvm/x86/link64.lds | 18 ++++++++++++++++++
plat/linuxu/Linker.uk | 1 +
plat/linuxu/link.ld | 22 ++++++++++++++++++++++
plat/xen/x86/link64.lds | 18 ++++++++++++++++++
5 files changed, 64 insertions(+)
create mode 100644 plat/linuxu/link.ld
diff --git a/plat/common/include/sections.h b/plat/common/include/sections.h
index 1052cfc7..a2677ce8 100644
--- a/plat/common/include/sections.h
+++ b/plat/common/include/sections.h
@@ -63,6 +63,11 @@ extern char _data[], _edata[];
/* [_ctors, _ectors]: contains constructor tables (read-only) */
extern char _ctors[], _ectors[];
+/* [_tls_start, _tls_end]: contains .tdata.* and .tbss.* sections */
+extern char _tls_start[], _tls_end[];
+/* _etdata: denotes end of .tdata (and start of .tbss */
+extern char _etdata[];
+
/* __bss_start: start of BSS sections */
extern char __bss_start[];
diff --git a/plat/kvm/x86/link64.lds b/plat/kvm/x86/link64.lds
index c96f7501..4e52da49 100644
--- a/plat/kvm/x86/link64.lds
+++ b/plat/kvm/x86/link64.lds
@@ -71,6 +71,24 @@ SECTIONS
}
_ectors = .;
+ . = ALIGN(0x8);
+ _tls_start = .;
+ .tdata :
+ {
+ *(.tdata)
+ *(.tdata.*)
+ *(.gnu.linkonce.td.*)
+ }
+ _etdata = .;
+ .tbss :
+ {
+ *(.tbss)
+ *(.tbss.*)
+ *(.gnu.linkonce.tb.*)
+ . = ALIGN(0x8);
+ }
+ _tls_end = . + SIZEOF(.tbss);
+
/* Read-write data (initialized) */
. = ALIGN(0x1000);
_data = .;
diff --git a/plat/linuxu/Linker.uk b/plat/linuxu/Linker.uk
index ef4b201c..e0cd1743 100644
--- a/plat/linuxu/Linker.uk
+++ b/plat/linuxu/Linker.uk
@@ -1,4 +1,5 @@
LINUXU_LDFLAGS-y += -Wl,-e,_liblinuxuplat_start
+EXTRA_LD_SCRIPT-y += $(CONFIG_UK_BASE)/plat/linuxu/link.ld
##
## Link image
diff --git a/plat/linuxu/link.ld b/plat/linuxu/link.ld
new file mode 100644
index 00000000..3f5cd682
--- /dev/null
+++ b/plat/linuxu/link.ld
@@ -0,0 +1,22 @@
+SECTIONS
+{
+ . = ALIGN(0x8);
+ _tls_start = .;
+ .tdata :
+ {
+ *(.tdata)
+ *(.tdata.*)
+ *(.gnu.linkonce.td.*)
+ }
+ _etdata = .;
+ .tbss :
+ {
+ *(.tbss)
+ *(.tbss.*)
+ *(.gnu.linkonce.tb.*)
+ . = ALIGN(0x8);
+ }
+ _tls_end = . + SIZEOF(.tbss);
+}
+
+INSERT BEFORE .data
diff --git a/plat/xen/x86/link64.lds b/plat/xen/x86/link64.lds
index 82ab653a..c8af67c0 100644
--- a/plat/xen/x86/link64.lds
+++ b/plat/xen/x86/link64.lds
@@ -67,6 +67,24 @@ SECTIONS
. = ALIGN(4096);
_ectors = .;
+ . = ALIGN(0x8);
+ _tls_start = .;
+ .tdata :
+ {
+ *(.tdata)
+ *(.tdata.*)
+ *(.gnu.linkonce.td.*)
+ }
+ _etdata = .;
+ .tbss :
+ {
+ *(.tbss)
+ *(.tbss.*)
+ *(.gnu.linkonce.tb.*)
+ . = ALIGN(0x8);
+ }
+ _tls_end = . + SIZEOF(.tbss);
+
/* Data */
_data = .;
.data : {
--
2.21.0
_______________________________________________
Minios-devel mailing list
Minios-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/minios-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |