From patchwork Mon Jun 6 05:02:47 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fangrui Song X-Patchwork-Id: 1639088 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=pass (1024-bit key; secure) header.d=sourceware.org header.i=@sourceware.org header.a=rsa-sha256 header.s=default header.b=IF7FEtcp; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=sourceware.org (client-ip=2620:52:3:1:0:246e:9693:128c; helo=sourceware.org; envelope-from=libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org; receiver=) Received: from sourceware.org (server2.sourceware.org [IPv6:2620:52:3:1:0:246e:9693:128c]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4LGhGF4RVDz9s09 for ; Mon, 6 Jun 2022 15:03:33 +1000 (AEST) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id A1A8C385356E for ; Mon, 6 Jun 2022 05:03:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org A1A8C385356E DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1654491808; bh=pUBsAw8k/uVJ9z/VjPtX0tU/78ITwZSYmfpnjo+Q5oo=; h=Date:Subject:To:List-Id:List-Unsubscribe:List-Archive:List-Post: List-Help:List-Subscribe:From:Reply-To:From; b=IF7FEtcpNe9xLy+QKoCqEj/mx4ggtuL7UE78siNSE4KJKayuq4CKOWoVwmRHDvm41 DPImL78MO6j/5+PiRZ7bQoCZTMzHgAaIHVnfN7onF9GhyLOaPjia6wXCZghzXhtW6G yVVjvPMr/YrcdEnB/okMUZBGOLC3fyAVR/Sdd8zA= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-yw1-x1149.google.com (mail-yw1-x1149.google.com [IPv6:2607:f8b0:4864:20::1149]) by sourceware.org (Postfix) with ESMTPS id 6299D3857B90 for ; Mon, 6 Jun 2022 05:03:14 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6299D3857B90 Received: by mail-yw1-x1149.google.com with SMTP id 00721157ae682-30047b94aa8so114430837b3.1 for ; Sun, 05 Jun 2022 22:03:14 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:message-id:mime-version:subject:from:to:cc; bh=pUBsAw8k/uVJ9z/VjPtX0tU/78ITwZSYmfpnjo+Q5oo=; b=P3G3nXrsresH7johqaVJcjJJJ3ZGiNpxKLY0Q9mv0idWpyx5hw/2rwDxu/TTYt+PiS JiFY3PYZYs/Sl+Ser/UYK+MEURNEOO8794zzyFalHDfcg8cV1DWY+fLdeOYgb3lM51wO ojIrGObSIM9l/wTx+rRqZZZfzQjvV5rKb7D7Ptpl4MfiPFVQLnswsOMjwXBa3VrwPil1 nHwlkyZt9maxG3nw3aVNIbJArNeggjQ4now2MUq/AmkfWEjZIwDrc2L4HU5JJNTtVbzT VC6EBmaRCg2nX9SFjJrpGoDE7LSBDcviIm0gklAdvcY3Gb/EvduEjKEyanXFjmB1CYp/ JAJA== X-Gm-Message-State: AOAM531qb5LQ31dCVtC1QbNhTjTw8zOIm1f1/Is9EobT/dNNDSE9DTDm tTFi4okgQnkD3EaKLZfn14yljCMHTu/5ZOGfRkDqk2y8dZUKOM442Et/dsnocgxyEQqrBuInHBK lXsdbG+U0pbyLtDiSKp2D1a8GAxEPK7i+jOlYuz8PxOZxNl0BBEZ0lSl9g+FDateKv9pZ X-Google-Smtp-Source: ABdhPJxzOD+AD8XqUG5FM9+Ous4GCVZ2WMhb2hA6k89EnNnCbPNZ29nHz5T43mNbH4dU+hPqOKnm/1eZFsnt X-Received: from maskray1.svl.corp.google.com ([2620:15c:2ce:200:88f0:b4af:a3af:a0a3]) (user=maskray job=sendgmr) by 2002:a5b:f83:0:b0:65b:318:c009 with SMTP id q3-20020a5b0f83000000b0065b0318c009mr23730954ybh.410.1654491793672; Sun, 05 Jun 2022 22:03:13 -0700 (PDT) Date: Sun, 5 Jun 2022 22:02:47 -0700 Message-Id: <20220606050247.3125956-1-maskray@google.com> Mime-Version: 1.0 Subject: [PATCH] riscv: Change the relocations handled for RTLD_BOOTSTRAP To: libc-alpha@sourceware.org, Palmer Dabbelt , Darius Rad X-Spam-Status: No, score=-19.5 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Patchwork-Original-From: Fangrui Song via Libc-alpha From: Fangrui Song Reply-To: Fangrui Song Errors-To: libc-alpha-bounces+incoming=patchwork.ozlabs.org@sourceware.org Sender: "Libc-alpha" The RTLD_BOOTSTRAP branch is used to relocate ld.so itself. It only needs to handle RELATIVE, GLOB_DAT, and the symbolic relocation type (R_RISCV_{32,64}). NONE and IRELATIVE can be removed. The code relies on ld.so having DT_RELACOUNT so that the RTLD_BOOTSTRAP branch does not need handle RELATIVE. Drop this minor size optimization for clarity. Acked-by: Palmer Dabbelt --- sysdeps/riscv/dl-machine.h | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/sysdeps/riscv/dl-machine.h b/sysdeps/riscv/dl-machine.h index 9e026ae011..a60a452952 100644 --- a/sysdeps/riscv/dl-machine.h +++ b/sysdeps/riscv/dl-machine.h @@ -181,7 +181,15 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], switch (r_type) { -#ifndef RTLD_BOOTSTRAP + case R_RISCV_RELATIVE: + *addr_field = map->l_addr + reloc->r_addend; + break; + case R_RISCV_JUMP_SLOT: + case __WORDSIZE == 64 ? R_RISCV_64 : R_RISCV_32: + *addr_field = value; + break; + +# ifndef RTLD_BOOTSTRAP case __WORDSIZE == 64 ? R_RISCV_TLS_DTPMOD64 : R_RISCV_TLS_DTPMOD32: if (sym_map) *addr_field = sym_map->l_tls_modid; @@ -232,13 +240,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], memcpy (reloc_addr, (void *)value, size); break; } -#endif - -#if !defined RTLD_BOOTSTRAP - case R_RISCV_RELATIVE: - *addr_field = map->l_addr + reloc->r_addend; - break; -#endif case R_RISCV_IRELATIVE: value = map->l_addr + reloc->r_addend; @@ -247,13 +248,9 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], *addr_field = value; break; - case R_RISCV_JUMP_SLOT: - case __WORDSIZE == 64 ? R_RISCV_64 : R_RISCV_32: - *addr_field = value; - break; - case R_RISCV_NONE: break; +# endif /* !RTLD_BOOTSTRAP */ default: _dl_reloc_bad_type (map, r_type, 0);