From patchwork Tue Oct 24 14:31:08 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Szabolcs Nagy X-Patchwork-Id: 23783 Received: (qmail 130262 invoked by alias); 24 Oct 2017 14:31:20 -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 130249 invoked by uid 89); 24 Oct 2017 14:31:19 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-24.8 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, SPF_PASS autolearn=ham version=3.3.2 spammy=mimics X-HELO: EUR01-VE1-obe.outbound.protection.outlook.com Authentication-Results: spf=none (sender IP is ) smtp.mailfrom=Szabolcs.Nagy@arm.com; Message-ID: <59EF4EAC.3000007@arm.com> Date: Tue, 24 Oct 2017 15:31:08 +0100 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: nd@arm.com, Joseph Myers Subject: [PATCH 5/7] [BZ #18572] arm: Disable lazy initialization of tlsdesc entries References: <59EF4CEC.8020301@arm.com> In-Reply-To: <59EF4CEC.8020301@arm.com> X-ClientProxiedBy: VI1PR0101CA0084.eurprd01.prod.exchangelabs.com (2603:10a6:800:1f::52) To DB6PR0802MB2488.eurprd08.prod.outlook.com (2603:10a6:4:a0::23) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: e2ed2421-faa4-46d1-7b7c-08d51aebdfb2 X-MS-Office365-Filtering-HT: Tenant X-Microsoft-Antispam: UriScan:; BCL:0; PCL:0; RULEID:(22001)(48565401081)(4534020)(4602075)(4627075)(201703031133081)(201702281549075)(2017052603199)(49563074); SRVR:DB6PR0802MB2488; X-Microsoft-Exchange-Diagnostics: 1; DB6PR0802MB2488; 3:V0YoLCI8XJgENvSpEpzbrNNI7b4tAJHTs3SArCLa1ERDqSIzc+ocxOdndtkzCS/4xjjkFx7ZLZh3vZodOSmIFZPhzQQRPyfgYUST5UjxUyTW1chgPpIQm58Y9c2kDjU2Z9iCZZRdNjH4hmO4uzblPThx497p86/ZlcLYs6G7xtJqVYz1MnUCzcz7u/J/nD3gkP4thxQxBPUoQi0p9XIfW9+WnWGqK2zvkSGNk9bTi6N6x397RPnAEia7vIPdQ4xl; 25:iVdTXUuYqoiigul3H+4so2eC8D+VBJdnNf5vlOCn8kMb8yBEgWRAbUgj82sTxdVHuQmBMJuuIAqXfle/7Xeu9XRplTHHfUAZqOHcmjdB5/gNzXmHZ6rR7mbhNPLqySMS7AeP5bYOiux3Gp+lHjQae20WUUWmNINQvtIssFJC9B+cANfqs7G5P0iN67PwTAYK3bb0j/dcUm01PR8gk/irN5oGmcGehGxtFYkUhBvW/VdEVqSZnoYr+PXfyvR2kYGFIri4S2pJaGGpx6n1+PTEStbtp481kRlbf6nXD9ecaHbwOyoKrQ1WZ0yYBIR5I3oXL8XCqyR0t8SeclyWF3e5EQ==; 31:QFigQMDMiQZ3DK8gszJedUkvc3E1993/8CGRJQUvRIDrQIfq4cMPGbYASgAOuY2qCgIz364S0QiefzQkQaI63wm2DCyzmtVVh/UuinbOdjpTvWtFOtUYRDpwfftbpPCcor+VTnu/gx5ChFlY1gKjcylu/2jo5p8tm82s1oN2QwziR9nju0xEXFl+T3iOguBFmabxCyos6glkCV+ZcPifSpJZ00LQmH4LYBUIg3xViWY= X-MS-TrafficTypeDiagnostic: DB6PR0802MB2488: NoDisclaimer: True X-Microsoft-Exchange-Diagnostics: 1; DB6PR0802MB2488; 20:+FJBbbFoTf41i/MEHOR6KHx4l/IMVR809FHbboEdW97e2pChP3oiwGEtog/9jvhxPn/VQXQIv0ojfX4gOaqGJPPCMS84WwV23T7pdQsGVIWXORo9y1pWWXGyWyimL39iUBIp2VHB5FuF1qUZOuwh2Uw9Vj2fWzke+q8jlnyJpoo=; 4:jK0iYfEBT3WtKjL1o6dr0IQfb3TPZ05F8TMn2NPhaza1fdS/5ZKckxD2c9OlRwaTQmulz0JzqMFhhjk97v9xS/q3n1UZ1nXVSO6mT7JOjGQQ1qgk+ZD+7drfkqAZC600dXBj24OoLdb4yXpB2jX+UeLwaloZBPoInCbGhTJlGT9au0wXT3YVf/ALnVWjtyWPg7sjpKRMnNceZoh9KK0NAcfjmDIwi1Fg2TNbAjVlbiAQpKeuvI5B03RFHNa5/rB3DtUyanbh9K/aZK7RF1/RKsbVOVUJvE5mF1F69Mik78g= X-Exchange-Antispam-Report-Test: UriScan:(180628864354917); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0; PCL:0; RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(102415395)(6040450)(2401047)(8121501046)(5005006)(3002001)(10201501046)(93006095)(93001095)(3231020)(100000703101)(100105400095)(6055026)(6041248)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123562025)(20161123564025)(20161123555025)(20161123560025)(20161123558100)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095); SRVR:DB6PR0802MB2488; BCL:0; PCL:0; RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095); SRVR:DB6PR0802MB2488; X-Forefront-PRVS: 047001DADA X-Forefront-Antispam-Report: SFV:NSPM; SFS:(10009020)(6049001)(6009001)(346002)(39860400002)(376002)(199003)(189002)(83506002)(316002)(87266999)(68736007)(54356999)(65816999)(5000100001)(16576012)(8936002)(305945005)(7736002)(76176999)(58126008)(3846002)(189998001)(5890100001)(106356001)(72206003)(77096006)(105586002)(81166006)(80316001)(8676002)(16586007)(6116002)(25786009)(81156014)(53936002)(4326008)(6486002)(270700001)(65956001)(66066001)(65806001)(64126003)(478600001)(564344004)(6666003)(568964002)(59896002)(4001150100001)(2476003)(50986999)(36756003)(33656002)(6916009)(101416001)(2950100002)(97736004)(84326002)(2906002)(16526018)(86362001)(5660300001)(4610100001); DIR:OUT; SFP:1101; SCL:1; SRVR:DB6PR0802MB2488; H:[10.2.206.69]; 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; DB6PR0802MB2488; 23:B98Ft19FHlIQc8biTkrukMho8Lm2rsCZW5PgZvP?= =?us-ascii?Q?o8T6UNjVPgodi9xs7eQsV+xJZIMTqsY9s3mzGi28XLgqza/5O9dixqfCauTW?= =?us-ascii?Q?rJZ7Yn1+cZ0yRlcHinH0Uet32lg/JWHyqjomtIWQnxXGC2nJtGbQkD2X2EYB?= =?us-ascii?Q?OthTWTPkR2jjDbxsEzxcAOIytyz/OwZ8f7ifeKvl8y7UOPzp5sYP6a7p9eBy?= =?us-ascii?Q?l7RW71+WKGr/5AF+bYyZLKSlfNWi9uYJTEiUgEYc7r0Q9HW1UmURubVRHNNf?= =?us-ascii?Q?34QAZ8bGuFgZ1pfWof+h4j0oKZpOH3vvEFMbmkniDFN3Jr3w3Hx3goJbEHxA?= =?us-ascii?Q?wOQl9MEHotGbqPEjeYETqKVQBixkMeQdcoILAsLMlnKsQ93Zs2P/dYwLHtCm?= =?us-ascii?Q?Tk7oz4VMtlEgGoExZ6TT4liEzNcho07TL/0d7pKEa96oLHFAsg4g4Q/Nx4i4?= =?us-ascii?Q?UNQexg1YwwJrQOwctNty3Z+w9smT6pRzG8TM8S3RuOANQGD6oSJ5fKk777LP?= =?us-ascii?Q?nHbRAShZqg1YXCNe9iW22+nuWnUhDvP2iTR5kPzynAt9OZdRAS1puVXweluK?= =?us-ascii?Q?+7qIztHY0TlnSvYTbTaOcoS/j4AVQDUP72wtbDKODFaG/aEpB6jCIh7tnUkN?= =?us-ascii?Q?9Av94L2qyOZNigYWCYP8KFKI8Y6e3KI5li0snq86uOgAfIDE11wsUfFYYKXL?= =?us-ascii?Q?AQ/oy4X/vJdj/vBzBlcMaIIXLmYa6gwcIdAk+P547d5kbn0n6PMUPfQZkb5m?= =?us-ascii?Q?/geHGDoqAEiEQ2Rvru0vWmxNVxx+jxjwzUT/ZcDG26V7d2OhAdHxyVtW9Qf4?= =?us-ascii?Q?WGdiFDeX/jRt7HJ3z3eGlEWvPvkqIPcw5WEHyo3DyhkeLNA4xHu7JA5igw2a?= =?us-ascii?Q?Q4znL3HT8qHRE94X5If7c98mIUt5zF5iICtKRmjTzBqQMsY5VPshA8NLacv/?= =?us-ascii?Q?WnL4G7aE4zpBrqEu9fO3g1nzHUasbokL+I4ze5xKy9UOaHKYQVazCiy+rbia?= =?us-ascii?Q?o0BtySwmifGauyTezjL0+/N14BzDsY3OdV87rsg3exbTOncZo1UHfJniXroT?= =?us-ascii?Q?XBVIY+skLKQSDtXN0DqYnjl8U3nPm7FsAI11s74vNB5NqsuDHmdRp/DZ8OKF?= =?us-ascii?Q?hsicKHWv6iEwrFW4qMCoiFP6X46F1o/Q4ftc3/pwHSA3/+pmSYsG1lX/wUY9?= =?us-ascii?Q?hkPoOZUsHZTGAGsPFmMm33YU5boATwriY0t6MvJLfdnL35wsJ43kBFVOAZxa?= =?us-ascii?Q?e640WzTBX6ge4XiSfZv+saw+zv/FYFtEdFjXWtzExT17fF8cwzjEaYPdZqPD?= =?us-ascii?Q?5ENbtnE+RZVlcfCuvIOPzBnZjmiBze2rSK0wCbyk4/sQZO7B4DnTsCZzisoZ?= =?us-ascii?Q?iZaLWAaqlgBggKxSXLCe6QHIIWXDKPoLgjK/WNHVFhsLokcmsjcBP15iNGLf?= =?us-ascii?Q?r+HWxj1FUE8NTML8/I0eWiBG+SXikSh6hmkwJkpvgnLntJkqZzxyt?= X-Microsoft-Exchange-Diagnostics: 1; DB6PR0802MB2488; 6:gG1s4GXxygZ4IwFbsK4zyRVpac07jCaDAXw5Kg1ZaGkOv7NSqRj4Z552gykukfKdhQ9XxPbTn5sNIBoBWO/r2wd5FzmhOk+W4f2Ar8WCrT+JRrbdOvbgdzGIti2BMUdNJvuA5m/My76lGnx64KTRn/6ORIyAmYCVOJeZ9RDz+uYPsFs1HeohEN7REQhnhqclbKJveKTL5e7nfNwpNJ5okpThKvPegvP5Af4vfDqYR57G+y7KqCuv1B4S9Ty+Ajeygwl43C4r1W/tCCLJULN0qx1Ux1w9rtA14mgmGs0R6Om31Dyyj7emQrQgCxyklx1go+NhAAQw7VFbhNfQTJkfjw==; 5:vPmRAqkh/Z5uMryLy3Q7zNiNe/9VKRmdySpbW1SzkId3XTPGqtz2Fv5JIUeX5iUbU64uT1eonPQoqILJ7Id1nqvl+0rqZ2d8poK5XPyausq62Ias0Gd+0RSh9T8HoH1LRh+YVOav+oAvs8zDi4rZ4w==; 24:32SLeSeyKGJ/4EsdTIC30rgBNoj7HMhawPrXXan/+eon+tinkfEbNLTQf96s3CGKpjKelu8GaGyiXbaKEnM8W9//fU2koXjbh3/pF19jvLk=; 7:svIYZ5q1dMH3w7PXZNUvgaPRrTjX4RLdaeGh1lx1rQkXqRqAqjM5yufnZ1KFIOPzs5lTTdmxfGLlIgL9MNZssioRkTam6nIMeZvP/3GwJtAXMfQYnZkR4az+bqb1jR78r1I6nhVw1jA6D+QwuDlQ+UhxioWqxfHVz15OGfKIM9LQIZnR4VU/7XCbXz1L7ri9yVpN8k/HcW99rK07BhEhYpc/8YLMfAsJMTd/vPWf0us= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 24 Oct 2017 14:31:11.2008 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: e2ed2421-faa4-46d1-7b7c-08d51aebdfb2 X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB6PR0802MB2488 2017-10-23 Szabolcs Nagy [BZ #18572] * sysdeps/arm/dl-machine.h (elf_machine_lazy_rel): Do symbol binding non-lazily for R_ARM_TLS_DESC. From 9732943ec024f2ea66f978cd4196ec6a71497358 Mon Sep 17 00:00:00 2001 From: Szabolcs Nagy Date: Fri, 20 Oct 2017 17:35:12 +0100 Subject: [PATCH 5/7] [BZ #18572] arm: Disable lazy initialization of tlsdesc entries Follow up to https://sourceware.org/ml/libc-alpha/2015-11/msg00272.html Always do tls descriptor initialization at load time during relocation processing (as if DF_BIND_NOW were set for the binary) to avoid barriers at every tls access. This patch mimics bind-now semantics in the lazy relocation code of the arm target (elf_machine_lazy_rel). Ideally the static linker should be updated too to not emit tlsdesc relocs in DT_REL*, so elf_machine_lazy_rel is not called on them at all. * sysdeps/arm/dl-machine.h (elf_machine_lazy_rel): Do symbol binding non-lazily for R_ARM_TLS_DESC. --- sysdeps/arm/dl-machine.h | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/sysdeps/arm/dl-machine.h b/sysdeps/arm/dl-machine.h index bf5f5d205c..c59386f515 100644 --- a/sysdeps/arm/dl-machine.h +++ b/sysdeps/arm/dl-machine.h @@ -669,15 +669,21 @@ elf_machine_lazy_rel (struct link_map *map, } else if (__builtin_expect (r_type == R_ARM_TLS_DESC, 1)) { - struct tlsdesc volatile *td = - (struct tlsdesc volatile *)reloc_addr; - - /* The linker must have given us the parameter we need in the - first GOT entry, and left the second one empty. We fill the - latter with the resolver address. */ - assert (td->entry == 0); - td->entry = (void*)(D_PTR (map, l_info[ADDRIDX (DT_TLSDESC_PLT)]) - + map->l_addr); + const Elf_Symndx symndx = ELFW (R_SYM) (reloc->r_info); + const ElfW (Sym) *symtab = (const void *)D_PTR (map, l_info[DT_SYMTAB]); + const ElfW (Sym) *sym = &symtab[symndx]; + const struct r_found_version *version = NULL; + + if (map->l_info[VERSYMIDX (DT_VERSYM)] != NULL) + { + const ElfW (Half) *vernum = + (const void *)D_PTR (map, l_info[VERSYMIDX (DT_VERSYM)]); + version = &map->l_versions[vernum[symndx] & 0x7fff]; + } + + /* Always initialize TLS descriptors completely, because lazy + initialization requires synchronization at every TLS access. */ + elf_machine_rel (map, reloc, sym, version, reloc_addr, skip_ifunc); } else _dl_reloc_bad_type (map, r_type, 1); -- 2.11.0