about summary refs log tree commit diff
path: root/ChangeLog
diff options
context:
space:
mode:
authorFlorian Weimer <fweimer@redhat.com>2016-08-03 16:15:38 +0200
committerFlorian Weimer <fweimer@redhat.com>2016-08-03 16:15:38 +0200
commita2ff21f825adb8821eeb6145197fa8b9a8a60a58 (patch)
tree65f74b90eb0a005a278f80586b0ee001d358021b /ChangeLog
parent5bc17330eb7667b96fee8baf3729c3310fa28b40 (diff)
downloadglibc-a2ff21f825adb8821eeb6145197fa8b9a8a60a58.tar.gz
glibc-a2ff21f825adb8821eeb6145197fa8b9a8a60a58.tar.xz
glibc-a2ff21f825adb8821eeb6145197fa8b9a8a60a58.zip
elf: Avoid using memalign for TLS allocations [BZ #17730]
Instead of a flag which indicates the pointer can be freed, dtv_t
now includes the pointer which should be freed.  Due to padding,
the size of dtv_t does not increase.

To avoid using memalign, the new allocate_dtv_entry function
allocates a sufficiently large buffer so that a sub-buffer
can be found in it which starts with an aligned pointer.  Both
the aligned and original pointers are kept, the latter for calling
free later.
Diffstat (limited to 'ChangeLog')
-rw-r--r--ChangeLog22
1 files changed, 22 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index f222c13ceb..5bc45b5e91 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,27 @@
 2016-08-03  Florian Weimer  <fweimer@redhat.com>
 
+	[BZ #17730]
+	Avoid using memalign for TLS allocations.
+	* sysdeps/generic/dl-dtv.h (struct dtv_pointer): New.  Replaces
+	is_static member with to_free member.
+	(union dtv): Use struct dtv_pointer.
+	* csu/libc-tls.c (__libc_setup_tls): Set to_free member of struct
+	dtv_pointer instead of is_static.
+	* elf/dl-tls.c (_dl_allocate_tls_init): Likewise.
+	(_dl_deallocate_tls): Free to_free member of struct dtv_pointer
+	instead of val.
+	(allocate_dtv_entry): New function.
+	(allocate_and_init): Return struct dtv_pointer.  Call
+	allocate_dtv_entry instead of __libc_memalign.
+	(_dl_update_slotinfo): Free to_free member of struct dtv_pointer
+	instead of val.
+	(tls_get_addr_tail): Set to_free member of struct dtv_pointer
+	instead of is_static.  Adjust call to allocate_and_init.
+	* nptl/allocatestack.c (get_cached_stack): Free to_free member of
+	struct dtv_pointer instead of val.
+
+2016-08-03  Florian Weimer  <fweimer@redhat.com>
+
 	* malloc/malloc.c (INTERNAL_SIZE_T, SIZE_SZ, MALLOC_ALIGNMENT)
 	(MALLOC_ALIGN_MASK): Move ...
 	* malloc/malloc-internal.h: ... to here.