From patchwork Sat Jun 21 02:53:59 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Roland McGrath X-Patchwork-Id: 1642 Received: (qmail 17205 invoked by alias); 21 Jun 2014 02:54:04 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 17192 invoked by uid 89); 21 Jun 2014 02:54:03 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL, BAYES_00 autolearn=ham version=3.3.2 X-HELO: topped-with-meat.com MIME-Version: 1.0 From: Roland McGrath To: "GNU C. Library" Subject: [COMMITTED PATCH] Clean up stack-coloring macros. Message-Id: <20140621025400.0EAFA2C39AE@topped-with-meat.com> Date: Fri, 20 Jun 2014 19:53:59 -0700 (PDT) X-CMAE-Score: 0 X-CMAE-Analysis: v=2.1 cv=SvUDtp+0 c=1 sm=1 tr=0 a=WkljmVdYkabdwxfqvArNOQ==:117 a=14OXPxybAAAA:8 a=jQwOSpt7SUQA:10 a=Z6MIti7PxpgA:10 a=kj9zAlcOel0A:10 a=hOe2yjtxAAAA:8 a=mDV3o1hIAAAA:8 a=20KFwNOVAAAA:8 a=dvTNN2VJ_KI2BV7HK-wA:9 a=aa4nJdIJGONPHSkB:21 a=wsSgqIyr51Xf52Gn:21 a=CjuIK1q_8ugA:10 a=jEp0ucaQiEUA:10 Adding -D switches in sysdeps/.../Makefile is (almost?) always the wrong thing to do. It creates an implicit dependency not tracked by Make, and it is usually not typo-proof and/or -Wundef-friendly. This change gets rid of -Wundef warnings for these two macros. Verified on x86_64-linux-gnu and i686-linux-gnu that no code changes (except some assert line numbers). * nptl/allocatestack.c: Include . * nptl/stack-aliasing.h: New file. * sysdeps/i386/i686/stack-aliasing.h: New file. * sysdeps/i386/i686/nptl/Makefile: File removed. * sysdeps/x86_64/stack-aliasing.h: New file. * sysdeps/x86_64/nptl/Makefile (CFLAGS-pthread_create.c): Variable removed. --- a/nptl/allocatestack.c +++ b/nptl/allocatestack.c @@ -30,6 +30,7 @@ #include #include #include +#include #ifndef NEED_SEPARATE_REGISTER_STACK --- /dev/null +++ b/nptl/stack-aliasing.h @@ -0,0 +1,29 @@ +/* Define macros for stack address aliasing issues for NPTL. Stub version. + Copyright (C) 2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* 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 + 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 + size off-aligned. */ +#define MULTI_PAGE_ALIASING 0 --- a/sysdeps/i386/i686/nptl/Makefile +++ /dev/null @@ -1,31 +0,0 @@ -# Copyright (C) 2003-2014 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by Ulrich Drepper , 2002. - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 of the License, or (at your option) any later version. - -# The GNU C Library is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library; if not, see -# . - -ifeq ($(subdir),nptl) -# 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. Enabling coloring can be done with -# -# -DCOLORING_INCREMENT=128 -# -# 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 -# the stack allocator to disturb this by allocation one more page if -# necessary. -CFLAGS-pthread_create.c += -DMULTI_PAGE_ALIASING=65536 -endif --- /dev/null +++ b/sysdeps/i386/i686/stack-aliasing.h @@ -0,0 +1,28 @@ +/* Define macros for stack address aliasing issues for NPTL. i686 version. + Copyright (C) 2014 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, see + . */ + +/* 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 + 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 + necessary. */ +#define MULTI_PAGE_ALIASING 65536 --- a/sysdeps/x86_64/nptl/Makefile +++ b/sysdeps/x86_64/nptl/Makefile @@ -18,10 +18,3 @@ ifeq ($(subdir),csu) gen-as-const-headers += tcb-offsets.sym endif - -ifeq ($(subdir),nptl) -# P4s have problems with 4M aliasing. We disturb the allocation of stacks -# just enough so the subsequent allocations do not use stack address -# (mod 4M) == 0. -CFLAGS-pthread_create.c += -DMULTI_PAGE_ALIASING=65536 -endif --- /dev/null +++ b/sysdeps/x86_64/stack-aliasing.h @@ -0,0 +1 @@ +#include