From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) by sourceware.org (Postfix) with ESMTPS id 1C652386D60F for ; Tue, 28 Nov 2023 08:51:47 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1C652386D60F Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1C652386D60F Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::1032 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701161509; cv=none; b=mxMBOjAt/Yc2tIW9Pxg0XmpVwCG02tBR+PsZklGIceeY/psGoPRIpPsNM6+AtQz1I33MCbbqQ+65xmdXxMK3ntRphqwlguGmtf1tg2fcHblsQTHigXkfKcEsXvTZsN5LrNe2OzjmDyd6vMG4GolThzZsjjQg873VtSvvq03WRe0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1701161509; c=relaxed/simple; bh=LVpowly8jDsEhOHwudbXaDl7bEPA0eVsb5wK3e0fycY=; h=DKIM-Signature:From:To:Subject:Date:Message-ID:MIME-Version; b=DZdQJOyIhZUUPslu7RmklV6onyfdTOCyEiiUtd9XaNn5CiJQgEXaixXFWfqTQ0qJ/MEEuvPEqejIf1OaWuqst7ppRz7kGvBvKcv5lgcEGNcAmRtnMtirOXSZrb99VXuzWLB76w8d5RLrpcuWFrt57mKjbjTWvYBvtONU2KXFJvc= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-27fe16e8e02so988587a91.0 for ; Tue, 28 Nov 2023 00:51:47 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1701161505; x=1701766305; darn=sourceware.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=za/0yDLwyWeRmCx166IN06YjHdIcPnPtYC9AilC5hp4=; b=cDXzJfUJvcb6Assybv6lLKwphVbmfyunnW+CcWl4ZFUtSqRfshpctSqzvBNwcltope 98qV7j9zx+wmheZVsgJ40skyF4sKnyvuMAwVcpfLARchQxK5DSXcN8Pa5BQXG7OgafFI uZy3+zev9EdY27oXO5gDgvTm8qPdmE9WrkwH16H7k3x0cPU26O2nlIXAEnDDqlEp+FRl hiCGom/9xpR8OtXZO0GHwwlKhTN7KUVOdDa860/zxV3/PHz8O0E1hWCbBDgCRJuQll/p DuUVX0YUhhuKew9rV0H88GqeVt2OQn32jmwJtU22AKzq7+DYE/RRPRBdwxzMt7xxy0yA XN3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701161505; x=1701766305; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=za/0yDLwyWeRmCx166IN06YjHdIcPnPtYC9AilC5hp4=; b=dHur96Uk8rwqpAXJcL87UoEitPjxFg+9jEvd4Nd101+kmvxEe6oEyOqALxCEeY2+R+ MdbA+/fs1tEo/crPtIwrd6eII1prgr8Tj8XsLdknu7TTJtHDrv9SI7h7UKtRP9NoercQ t7HM4rewhtiY+57JlgnwGV+GzDiOR2kDIoszwUN1nAv8fG0iuL06DFebwvDlYFZZ1hch JrEUjpnWtMtslzQMi66B9SpkZl6UUATEVdFakrw93VeExzmo/jN1EYWjcRHiuBV1oBFX fallrMo9SfStW/GGcUi7+5W43E2LvH+Om5paXVRsKoFXIPxtYyZoftD0bkWs3imaZa5f 2CHg== X-Gm-Message-State: AOJu0YwGJN+646uoFDPnwe4UoJKrQQrSr9sLK2Bt0DKh7X3p3QyWEOmU 4m4cLjuu5MaYaEs9MohbX/KFgayPRN0mwGTs X-Google-Smtp-Source: AGHT+IEfkZeXE1ploLJexNSByW2W4lh5IRWw859leILSAqrbwhCwWCzpf3YxOANOG5u9ZehGHxNa7g== X-Received: by 2002:a17:90b:85:b0:285:8609:4974 with SMTP id bb5-20020a17090b008500b0028586094974mr14732138pjb.4.1701161505532; Tue, 28 Nov 2023 00:51:45 -0800 (PST) Received: from localhost (zz20184013906F627101.userreverse.dion.ne.jp. [111.98.113.1]) by smtp.gmail.com with ESMTPSA id l8-20020a170903244800b001cfc3f73920sm4380876pls.227.2023.11.28.00.51.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Nov 2023 00:51:45 -0800 (PST) From: Tatsuyuki Ishi To: binutils@sourceware.org Cc: i@maskray.me, nelson@rivosinc.com, rui314@gmail.com, ruiu@bluewhale.systems, Tatsuyuki Ishi Subject: [PATCH v3 7/9] RISC-V: Unify TLS handling in check_relocs. Date: Tue, 28 Nov 2023 17:51:07 +0900 Message-ID: <20231128085109.28422-8-ishitatsuyuki@gmail.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20231128085109.28422-1-ishitatsuyuki@gmail.com> References: <20230817180852.121628-2-ishitatsuyuki@gmail.com> <20231128085109.28422-1-ishitatsuyuki@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: With the introduction of transition, multiple relocation types may map to GOT_TLS_IE or GOT_TLS_LE and it makes more sense to unify the code path to perform checks common to them. bfd/ * elfnn-riscv.c (riscv_elf_check_relocs): Merge switch cases for TLS relocs. --- bfd/elfnn-riscv.c | 64 +++++++++++++++++++++++++++-------------------- 1 file changed, 37 insertions(+), 27 deletions(-) diff --git a/bfd/elfnn-riscv.c b/bfd/elfnn-riscv.c index 4c722388aa0..1d88ecd53b5 100644 --- a/bfd/elfnn-riscv.c +++ b/bfd/elfnn-riscv.c @@ -662,6 +662,24 @@ riscv_elf_copy_indirect_symbol (struct bfd_link_info *info, _bfd_elf_link_hash_copy_indirect (info, dir, ind); } +static char +riscv_elf_tls_type_from_hi_reloc (unsigned int r_type) +{ + switch (r_type) + { + case R_RISCV_TLS_GD_HI20: + return GOT_TLS_GD; + case R_RISCV_TLS_GOT_HI20: + return GOT_TLS_IE; + case R_RISCV_TLSDESC_HI20: + return GOT_TLSDESC; + case R_RISCV_TPREL_HI20: + return GOT_TLS_LE; + default: + abort (); + } +} + static bool riscv_elf_record_tls_type (bfd *abfd, struct bfd_link_info *info, struct elf_link_hash_entry *h, @@ -843,19 +861,26 @@ riscv_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, switch (r_type) { - case R_RISCV_TLS_GD_HI20: - if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx) - || !riscv_elf_record_tls_type (abfd, info, h, r_symndx, - GOT_TLS_GD)) - return false; - break; + case R_RISCV_TLS_GD_HI20: + case R_RISCV_TLS_GOT_HI20: + case R_RISCV_TLSDESC_HI20: + case R_RISCV_TPREL_HI20: + { + char tls_type = riscv_elf_tls_type_from_hi_reloc (r_type); - case R_RISCV_TLS_GOT_HI20: - if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx) - || !riscv_elf_record_tls_type (abfd, info, h, r_symndx, - GOT_TLS_IE)) - return false; - break; + /* Local exec is only allowed for executables. */ + if (tls_type == GOT_TLS_LE && !bfd_link_executable (info)) + return bad_static_reloc (abfd, r_type, h); + + if (tls_type != GOT_TLS_LE + && !riscv_elf_record_got_reference (abfd, info, h, r_symndx)) + return false; + if ((tls_type != GOT_TLS_LE || h != NULL) + && !riscv_elf_record_tls_type (abfd, info, h, r_symndx, + tls_type)) + return false; + break; + } case R_RISCV_GOT_HI20: if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx) @@ -864,12 +889,6 @@ riscv_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, return false; break; - case R_RISCV_TLSDESC_HI20: - if (!riscv_elf_record_got_reference (abfd, info, h, r_symndx) - || !riscv_elf_record_tls_type (abfd, info, h, r_symndx, - GOT_TLSDESC)) - return false; - break; case R_RISCV_CALL: case R_RISCV_CALL_PLT: @@ -953,15 +972,6 @@ riscv_elf_check_relocs (bfd *abfd, struct bfd_link_info *info, break; goto static_reloc; - case R_RISCV_TPREL_HI20: - /* This is not allowed in the pic, but okay in pie. */ - if (!bfd_link_executable (info)) - return bad_static_reloc (abfd, r_type, h); - if (h != NULL - && !riscv_elf_record_tls_type (abfd, info, h, r_symndx, GOT_TLS_LE)) - return false; - break; - case R_RISCV_HI20: if (bfd_link_pic (info)) return bad_static_reloc (abfd, r_type, h); -- 2.43.0