mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-29 11:41:21 +03:00
nptl: Remove COLORING_INCREMENT
This patch removes the COLORING_INCREMENT define and usage on allocatestack.c.
It has not been used since 564cd8b67e
(glibc-2.3.3) by any architecture.
The idea is to simplify the code by removing obsolete code.
* nptl/allocatestack.c [COLORING_INCREMENT] (nptl_ncreated): Remove.
(allocate_stack): Remove COLORING_INCREMENT usage.
* nptl/stack-aliasing.h (COLORING_INCREMENT). Likewise.
* sysdeps/i386/i686/stack-aliasing.h (COLORING_INCREMENT): Likewise.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2016-02-06 Adhemerval Zanella <adhemerval.zanella@linaro.org>
|
||||||
|
|
||||||
|
* nptl/allocatestack.c [COLORING_INCREMENT] (nptl_ncreated): Remove.
|
||||||
|
(allocate_stack): Remove COLORING_INCREMENT usage.
|
||||||
|
* nptl/stack-aliasing.h (COLORING_INCREMENT). Likewise.
|
||||||
|
* sysdeps/i386/i686/stack-aliasing.h (COLORING_INCREMENT): Likewise.
|
||||||
|
|
||||||
2017-02-06 Joseph Myers <joseph@codesourcery.com>
|
2017-02-06 Joseph Myers <joseph@codesourcery.com>
|
||||||
|
|
||||||
* manual/libm-err-tab.pl (@all_functions): Change to
|
* manual/libm-err-tab.pl (@all_functions): Change to
|
||||||
|
@ -125,11 +125,6 @@ static uintptr_t in_flight_stack;
|
|||||||
list_t __stack_user __attribute__ ((nocommon));
|
list_t __stack_user __attribute__ ((nocommon));
|
||||||
hidden_data_def (__stack_user)
|
hidden_data_def (__stack_user)
|
||||||
|
|
||||||
#if COLORING_INCREMENT != 0
|
|
||||||
/* Number of threads created. */
|
|
||||||
static unsigned int nptl_ncreated;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
/* Check whether the stack is still used or not. */
|
/* Check whether the stack is still used or not. */
|
||||||
#define FREE_P(descr) ((descr)->tid <= 0)
|
#define FREE_P(descr) ((descr)->tid <= 0)
|
||||||
@ -467,14 +462,6 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
|
|||||||
const int prot = (PROT_READ | PROT_WRITE
|
const int prot = (PROT_READ | PROT_WRITE
|
||||||
| ((GL(dl_stack_flags) & PF_X) ? PROT_EXEC : 0));
|
| ((GL(dl_stack_flags) & PF_X) ? PROT_EXEC : 0));
|
||||||
|
|
||||||
#if COLORING_INCREMENT != 0
|
|
||||||
/* Add one more page for stack coloring. Don't do it for stacks
|
|
||||||
with 16 times pagesize or larger. This might just cause
|
|
||||||
unnecessary misalignment. */
|
|
||||||
if (size <= 16 * pagesize_m1)
|
|
||||||
size += pagesize_m1 + 1;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Adjust the stack size for alignment. */
|
/* Adjust the stack size for alignment. */
|
||||||
size &= ~__static_tls_align_m1;
|
size &= ~__static_tls_align_m1;
|
||||||
assert (size != 0);
|
assert (size != 0);
|
||||||
@ -513,34 +500,11 @@ allocate_stack (const struct pthread_attr *attr, struct pthread **pdp,
|
|||||||
So we can never get a null pointer back from mmap. */
|
So we can never get a null pointer back from mmap. */
|
||||||
assert (mem != NULL);
|
assert (mem != NULL);
|
||||||
|
|
||||||
#if COLORING_INCREMENT != 0
|
|
||||||
/* Atomically increment NCREATED. */
|
|
||||||
unsigned int ncreated = atomic_increment_val (&nptl_ncreated);
|
|
||||||
|
|
||||||
/* We chose the offset for coloring by incrementing it for
|
|
||||||
every new thread by a fixed amount. The offset used
|
|
||||||
module the page size. Even if coloring would be better
|
|
||||||
relative to higher alignment values it makes no sense to
|
|
||||||
do it since the mmap() interface does not allow us to
|
|
||||||
specify any alignment for the returned memory block. */
|
|
||||||
size_t coloring = (ncreated * COLORING_INCREMENT) & pagesize_m1;
|
|
||||||
|
|
||||||
/* Make sure the coloring offsets does not disturb the alignment
|
|
||||||
of the TCB and static TLS block. */
|
|
||||||
if (__glibc_unlikely ((coloring & __static_tls_align_m1) != 0))
|
|
||||||
coloring = (((coloring + __static_tls_align_m1)
|
|
||||||
& ~(__static_tls_align_m1))
|
|
||||||
& ~pagesize_m1);
|
|
||||||
#else
|
|
||||||
/* Unless specified we do not make any adjustments. */
|
|
||||||
# define coloring 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Place the thread descriptor at the end of the stack. */
|
/* Place the thread descriptor at the end of the stack. */
|
||||||
#if TLS_TCB_AT_TP
|
#if TLS_TCB_AT_TP
|
||||||
pd = (struct pthread *) ((char *) mem + size - coloring) - 1;
|
pd = (struct pthread *) ((char *) mem + size) - 1;
|
||||||
#elif TLS_DTV_AT_TP
|
#elif TLS_DTV_AT_TP
|
||||||
pd = (struct pthread *) ((((uintptr_t) mem + size - coloring
|
pd = (struct pthread *) ((((uintptr_t) mem + size
|
||||||
- __static_tls_size)
|
- __static_tls_size)
|
||||||
& ~__static_tls_align_m1)
|
& ~__static_tls_align_m1)
|
||||||
- TLS_PRE_TCB_SIZE);
|
- TLS_PRE_TCB_SIZE);
|
||||||
|
@ -16,12 +16,6 @@
|
|||||||
License along with the GNU C Library; if not, see
|
License along with the GNU C Library; if not, see
|
||||||
<http://www.gnu.org/licenses/>. */
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
/* This is a number of bytes (less than a page) by which to "color" the
|
|
||||||
starting stack address of new threads. This number is multiplied by the
|
|
||||||
number of threads created so far and then truncated modulo page size,
|
|
||||||
to get a roughly even distribution of values for different threads. */
|
|
||||||
#define COLORING_INCREMENT 0
|
|
||||||
|
|
||||||
/* This is a number of bytes that is an alignment that should be avoided
|
/* This is a number of bytes that is an alignment that should be avoided
|
||||||
when choosing the exact size of a new thread's stack. If the size
|
when choosing the exact size of a new thread's stack. If the size
|
||||||
chosen is aligned to this, an extra page will be added to render the
|
chosen is aligned to this, an extra page will be added to render the
|
||||||
|
@ -16,11 +16,6 @@
|
|||||||
License along with the GNU C Library; if not, see
|
License along with the GNU C Library; if not, see
|
||||||
<http://www.gnu.org/licenses/>. */
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
/* It turns out that stack coloring is in general not good on P4s. Some
|
|
||||||
applications will benefit. We will probably have a configuration option
|
|
||||||
at some point. To enable coloring, set this to 128. */
|
|
||||||
#define COLORING_INCREMENT 0
|
|
||||||
|
|
||||||
/* What is useful is to avoid the 64k aliasing problem which reliably
|
/* What is useful is to avoid the 64k aliasing problem which reliably
|
||||||
happens if all stacks use sizes which are a multiple of 64k. Tell
|
happens if all stacks use sizes which are a multiple of 64k. Tell
|
||||||
the stack allocator to disturb this by allocation one more page if
|
the stack allocator to disturb this by allocation one more page if
|
||||||
|
Reference in New Issue
Block a user