diff options
author | Elliott Hughes <enh@google.com> | 2016-02-10 15:48:52 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2016-02-10 15:48:53 +0000 |
commit | 8fa00a5836b49bbacfd08151edb039ed7c6db21d (patch) | |
tree | 826bb1a5645bcfc2198815af06e35bd0573c4260 | |
parent | 4c3cf4ad4d0b04d36b9e2ec3efeb0147f9c02dd3 (diff) | |
parent | 01b85d5df3744449471b327d7afd6c1d5854bd11 (diff) |
Merge "Set x86 TLS limit to 0xfffff, not PAGE_SIZE."
-rw-r--r-- | libc/Android.mk | 2 | ||||
-rw-r--r-- | libc/arch-x86/bionic/__set_tls.cpp (renamed from libc/arch-x86/bionic/__set_tls.c) | 8 | ||||
-rw-r--r-- | libc/bionic/pthread_create.cpp | 2 |
3 files changed, 6 insertions, 6 deletions
diff --git a/libc/Android.mk b/libc/Android.mk index ee352eb04..42f717eaf 100644 --- a/libc/Android.mk +++ b/libc/Android.mk @@ -675,7 +675,7 @@ LOCAL_SRC_FILES := \ bionic/__stack_chk_fail.cpp \ LOCAL_SRC_FILES_arm64 := arch-arm64/bionic/__set_tls.c -LOCAL_SRC_FILES_x86 := arch-x86/bionic/__set_tls.c +LOCAL_SRC_FILES_x86 := arch-x86/bionic/__set_tls.cpp LOCAL_SRC_FILES_x86_64 := arch-x86_64/bionic/__set_tls.c LOCAL_CFLAGS := $(libc_common_cflags) -fno-stack-protector diff --git a/libc/arch-x86/bionic/__set_tls.c b/libc/arch-x86/bionic/__set_tls.cpp index 38ed3c9cf..b26fd564f 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 @@ __LIBC_HIDDEN__ void __init_user_desc(struct user_desc* result, bool allocate, v 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 @@ __LIBC_HIDDEN__ void __init_user_desc(struct user_desc* result, bool allocate, v 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); diff --git a/libc/bionic/pthread_create.cpp b/libc/bionic/pthread_create.cpp index 34826dba6..08d9bed9e 100644 --- a/libc/bionic/pthread_create.cpp +++ b/libc/bionic/pthread_create.cpp @@ -46,7 +46,7 @@ // x86 uses segment descriptors rather than a direct pointer to TLS. #if __i386__ #include <asm/ldt.h> -extern "C" __LIBC_HIDDEN__ void __init_user_desc(struct user_desc*, int, void*); +void __init_user_desc(struct user_desc*, bool, void*); #endif extern "C" int __isthreaded; |