From patchwork Tue Dec 13 12:28:41 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Szabolcs Nagy X-Patchwork-Id: 18425 Received: (qmail 101013 invoked by alias); 13 Dec 2016 12:28:58 -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 101000 invoked by uid 89); 13 Dec 2016 12:28:57 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.8 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=2x, 4x, 5x, 1x X-HELO: EUR03-AM5-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Szabolcs.Nagy@arm.com; Message-ID: <584FE979.3060001@arm.com> Date: Tue, 13 Dec 2016 12:28:41 +0000 From: Szabolcs Nagy User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:31.0) Gecko/20100101 Thunderbird/31.8.0 MIME-Version: 1.0 To: GNU C Library CC: Subject: [PATCH v3] Test case for BZ 19329 X-ClientProxiedBy: DB5PR08CA0073.eurprd08.prod.outlook.com (10.166.166.169) To AM5PR0802MB2484.eurprd08.prod.outlook.com (10.175.42.151) X-MS-Office365-Filtering-Correlation-Id: 32beef3c-c4d0-4276-ab89-08d423539480 X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001); SRVR:AM5PR0802MB2484; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2484; 3:LfAdFv7p/w1xpajD8WH1CNuh4bMBY5TSc/UghKXeSvdT7MtxZvd8JXHNC/tcuFlrFg4aenGo7pSPQDTEIzX5c6R3fr90TF+vCyT18Qcfcdor6rxS35DKU3VaIwkbXy3FG/SS8s1oaSuBPfBPD18L+oE7ES4dQCDrluN5BpqcwULrr48pIxFObmrhMPe4iqnMA82RTVMRDW86mNqV7wMrIxPAJWIySr0o7adangv5o+SFO0EALNrVtiJeVCTUmcd5n+7THQF31Ttpsf71AK+8KA== X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2484; 25:LoiHCpSn6wct4d/nonqnXrVJ0ZC6vAL99+LXj3Hrr7yGkr8HRLUVDv+bkoADl88vgnlWGD6nU6teQP+zSE7FuhlB6QiY7q1S8aDqU1lL3i2GT0KRwN61cdSNYvI4/55wGOkNgh7mlbXj7hJ8JhVvFL4/dn3IQeeQegX0FAu8G0wpkEYJSpXBdpBzwyK7geceVQq0bD6TVUkVGyAJ28HFlfIPgvYl/l5aD6s59wJ4vGWqB2RCOwitYpCg1oQ59hog8eCpw4tpFEUQteBhd7HVT6fgzj3NkUR7iPujdEV1hO+bNoEII2QwYyxgbkaznYye83BkBhMEbgoc4kq7L8rHK24CPI64ZYyL2gFjY9keVjz/nbdtvu3WZNS0R9SWXkri2BqMkizVYFWCvlRyhwo0LqlupZ2Yl5awgfdA+9Fv/svGZKR0ueGf7m9sVD3HZHPJiKVcCfKRYduXjnkCsgr3XR7N8YWCBIHtK+qcJ2GBSOQf6+CcIHHUcp7Ofn7P+Xb/s1t3fJjCFjCy6d0DO9meetdgXhit9yNqwfgtea4Qmtqv13q3VnT4PHm+UmRIlYMo3cqW+Rkbw7cBDCjqk6HFmmTOUTHMfN4a0QfMp85jSbpf8vehdIs3TH3/OBTABdoPpnugkMc97RwHeM83Xhc5T7I1GOF88koxYpqjsdfBlG0VbltFJl4SPXnExts6IG2LyodOJYLKDlIuUFE45ghZtAN82WFOHiQ81x0p0Jr/TKEF1w7Otj2j8okPGI/8Pn5T9s5VR69xkww69EiYzWR6P53r2HVg9eKyNQXSI0uZ4J2rzaIObOMc8bjOg51+v1mfpcBHbj68rnOdb6DWDdegiQ== X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2484; 31:F1BKxE1n0EVe87rcduSc7GOMEhhJR5N3+p0ldptQ3ZeuGh4gUnf7ii5w6x4lZFdbZiHEBIPOPv/ZUSCBjDhmW3+nDvMe12uebJpDdz4HxAsUSWA6LcQLuhmdGKccXTZcLQ/1XWkOfYV69qvalAsV+WQ35hoMI8YrgGljyMaUg+A7kO65QmNwq3pBZpXo9B+6D9um0I+eSrWW/ig/M11LzAE9mlHW+QBt1a70qoUJeLEo6OIJStPBi2GMw6gWhbK0utMTab5zs4/Ra8jUQgwqRdrqulX59/Y0FbjfDdoaH6o=; 20:OEQjewvieF2sZswziS+3qc2we5rq9obncyuHbGbSfsbeCWpSvSM82EDa+FSrWD8kQ8xBO0I/FqfzEODwhhuVQ8HiWrLxj5nGLGtuVDLn1eeC9Xa2622M6TZIPhTnWRX+VexcQ8Njlu6UspVR7yxvl7HZQE7Gx652upJnLCq/fcY= NoDisclaimer: True X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(102415395)(6040375)(601004)(2401047)(8121501046)(5005006)(3002001)(10201501046)(6055026)(6041248)(20161123560025)(20161123555025)(20161123562025)(20161123564025)(6072148); SRVR:AM5PR0802MB2484; BCL:0; PCL:0; RULEID:; SRVR:AM5PR0802MB2484; X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2484; 4:ir5xu31634aNRzeOKnLyVzybYN1s5IrJG7lDj/TgraDtYF1fzC7MQkkIlpr6Za49H8sRd7hpKYgx6+DCW9XSAIUVoSKQ7QDbz5Jlz1be2C6K7V6IOXdph9aqOF8yXyM+Hf4kxdseLwqleQIjSoE5NcMcE/LX0sVRX3LyIQGABc0XtrBy5xcXLTE7LC2T6KMAKopM6G7/cpHvgFeZVcFTJwbNUpAw8exHP0kqFwUgeo50llWH1C9R0dqhHjbUi9Fbw+OAzo+0VLKVejS+xEJ2OPc1oOVKZMiB/9vWSU3CUnK3bgdcCSUbkDlihZ/UVrAO4e27MR7IIUphqIxQ4cdKZrAbZBiFor8qXdXBqjAhTPZl3dzB64xQsy1+7FwPLhKBDbY2F8yDM7q8SpURlJda1uPaOTQQh+PbgD7F+e62FlF97fYoWXlKQBJzX2YJZ1yEwtI4syQ7iOnUZWeHCrpZU1KOVM+j82tHHNum7CR+3AjLGCp+rLIMaCH7VVWTLnbtdBjSBosbWejAEVn8hEoJs389B3ed7ICWKUqtEKWs/2DLYAv4e0YmRdBOZT50luaZATVpocHJG5sI4vCMjm4gTMulPc1xICvtT6qLa5l+QkeIsbW913CEbAx4i7KYPVWJCMTAvwnquVPip7gnP6dR9w== X-Forefront-PRVS: 01559F388D X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(4630300001)(6049001)(6009001)(7916002)(39410400002)(39840400002)(39450400003)(39860400002)(39850400002)(377424004)(199003)(189002)(36756003)(106356001)(90366009)(66066001)(450100001)(97736004)(65956001)(4326007)(4001350100001)(50986999)(189998001)(54356999)(568964002)(4001150100001)(81156014)(87266999)(65816999)(101416001)(65806001)(42186005)(33656002)(305945005)(68736007)(7736002)(81166006)(80316001)(270700001)(6116002)(5660300001)(5000100001)(6486002)(512874002)(21490400002)(64126003)(2476003)(110136003)(2906002)(59896002)(8676002)(84326002)(4610100001)(6916009)(3846002)(83506001)(105586002)(38730400001)(77096006)(6666003)(86362001)(5890100001)(92566002); DIR:OUT; SFP:1101; SCL:1; SRVR:AM5PR0802MB2484; H:[10.2.206.73]; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; Received-SPF: None (protection.outlook.com: arm.com does not designate permitted sender hosts) X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1; AM5PR0802MB2484; 23:2ODvi45C51LEkues4KC+MNkTXnyAE8RI4h06Viw?= =?us-ascii?Q?/yAWES3+xp6NW0bYNJR8njNNf1qdkqAqj7RGH0fayn7fKlrR6XFU1xXzKrAJ?= =?us-ascii?Q?w4n1Tl6C2n+t/yofw9Ga9QOddnH9vyb7ehgLmgX3GI7KWc1WijLaMPetS+T5?= =?us-ascii?Q?yY2WWRobFBNiE9k7ZQdKOzA0vKgaBcc0qstJjd/LWyyi8aIUkCmgCzdJaTeL?= =?us-ascii?Q?iloS+LXSlWsSxU3aXz7x2fZgp5Al4hJZbPQuGHbTQLYITsn+5mbR3plcQUaL?= =?us-ascii?Q?g6VE8+im2wi9gMjHfonfMXpSc1PgYivr0gO7V1XL3W0wPWDq2B7a560esPcd?= =?us-ascii?Q?215Ah/pKiPmoAtjJv7wH8/m7fvUyXCk9Z3J1g6MDKwy0v5fxjArhgQHyO+J6?= =?us-ascii?Q?Q3j0az+iRlvB+M7WdtYa2EQIkK2QG5llD/rZTeNToSirrI+T/ZXKBqfxqtjU?= =?us-ascii?Q?g72g3PjJaBwljZ/s03CnQvmo2gNnLbxPMxme7uNlCwqqWoELTYRNiU3+BrHx?= =?us-ascii?Q?ch4FBR41MxkTcKZthKQPnWzJsprdeQ74wrUHDM4rkfq02JR68vzIk44T2AAy?= =?us-ascii?Q?bdRY2XRicdLU3K53P6CEO7KdaFn3Sp4eVxUBPxe9leWTSV7ykG397CSHgxol?= =?us-ascii?Q?IGLzvD1lRRRcQkT8NZnzaD/PTLP1NmLCN9mVBP1SkxLDdl20SctX8GbJyqBa?= =?us-ascii?Q?JgR1iDiqKGgfgUAo4aAvAOapcVJhiJxuq6Ul31gEzjywQn7aNQ5VDVOnBu2s?= =?us-ascii?Q?ik2umC38MFdZeAgBKh1CFLthUjh6jfkreX3wXpgY09fSp04on8K4MmWqbGA+?= =?us-ascii?Q?d7qR+GMzdBgfQXwOWGZjUW9h9zVM4Op0Rf5FCvpxLmkmMD1L0y09BNALF/NX?= =?us-ascii?Q?CbTBBFCMG4qojLQp89sxOfzCp3u1a9m9Yv7pzREvj1O6tS/3b631gaTMMCc2?= =?us-ascii?Q?CEATiQCiGZuiuEGOi2FflvFuqQpff1W6f/zp/5GFwpUcu/Et2SJSWBkXQb/r?= =?us-ascii?Q?zh9p9a8SMb1auSxYjpdxqBXkBtXD6aYnX9Ym3YtzUX11+arRZgHZDaCrRXUQ?= =?us-ascii?Q?uOnr5g6VOOQLA8qGyaHwh+dbXgLhB09ajVfHEX35LFHMEsIQLZEoVkqvTJrQ?= =?us-ascii?Q?K6cTnQPbV59f6ZLiGRFH7pSSauZnqD3VcoelGkxuZYdAAoUNb99yosb6Q/F4?= =?us-ascii?Q?YSTEqrVDcc4EYO3t11A75U+D5nvVq4VfIQA68RhHwewg2Ud5IX6+L+Fp1qlU?= =?us-ascii?Q?K54h0V313gRkyUmlSb1UjFLKZN4WP4ODKGoF05UF+FRKLO1R7bP9no0zG85e?= =?us-ascii?Q?yky8GVHF+HiBw6LRrNbq8HM/rLj+xEVa9ZtaSMzlU1UJpl+hYMhs2O8Z8/d8?= =?us-ascii?Q?T+WnT1o8HgFh8s5o7K2wyouI3K9nVDPRdkiBjPKJxMXKq7sO7X98t1iqDZez?= =?us-ascii?Q?g9Pp+e49xEWmbDbQyIE0QKfrI4jrlkUpPPNYanSO8qCICMYpuzj2kHoRinbQ?= =?us-ascii?Q?rPnNz1XSmmEqcZfrtk10XKceT3ll51N6g4za5w1WzxEHMSJBS4Ju2NuY0S5P?= =?us-ascii?Q?FaVN6c/7DZj+R29Q0Lg=3D=3D?= X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2484; 6:xFgpEH3FaR7BMl1uWQlEoI3sGaz0sbZ5MlR3VW8cKP/UFG18ENen3ZK0CeMYqINHAAi/HM+DrvsTcSdykAQDvQUS+fNnzeLB8eEbmx1nF+cUyCN6QI/+k6tlRABSOaJNr0KbpEMuvnvuW29oMv8wMiRjhDWIjRSTy6XD9+j32ygdyV49FSUyhdfjxrBFDUPe4Y5PKlUf4lIUFZuQtC0aL2zHqBxh8NiN1QKm8dXU/iIZgT6ZNO/XJWNbkb7Z/0Xm9PpP8AvDp7wR+yPd27/wub+R9EGXQ0Dq3QUHYnUt82wMMbcFYpowT65BHVlKTOYe37f6yso59MxWqCq5qmw7oWwBKEbX7aYBj7S9Q41zGQdE7hsGOOCBDcb8SiUrxuSpMIs1AcWZWlGRdTMYhzoQBEsZ/NNbk/e10KX9EglMhFpLKYbRPxTR/wLRyLKYE4+HqxrUvQy7V77aag8MyIkmGQ==; 5:yxdNeSzQuMrxp74hsK+2jeEvcJVj3i/t9zTma3Zsox3KhIzJcGZnjpfjMLRvmbcAU73V+YlrQ+BkeW7CjY3RYFzaRmyS+MzYzP5HO0ayG4eNjaQsFBFigqG9VyEdf4V8W2x3lazaRZjAjR+mPkf9hQ==; 24:BuxRwzvWNHHs8KQtPDNq7amY2cSAwaM+8P/sSeVo/thYvpyiIM9nc7HpogTDaqQR5TYt3+VHdHtajWJ7O7OjCxvIQW/LIqbXTw5emnCXdn0= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1; AM5PR0802MB2484; 7:4OTb2w8tOYeC5i6xB1aBDuANHZ7tdzsw7QJNU4WuR8s+qGSQXaso2/k/BJc7Oaa0hzr4u1bOeeuns1+mHz20q1r2IyO0RrS0/Bdd7tx2IpSu5RJPWHTnkSycYCQFJXvKQfbpc3nn4SLXfI4GlsrZL5UYYTsGtwBQ/k0w6JhNgzW9kGgsCHy+gyX8aWf2oM5XywGUe/tQIRw/O6yVWzAreS52oby/zU/jbsugvpmAGW+mPn7pFyOUpwiAdlUoK9Dej9gG4RUaU0ZvwppVOfpHbMG73wZ5Kb1NNJFToIucW00BWHwu5LAkqugzyJ2da+yS/HDCOTxNH3ADtqcWnqRh3JYAsUaoyJ463K8WDINMOjlGmi7/4M55Vy6WRqRe5zn50rExjnqw718H+FjQoiezfP4Yaog2P9Sg5Wns/MZhyD8NVx/7rumqSZwFzuUtdhv3GdfYkPHSPK1heX9nXxrCxQ== X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 13 Dec 2016 12:28:44.4308 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM5PR0802MB2484 Test concurrent dlopen and pthread_create when the loaded modules have TLS. This triggers dl-tls assertion failures more reliably than the tst-stack4 test. The dlopened module has 100 DT_NEEDED dependencies, the number of concurrent threads created during dlopen depends on filesystem speed and hardware. Doing the test in a fork loop can make it more reliable. v2: - undef NDEBUG. - join nop threads so at most 3 threads exist at a time. - remove stack size setting (resource usage is no longer a concern). - stop creating threads after dlopen observably finished. - print the number of threads created for debugging. v3: - use the new test support code. - better Makefile usage so modules are cleaned properly. 2016-12-13 Szabolcs Nagy * nptl/Makefile (tests): Add tst-tls7. (modules-names): Add tst-tls7mod, tst-tls7mod-dep. * nptl/tst-tls7.c: New file. * nptl/tst-tls7mod-dep.c: New file. * nptl/tst-tls7mod.c: New file. diff --git a/nptl/Makefile b/nptl/Makefile index 7ac9196..d942b54 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -345,20 +345,24 @@ tests += tst-cancelx2 tst-cancelx3 tst-cancelx4 tst-cancelx5 \ tst-oncex3 tst-oncex4 ifeq ($(build-shared),yes) tests += tst-atfork2 tst-tls3 tst-tls3-malloc tst-tls4 tst-tls5 tst-_res1 \ - tst-fini1 tst-stackguard1 + tst-fini1 tst-stackguard1 tst-tls7 tests-nolibpthread += tst-fini1 ifeq ($(have-z-execstack),yes) tests += tst-execstack endif endif +one-hundred = $(foreach x,0 1 2 3 4 5 6 7 8 9, \ + 0$x 1$x 2$x 3$x 4$x 5$x 6$x 7$x 8$x 9$x) +tst-tls7mod-deps = $(one-hundred:%=tst-tls7mod-dep-%.so) + modules-names = tst-atfork2mod tst-tls3mod tst-tls4moda tst-tls4modb \ tst-tls5mod tst-tls5moda tst-tls5modb tst-tls5modc \ tst-tls5modd tst-tls5mode tst-tls5modf tst-stack4mod \ tst-_res1mod1 tst-_res1mod2 tst-execstack-mod tst-fini1mod \ - tst-join7mod + tst-join7mod tst-tls7mod tst-tls7mod-dep extra-test-objs += $(addsuffix .os,$(strip $(modules-names))) \ - tst-cleanup4aux.o tst-cleanupx4aux.o + tst-cleanup4aux.o tst-cleanupx4aux.o $(tst-tls7mod-deps) test-extras += $(modules-names) tst-cleanup4aux tst-cleanupx4aux test-modules = $(addprefix $(objpfx),$(addsuffix .so,$(modules-names))) @@ -563,6 +567,12 @@ $(objpfx)tst-tls5: $(objpfx)tst-tls5mod.so $(shared-thread-library) LDFLAGS-tst-tls5 = $(no-as-needed) LDFLAGS-tst-tls5mod.so = -Wl,-soname,tst-tls5mod.so +$(objpfx)tst-tls7: $(libdl) $(shared-thread-library) +$(objpfx)tst-tls7.out: $(objpfx)tst-tls7mod.so +$(objpfx)tst-tls7mod.so: $(tst-tls7mod-deps:%=$(objpfx)%) +$(tst-tls7mod-deps:%=$(objpfx)%): $(objpfx)tst-tls7mod-dep.so + cp -f $< $@ + ifeq ($(build-shared),yes) $(objpfx)tst-tls6.out: tst-tls6.sh $(objpfx)tst-tls5 \ $(objpfx)tst-tls5moda.so $(objpfx)tst-tls5modb.so \ diff --git a/nptl/tst-tls7.c b/nptl/tst-tls7.c new file mode 100644 index 0000000..f221ed2 --- /dev/null +++ b/nptl/tst-tls7.c @@ -0,0 +1,69 @@ +/* Test concurrent dlopen and pthread_create: BZ 19329. + Copyright (C) 2016 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 + . */ + +#include +#include +#include +#include + +#include + +#define THREADS 10000 + +static volatile int done; + +static void * +start (void *a) +{ + if (dlopen ("tst-tls7mod.so", RTLD_LAZY) == NULL) + { + printf ("dlopen failed: %s\n", dlerror ()); + exit (1); + } + atomic_store_relaxed (&done, 1); + return 0; +} + +static void * +nop (void *a) +{ + return 0; +} + +static int +do_test (void) +{ + pthread_t t1, t2; + int i; + + /* Load a module with lots of dependencies and TLS. */ + t1 = xpthread_create (0, start, 0); + + /* Concurrently create lots of threads until dlopen is observably done. */ + for (i = 0; i < THREADS && !atomic_load_relaxed (&done); i++) + { + t2 = xpthread_create (0, nop, 0); + xpthread_join (t2); + } + + xpthread_join (t1); + printf ("threads created during dlopen: %d\n", i); + return 0; +} + +#include diff --git a/nptl/tst-tls7mod-dep.c b/nptl/tst-tls7mod-dep.c new file mode 100644 index 0000000..206ece4 --- /dev/null +++ b/nptl/tst-tls7mod-dep.c @@ -0,0 +1 @@ +int __thread x; diff --git a/nptl/tst-tls7mod.c b/nptl/tst-tls7mod.c new file mode 100644 index 0000000..206ece4 --- /dev/null +++ b/nptl/tst-tls7mod.c @@ -0,0 +1 @@ +int __thread x;