From a2ff21f825adb8821eeb6145197fa8b9a8a60a58 Mon Sep 17 00:00:00 2001 From: Florian Weimer Date: Wed, 3 Aug 2016 16:15:38 +0200 Subject: 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. --- sysdeps/generic/dl-dtv.h | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'sysdeps') diff --git a/sysdeps/generic/dl-dtv.h b/sysdeps/generic/dl-dtv.h index 36c5c58cdd..39d8fe27de 100644 --- a/sysdeps/generic/dl-dtv.h +++ b/sysdeps/generic/dl-dtv.h @@ -19,15 +19,17 @@ #ifndef _DL_DTV_H #define _DL_DTV_H +struct dtv_pointer +{ + void *val; /* Pointer to data, or TLS_DTV_UNALLOCATED. */ + void *to_free; /* Unaligned pointer, for deallocation. */ +}; + /* Type for the dtv. */ typedef union dtv { size_t counter; - struct - { - void *val; - bool is_static; - } pointer; + struct dtv_pointer pointer; } dtv_t; /* Value used for dtv entries for which the allocation is delayed. */ -- cgit v1.2.3