From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4 Received: from second.openwall.net (second.openwall.net [193.110.157.125]) by inbox.vuxu.org (Postfix) with SMTP id 7B529223B1 for ; Thu, 25 Jan 2024 07:49:10 +0100 (CET) Received: (qmail 20087 invoked by uid 550); 25 Jan 2024 06:46:57 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-ID: Reply-To: musl@lists.openwall.com Received: (qmail 20046 invoked from network); 25 Jan 2024 06:46:57 -0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bMnM5dZyRWT7mKOhxQNSKiyx7hzmp0dVsmJedi03EgFETvGLxl1VxZ7FXCsP5QdOCSLMJkN3YoYdzThYAY5DXoYgQ1BakirooecJ8KPth3r1bsOyIRzRBPHXZ3U3ZmXPWqi/n9HEIZNHgK1rhsXeKUgwc9I3g4CUAHsflZfXe6pXI1B/TfeMufuKaKz3Q/51azjZdI1EjYLUifDbEDG7HVqSdHsg1d4z0LdU2SbLdGcFL0hqGGmC762jOgLT70cT53i9eU29IBR6N5gQ0bmSo4DXF6EuAQoiDNPfxV5q+5b5F7MoZaWL52GOtdXxliE5X5eLrNRPvk/7PDXGgdsH6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=3UGmcRP4PoXV7tlaGZRg6oVGUMf1wa5pIgWI4ZxH7Ns=; b=a4LnXpSbiGcUvLpgNAVwFBndQZpNjSeDLRmqzYk8Mk+io6tH6nl7jy3aLHdakX7RFl8HAlopNROPMrjiIfWLTbbJdzu/1dNNoXRIsqN736zr/HVzHiu+XPEUynSwIaNIuUVaxHOV09LQ2ErJzlXIW3XQqpNSglTJ3htgxOC+XgMnlZuZc8+0M+CcDCpKRswWPfB1LRk6THLByb3GnbIh7bfsR86Qzt5JAjJuU18tI5zUfi70lHMr/xdGyvyENR07qms0zJ1vn35XiwNpHzaVI2jSJlJI7yPpUEJIVSKKdw1ndtIfjWpCSQFDWxBgzZYlDI+1JvUaJ8oDTHcfDk7ZEA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none X-Gm-Message-State: AOJu0YwfhgxjPo+uLck97Aa6oCZplS0KQkmn1FcpD3SCFiUNominr7va EJHAO1rtrdaq71Bk10we/JpzAelFiStIRp6pZ+t3gR1jPpExDIYEypXG0IiSu1FlcgBBkbWBt4G fs/tiq9ulfl6JQomebkYAp1MA3Xo= X-Google-Smtp-Source: AGHT+IEx122TXFrfhLpqE6fdD+8E33e8QM6tA/cB6yt/2FcwOoWRJkePnXTdOstSxv4zGJ8uhDQOSk2jC6udlpACJz4= X-Received: by 2002:a1f:7dc3:0:b0:4bd:6109:ab9a with SMTP id y186-20020a1f7dc3000000b004bd6109ab9amr237768vkc.8.1706165327260; Wed, 24 Jan 2024 22:48:47 -0800 (PST) References: <20230822173821.GW4163@brightrain.aerifal.cx> <20240121222831.GC4163@brightrain.aerifal.cx> <20240122000348.GD4163@brightrain.aerifal.cx> <20240123132631.GF4163@brightrain.aerifal.cx> In-Reply-To: <20240123132631.GF4163@brightrain.aerifal.cx> From: Fangrui Song Date: Wed, 24 Jan 2024 22:48:36 -0800 X-Gmail-Original-Message-ID: Message-ID: To: musl@lists.openwall.com Cc: Tatsuyuki Ishi Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-TMN: [f+QuAyXJJ3zWLD9ma654GTa4QK0nOmNU] X-ClientProxiedBy: JH0PR01CA0146.apcprd01.prod.exchangelabs.com (2603:1096:990:5b::14) To DS7PR12MB5765.namprd12.prod.outlook.com (2603:10b6:8:74::19) X-Microsoft-Original-Message-ID: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB5765:EE_|CY8PR12MB8242:EE_ X-MS-Office365-Filtering-Correlation-Id: 9695267b-eee3-40d3-a1a4-08dc1d71b22f X-MS-Exchange-SLBlob-MailProps: WaIXnCbdHrNV+/iLmqVGSeZXCSO7dhXiFS1jAh23n1u8nuilY3uSjaVh3GbSXFGy8foCxwMFHdrw93FkQLlMFj2BEv8/tXZ4dEr+Faj3M3fPUidK8Rg4wJ8nlxpsAOaE95lCYWpaiLoyN/DPQWDu5BTFf74BhhMhUDHSh1wN3QcAHmMEbizN9mpyRo5hGxERVV4nbczrKgMzmheDLa80RdjN0kOtl3rrp+mFkL+6X1/5tBxdak+lIreUEAePqWDudvdWUTyA3XkfnhOWWPuMA6GO3ZFX+6C2vsOiVZ+uo6Mhj7/IvaFceLhL9NoO3TsZATDe6Oec8zXIRS153S+t8gJnv0LQ8wxJDRtlGCmpnpXq8NoCuy+bsUNzpk78pIqZMKvZLiIalb9Zo3dRRveVx/AmJMWZ4RWdqDVH9NWHV0d9g6Ufdxk8iETqlCf6+8BRxs+44bitZGUx9K1XoGH4MHTb/l/ZusbyR+JnZ4AYvdsquZa/sGxNzFS8d1WkdGdzU6TmLTgQyokO9y5BkBexFz2Q2o0L6LPpGE1zaykM3S4jg6C0QEGXpLP0pmFKUe6yb0VAu284zpVm2ZfhADXr8xG47BTSR3ljYcCwvgFqOtkt/qR005vts079lZ04tIrkzMFVYBuMpbbyZfY/zPbE0jRiyBWeNVlqmQK6DoMeCAUmde+LunKcItChX8HVrZAalRH2V1oBvDZcfGtjjR/WqyQgcRwUm76aGwQIeI9VcSYeHTbkLaWAzapMyT4YZd+15jrRV3uJL2k= X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: qSf9I0oc+AsLU3U9Beom1y7IlYMwSpMGjU1nRwdHgcYdb9GhR9scr2ZBv7D3Y8LEKCBsijzVZdyaQXuGU3AEayS5P8UnKqJWtGCxvP8p7AJbrEqBO+dl5mbPFL7lwyinzZopHhc6SoO+hKWZdC5Bd4nE9ZYgVFv4vW6UDp6GlWT5+3KzSbdtpdKcUNGCyWtrzXl9mdjG+VtvlV0xbggonUe3H947uCXJnP/2eqd+VRx3AZa/EkpBWJVqCU6NFFxv03JO2Bfk4iv65knfpblRcGDnIPCYl1gNS+cVhkdi8sTM+2UKo/Sg/Vo8Su/PsAPoBGcOESIbxGUsgx9cn9ZqyzlU/EH/yjRpKQFN1ah07fImPJcvYsOnz4pO5iuclRepnUN3/CaDDvIlD8epNx4v25EqJSQujByVXmxxNmeTcTkVidY3BkpyuvutlK4WWJXH+z1XpE7fzQd6oTQ1C3zT/TKv/XU2sTgznOm0QCOEZOv0FUIVvsUVYhY+5vfopdxO8PJ/47J1LwY8Sq6JcDwg3HlxgZcuINXhle+4DuSHYcBtjV1TZAdq7oFesVF2QUJNf4hnFGUgyVyf7Hi/UFkHO7AebOYfuRTsJ7vHDdVs/Fo1TpqYzCeXpmEk2v7S5TjoCW/oNx8GUi46cJZagJmy4A== X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Ti9nOTlBNzB0SzdjR0IzRk0xK3FZcWkvT0I4b1dTRnh6WnF4bEFRcTBtOGJo?= =?utf-8?B?NHBMZkVvL2Y5M3JKODJ4NDFBc3FJUGpPYmxtN1lIRlplY0QxdGJPOHdlN2Nv?= =?utf-8?B?Z0hQMVVGNnVpc1RoOER5SlZNVU52c2V6YlBvQ0xNSDFGcEp4S2tscTFrTTN0?= =?utf-8?B?SVdPdmQwQjU1RERmejdITlhSOEU5TjdpS0hIYm5BUmJwZ2YxTGxPTkhvb2RH?= =?utf-8?B?RG4zNVdGWFlaUzFEUGRKNEpGc0lXQ1VNRU9jTUMzSzZ6VnJ1QXdWY3JCb1F2?= =?utf-8?B?WGw1dTZUTm5RMS8zN2d2S3daQW1VQzNISk1vUEIrMys3OS83cFFiKytheUFl?= =?utf-8?B?aG1VdXZZUHBjTGFBTzl2K0JZRWhtakdzM0E4Y1pOTk1uZkVNVTIvRy9PR2gy?= =?utf-8?B?a2F1a0dMYjlVdGFMN29VR0pJSmFEV2h6SGxjY2plVzd6V0NjVHBVbHRTeWZI?= =?utf-8?B?ektGYVNZRUxWaEdhc3BjbDhtcnJ5Nk5YZng0aVhPaCtodnFwa3JzQ2cwK20z?= =?utf-8?B?QzRZTGhPN2hZbzlGU216cW5qTVVSYWVabjA5bXFiQlgyWUpDVEVLekg4eDhl?= =?utf-8?B?Z3crTkhiK1UrSnZ6NXBzUGd4WWZHSmo1ZVhYMFNrZVVxQ1V4dU9JT3lnaWlo?= =?utf-8?B?VlIzWHhiT2NLenBJMjEyKzN0QmZ0YTQ1dXZ1MGxkR1NxbTVpeUhZSjAyVFNj?= =?utf-8?B?TXZ5d1RmdTU0ZXlLM3BLM002bC85cVRiSEFrMGh5WnloNDhwVDZDN2lEdnYr?= =?utf-8?B?L1E1UzBEd1Mrblh2NGVaUWM5SW9DL2Vid1BnQjZDRGdGU1pZaXo2SWtDSWUw?= =?utf-8?B?ODg4TklmVUJNdk1HeTIxOW16QkNmaEdvSGY3RTlHcUtETi93VzBHM285WmhD?= =?utf-8?B?RWtFbUh0MEdFOHBZY2VBeHlFakxKQnBYeWlraUNGdmNOcWNuazUvOTdDZGRn?= =?utf-8?B?MTJVdS9FQlRUSjIrYmFseFJINzAxaFRGRjBLN3ZVSU9Qd29sbFNIRFBiSFB0?= =?utf-8?B?dU11MWlvYkRoZ1ljRXBIcUV5Unp6SEVwTmFVd0prbW9kS1lUOTdoWkx6dUNH?= =?utf-8?B?ekNGMUxtd20rR1RtU2dXaTEvclBOVXFhYTVQenY5UnJnbXdoWlljcUJRUlQy?= =?utf-8?B?RTBQYThTanhyTTJOVVdOcXB6dEVOenlDOVhxL3hnbCtaSkNaREZBUVVMNndr?= =?utf-8?B?bUFIZ2gxZDJvcXl1Uzhwb05aelpDcDd1WXVXNmRhVnE4L0NLY0l3NGdLbExT?= =?utf-8?B?aGdwRGx3MTZrLzhmNGc2MmtxcDJSdzNWeFNHN1ZwMVo2b2Z0Z2ZGS1RDUjZv?= =?utf-8?B?eUZyanlCT1BlRnRDNTBWV1Q1bXBkNVR0ZmIwY1FXTzArSmJTT3l1aUhjVFdE?= =?utf-8?B?TXZQcy9KSktyQU9sYmFmcEVvZmVZYmZnQ21zTXMrMFBTaWpuVXN1L05PYzRv?= =?utf-8?B?eVhvdktGWnlBWjBzQW9VWjk2QmxiY21yWmExS2ZDZzR0eEQ0Mi85UldCT0xl?= =?utf-8?B?c2MweW9NNFRQdy8rWlBXdVo2MHNtVGpQRE1SdXpwZFE0YTBsMDRoVG5CSVZB?= =?utf-8?Q?ZgoPAnekboSPD25WM5YQii/fa8nlldaTSbNFhLgNoS0IhI?= X-OriginatorOrg: sct-15-20-4755-11-msonline-outlook-71ea3.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: 9695267b-eee3-40d3-a1a4-08dc1d71b22f X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB5765.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Jan 2024 06:48:53.9541 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY8PR12MB8242 Subject: Re: [musl] Draft riscv64 TLSDESC implementation On Tue, Jan 23, 2024 at 5:26=E2=80=AFAM Rich Felker wrote= : > > On Tue, Jan 23, 2024 at 12:52:01AM -0800, Fangrui Song wrote: > > On Sun, Jan 21, 2024 at 7:41=E2=80=AFPM Tatsuyuki Ishi wrote: > > > > > > > On Jan 22, 2024, at 9:03, Rich Felker wrote: > > > > > > > > On Sun, Jan 21, 2024 at 03:48:55PM -0800, Fangrui Song wrote: > > > >> On Sun, Jan 21, 2024 at 2:28=E2=80=AFPM Rich Felker wrote: > > > >>> > > > >>> On Tue, Aug 22, 2023 at 01:38:21PM -0400, Rich Felker wrote: > > > >>>> The psABI work is not finalized, but based on the current status= of > > > >>>> https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/373, I= think > > > >>>> the attached is a valid (but untested) implementation of TLSDESC= for > > > >>>> riscv64. Actually activating it requires also adding the relocat= ion > > > >>>> type macro to riscv64/reloc.h. > > > >>>> > > > >>>> If any rv folks could look it over and make sure I haven't made = any > > > >>>> stupid asm errors or missed any obvious optimizations, that woul= d help > > > >>>> to quickly get this merged when the psABI is finalized. > > > >>>> > > > >>>> Rich > > > >>> > > > >>>> .text > > > >>>> .global __tlsdesc_static > > > >>>> .hidden __tlsdesc_static > > > >>>> .type __tlsdesc_static,%function > > > >>>> __tlsdesc_static: > > > >>>> ld a0,8(a0) > > > >>>> jr t0 > > > >>>> > > > >>>> .global __tlsdesc_dynamic > > > >>>> .hidden __tlsdesc_dynamic > > > >>>> .type __tlsdesc_dynamic,%function > > > >>>> __tlsdesc_dynamic: > > > >>>> add sp,sp,-8 > > > >>>> sd t1,(sp) > > > >>>> sd t2,8(sp) > > > >>>> > > > >>>> ld t2,-8(tp) # t2=3Ddtv > > > >>>> > > > >>>> ld a0,8(a0) # a0=3D&{modidx,off} > > > >>>> ld t1,8(a0) # t1=3Doff > > > >>>> ld a0,(a0) # a0=3Dmodidx > > > >>>> sll a0,a0,3 # a0=3D8*modidx > > > >>>> > > > >>>> add a0,a0,t2 # a0=3Ddtv+8*modidx > > > >>>> ld a0,(a0) # a0=3Ddtv[modidx] > > > >>>> add a0,a0,t1 # a0=3Ddtv[modidx]+off > > > >>>> sub a0,a0,tp # a0=3Ddtv[modidx]+off-tp > > > >>>> > > > >>>> ld t1,(sp) > > > >>>> ld t2,8(sp) > > > >>>> add sp,sp,8 > > > >>>> jr t0 > > > >>> > > > >>> Any feedback on this? Offhand, it looks like adjusting sp by 8 is > > > >>> wrong and that should be 16. Anything else? Does anyone have rece= nt > > > >>> enough tooling to test this? > > > >> > > > >> Tatsuyuki, do you have links to the latest version of > > > >> gcc/binutils/glibc patches? > > > >> Downloading patches from these mailing lists is probably a large > > > >> hurdle for many users, so having the relevant repositories online = may > > > >> help. > > > >> > > > >> mold has implemented RISC-V TLSDESC. > > > >> > > > >> On the LLVM side, I have reviewed > > > >> https://github.com/llvm/llvm-project/pull/66915 and am waiting for= it > > > >> to land, before I can check the lld status. > > > > > > > > To test this, drop it in src/ldso/riscv64/tlsdesc.s, and add to > > > > arch/riscv64/reloc.h: > > > > > > > > #define REL_TLSDESC R_RISCV_TLSDESC > > > > > > > > or whatever the reloc name is (I don't think it's in elf.h yet so y= ou > > > > probably need to either add it there too or just hard-code the numb= er > > > > for testing). > > > > > > > > Updated version with the sp bugfix attached. > > > > > > The assembly looks fine to me. (It=E2=80=99s nice that musl don=E2=80= =99t need to bother with save/restore at all since DTVs are initialized eag= erly..) > > > For the patches mentioned in the other thread, most tests were done w= ith glibc=E2=80=99s portable testsuite (tst-elf-*). > > > If musl has a similar one, you should be able to run it with my GCC /= binutils fork (with either --with_tls=3Ddesc at configure time or -mtls-di= alect=3Ddesc at compile time). > > > > > > Tatsuyuki. > > > > > > > Rich > > > > > > > > > > > I have verified that the patch works using a runtime test under qemu-us= er. > > I use Paul Kirth's pending LLVM codegen/assembly patch and my pending > > lld patch:) > > Thanks for running tests! > > > Compile b.c to bb.s. Replace general dynamic code sequences (e.g. > > `la.tls.gd a0,tls0; call __tls_get_addr@plt`) with TLSDESC, e.g. > > ``` > > ..Ltlsdesc_hi0: > > auipc a0, %tlsdesc_hi(tls0) > > ld a1, %tlsdesc_load_lo(.Ltlsdesc_hi0)(a0) > > addi a0, a0, %tlsdesc_add_lo(.Ltlsdesc_hi0) > > jalr t0, 0(a1), %tlsdesc_call(.Ltlsdesc_hi0) > > add a0, a0, tp > > ``` > > Is this due to compiler not supporting generation of TLSDESC sequence > yet? LLVM assembler and code gen support has been added (https://github.com/llvm/llvm-project/pull/66915/files), but the clang -mtls-dialect=3Ddesc part has not landed yet (https://github.com/llvm/llvm-project/pull/79256). > If so, unlike a full test with compiler support, it does not test > for the TLSDESC machinery honoring all the non-clobbering requirements > of the ABI. But I think we can check by hand that that part of the ABI > is honored. > > Rich Yes. % cat a.c __thread int x; void ext(int a, int b, int c, int d, int e, int f); int foo(int a, int b, int c, int d, int e, int f) { int ret =3D ++x; ext(a, b, c, d, e, f); return ret; } % clang --target=3Driscv64 -mtls-dialect=3Ddesc -O1 -S a.c -fpic -o desc.s # patched clang with -mtls-dialect=3D We can verify that a0~a5 (the resigers holding arguments) are not spilled := ) BTW, when you add static relocation types to include/elf.h, be sure that the `_I` suffix is not included (typos in the spec, which will be fixed by https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/420)