From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pf1-x42c.google.com (mail-pf1-x42c.google.com [IPv6:2607:f8b0:4864:20::42c]) by sourceware.org (Postfix) with ESMTPS id F24B9385609C for ; Sat, 11 Jun 2022 02:32:40 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org F24B9385609C Received: by mail-pf1-x42c.google.com with SMTP id j6so952360pfe.13 for ; Fri, 10 Jun 2022 19:32:40 -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:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to; bh=NkIGPPKL5CrPrX3qHyK0ZIDOPmdgRhustZLRBLrZ4bg=; b=VVtr4esPhUZxhlELqp7iVaYvd9+7FchQAwolnvTPA9h9ype9fC3jFgxTI3VgqfT0L6 NrD/qLJBR3onimLwlJlG4QzhnXRohJmHocuNg7BTWXzfll6T5HNAS1p+0teepxTXHLHU JAwf3OEualLbDJEfti5RohekB0MVY/G7jSvZ/pTsCTOgBU/RjXIRVZnaLEYxOzMY5rXF wPgeta0JWg2QDtVei7Q+67RaOqLS2iZAUR286dyBFQrX4726J3tKKfJLnzX9Ar68mte5 j+SFrwXsYJ95/MpxVDnjudZS5Us9f4gdURE7wyyubKIYSqbGVsimFTKLJl9DtRJr9C+S lvzw== X-Gm-Message-State: AOAM530VG8LoNZbvJKM+HPhtH0RXVte1R9O4v+uGRWE4lABOAs1PQPQo utRvo2foV8V9z65EKPU7RX7AgEpXaisWAQ== X-Google-Smtp-Source: ABdhPJyNN6UKSfxmJlouQPtbeKWdqwnBlxBzpA965gNWO/NSYI7T0uQ17WcwT/Str1BIWyf8Lx3FDg== X-Received: by 2002:a65:5a07:0:b0:3fd:c16f:5dd7 with SMTP id y7-20020a655a07000000b003fdc16f5dd7mr25816519pgs.454.1654914758870; Fri, 10 Jun 2022 19:32:38 -0700 (PDT) Received: from google.com ([2620:15c:2ce:200:91f7:c381:d565:a3b]) by smtp.gmail.com with ESMTPSA id m17-20020a170902db1100b0016230703ca3sm393467plx.231.2022.06.10.19.32.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Jun 2022 19:32:38 -0700 (PDT) Date: Fri, 10 Jun 2022 19:32:35 -0700 From: Fangrui Song To: Marcus Shawcroft , Szabolcs Nagy Cc: libc-alpha@sourceware.org Subject: Re: [PATCH] aarch64: Handle fewer relocations for RTLD_BOOTSTRAP Message-ID: <20220611023235.mbjv4fh7rqr4abr4@google.com> References: <20220606043709.3065173-1-maskray@google.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii; format=flowed Content-Disposition: inline In-Reply-To: <20220606043709.3065173-1-maskray@google.com> X-Spam-Status: No, score=-26.3 required=5.0 tests=BAYES_00, DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH, GIT_PATCH_0, KAM_STOCKGEN, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE, USER_IN_DEF_DKIM_WL, USER_IN_DEF_SPF_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-List-Received-Date: Sat, 11 Jun 2022 02:32:42 -0000 On 2022-06-05, Fangrui Song wrote: >The RTLD_BOOTSTRAP branch is used to relocate ld.so itself. It only >needs to handle RELATIVE, GLOB_DAT, and JUMP_SLOT. > >Tested on aarch64-linux-gnu. >--- > sysdeps/aarch64/dl-machine.h | 33 +++++++++++++++------------------ > 1 file changed, 15 insertions(+), 18 deletions(-) > >diff --git a/sysdeps/aarch64/dl-machine.h b/sysdeps/aarch64/dl-machine.h >index 292abe5152..ae8b14425a 100644 >--- a/sysdeps/aarch64/dl-machine.h >+++ b/sysdeps/aarch64/dl-machine.h >@@ -178,7 +178,9 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > return; > else > { >+# ifndef RTLD_BOOTSTRAP > const ElfW(Sym) *const refsym = sym; >+# endif > struct link_map *sym_map = RESOLVE_MAP (map, scope, &sym, version, > r_type); > ElfW(Addr) value = SYMBOL_ADDRESS (sym_map, sym, true); >@@ -191,6 +193,18 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > > switch (r_type) > { >+ case AARCH64_R(GLOB_DAT): >+ case AARCH64_R(JUMP_SLOT): >+ *reloc_addr = value + reloc->r_addend; >+ break; >+ >+# ifndef RTLD_BOOTSTRAP >+ case AARCH64_R(ABS32): >+# ifdef __LP64__ >+ case AARCH64_R(ABS64): >+# endif >+ *reloc_addr = value + reloc->r_addend; >+ break; > case AARCH64_R(COPY): > if (sym == NULL) > break; >@@ -210,30 +224,17 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > ? sym->st_size : refsym->st_size); > break; > >- case AARCH64_R(RELATIVE): >- case AARCH64_R(GLOB_DAT): >- case AARCH64_R(JUMP_SLOT): >- case AARCH64_R(ABS32): >-#ifdef __LP64__ >- case AARCH64_R(ABS64): >-#endif >- *reloc_addr = value + reloc->r_addend; >- break; >- > case AARCH64_R(TLSDESC): > { > struct tlsdesc volatile *td = > (struct tlsdesc volatile *)reloc_addr; >-#ifndef RTLD_BOOTSTRAP > if (! sym) > { > td->arg = (void*)reloc->r_addend; > td->entry = _dl_tlsdesc_undefweak; > } > else >-#endif > { >-#ifndef RTLD_BOOTSTRAP > # ifndef SHARED > CHECK_STATIC_TLS (map, sym_map); > # else >@@ -245,7 +246,6 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > } > else > # endif >-#endif > { > td->arg = (void*)(sym->st_value + sym_map->l_tls_offset > + reloc->r_addend); >@@ -256,14 +256,10 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > } > > case AARCH64_R(TLS_DTPMOD): >-#ifdef RTLD_BOOTSTRAP >- *reloc_addr = 1; >-#else > if (sym_map != NULL) > { > *reloc_addr = sym_map->l_tls_modid; > } >-#endif > break; > > case AARCH64_R(TLS_DTPREL): >@@ -286,6 +282,7 @@ elf_machine_rela (struct link_map *map, struct r_scope_elem *scope[], > value = elf_ifunc_invoke (value); > *reloc_addr = value; > break; >+# endif /* !RTLD_BOOTSTRAP */ > > default: > _dl_reloc_bad_type (map, r_type, 0); >-- >2.36.1.255.ge46751e96f-goog Cc machine maintainers