Set x86 TLS limit to 0xfffff, not PAGE_SIZE.
Not least because we set limit_in_pages to 1. PAGE_SIZE pages was never
anyone's intention.
Change-Id: Ide867f44a2fb20d4d5d0cd67ced468e8665a0193
diff --git a/libc/arch-x86/bionic/__set_tls.c b/libc/arch-x86/bionic/__set_tls.cpp
similarity index 92%
rename from libc/arch-x86/bionic/__set_tls.c
rename to libc/arch-x86/bionic/__set_tls.cpp
index 38ed3c9..b26fd56 100644
--- a/libc/arch-x86/bionic/__set_tls.c
+++ b/libc/arch-x86/bionic/__set_tls.cpp
@@ -32,7 +32,7 @@
#include <asm/ldt.h>
-extern int __set_thread_area(struct user_desc*);
+extern "C" int __set_thread_area(struct user_desc*);
__LIBC_HIDDEN__ void __init_user_desc(struct user_desc* result, bool allocate, void* base_addr) {
if (allocate) {
@@ -45,9 +45,9 @@
result->entry_number = (gs & 0xffff) >> 3;
}
- result->base_addr = (uintptr_t) base_addr;
+ result->base_addr = reinterpret_cast<uintptr_t>(base_addr);
- result->limit = PAGE_SIZE;
+ result->limit = 0xfffff;
result->seg_32bit = 1;
result->contents = MODIFY_LDT_CONTENTS_DATA;
@@ -57,7 +57,7 @@
result->useable = 1;
}
-__LIBC_HIDDEN__ int __set_tls(void* ptr) {
+extern "C" __LIBC_HIDDEN__ int __set_tls(void* ptr) {
struct user_desc tls_descriptor;
__init_user_desc(&tls_descriptor, true, ptr);