From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qv1-xf30.google.com (mail-qv1-xf30.google.com [IPv6:2607:f8b0:4864:20::f30]) by sourceware.org (Postfix) with ESMTPS id 4B9583854821 for ; Thu, 13 May 2021 19:38:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 4B9583854821 Received: by mail-qv1-xf30.google.com with SMTP id ee9so4093873qvb.8 for ; Thu, 13 May 2021 12:38:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=UR2prd4CMXCth10V2Za+cWti6DPOD4/1EoJAF/lXbIU=; b=nLdKN5ETz5e5wncFGJGXnxR4MTzUOcC6PW8LnnsiAgd+tAr7MThhi5EwgBp7Bqtcgm iJXCtlKtJODH6j2awN6uu8pqZfULk8WLb+TRqwBClwOHy8XRT9Ob8sgOOMiAbGCyri0q +ywY6DIC0Q8TgwbFYoNztO7NjcX0YTT4ZjFkJ2ogEJGd+zFsHjMIjcnWEoQ7wVUI0U1x Q5/zxalRaEe10WSWyQQ5pFRwIP+VuAiTPrBczB6HK3sykMMHKDHXKRN0Yb138WgVoVIq pZchu8PJ8/GzE2C5vonWHdaVNj/vQwwu3EolPA4YFZ3HN67hvYEb20kNBfch+dNeapNh 15qw== X-Gm-Message-State: AOAM531Xg9U4lj8BBg2q9HWza6+Nrf+qyC6ofGvsBBKUUPoX/5XTJQ8a 92K808oLIGwHXKcgnEVmF7mirH/siHGbPg== X-Google-Smtp-Source: ABdhPJxh8BWxG8Vzpk1s+9Xk2nDZh4TmKT9Faavr+hw4dITiJUJ0gxgaXtXjhBP7a/MOtyTPWPfYXw== X-Received: by 2002:a0c:ef42:: with SMTP id t2mr39100408qvs.48.1620934696597; Thu, 13 May 2021 12:38:16 -0700 (PDT) Received: from [192.168.1.4] ([177.194.37.86]) by smtp.gmail.com with ESMTPSA id y4sm2951876qti.53.2021.05.13.12.38.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 13 May 2021 12:38:16 -0700 (PDT) Subject: Re: [PATCH 09/23] powerpc: Remove _dl_var_init To: Florian Weimer , libc-alpha@sourceware.org References: <5c2228caaff4a60c42ad352d40af4d721e7b8e2c.1620838411.git.fweimer@redhat.com> From: Adhemerval Zanella Message-ID: <5365116b-634c-4f50-5e70-7ed61e27b118@linaro.org> Date: Thu, 13 May 2021 16:38:14 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.8.1 MIME-Version: 1.0 In-Reply-To: <5c2228caaff4a60c42ad352d40af4d721e7b8e2c.1620838411.git.fweimer@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.9 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, KAM_STOCKGEN, NICE_REPLY_A, RCVD_IN_DNSWL_NONE, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) 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: Thu, 13 May 2021 19:38:19 -0000 On 12/05/2021 13:58, Florian Weimer via Libc-alpha wrote: > The generic __rtld_static_init code handles GLRO (dl_pagesize), > GLRO (dl_auxv), GLRO (dl_hwcap), GLRO (dl_hwcap2). > GLRO (dl_cache_line_size) is handled in an __rtld_static_init_arch > override. LGTM. Reviewed-by: Adhemerval Zanella > --- > sysdeps/unix/sysv/linux/powerpc/Makefile | 4 - > sysdeps/unix/sysv/linux/powerpc/Versions | 6 -- > sysdeps/unix/sysv/linux/powerpc/dl-static.c | 96 ------------------- > .../{ldsodefs.h => rtld_static_init.h} | 26 ++--- > 4 files changed, 10 insertions(+), 122 deletions(-) > delete mode 100644 sysdeps/unix/sysv/linux/powerpc/dl-static.c > rename sysdeps/unix/sysv/linux/powerpc/{ldsodefs.h => rtld_static_init.h} (59%) > > diff --git a/sysdeps/unix/sysv/linux/powerpc/Makefile b/sysdeps/unix/sysv/linux/powerpc/Makefile > index a093cda68b..06f1328fab 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/Makefile > +++ b/sysdeps/unix/sysv/linux/powerpc/Makefile > @@ -13,10 +13,6 @@ gen-as-const-headers += ucontext_i.sym > endif > > ifeq ($(subdir),elf) > -ifeq ($(build-shared),yes) > -# This is needed for DSO loading from static binaries. > -sysdep-dl-routines += dl-static > -endif > # Otherwise tst-tls-dlinfo fails due to tst-tlsmod2.so using static tls. > LDFLAGS-tst-tlsmod2.so += -Wl,--no-tls-get-addr-optimize > endif Ok. > diff --git a/sysdeps/unix/sysv/linux/powerpc/Versions b/sysdeps/unix/sysv/linux/powerpc/Versions > index cc28d84744..416272b718 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/Versions > +++ b/sysdeps/unix/sysv/linux/powerpc/Versions > @@ -1,9 +1,3 @@ > -ld { > - GLIBC_PRIVATE { > - # used for loading by static libraries > - _dl_var_init; > - } > -} > libc { > GLIBC_PRIVATE { > __vdso_get_tbfreq; Ok. > diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-static.c b/sysdeps/unix/sysv/linux/powerpc/dl-static.c > deleted file mode 100644 > index e35ca4c44b..0000000000 > --- a/sysdeps/unix/sysv/linux/powerpc/dl-static.c > +++ /dev/null > @@ -1,96 +0,0 @@ > -/* Variable initialization. PowerPC version. > - Copyright (C) 2013-2021 Free Software Foundation, Inc. > - This file is part of the GNU C Library. > - > - The GNU C Library is free software; you can redistribute it and/or > - modify it under the terms of the GNU Lesser General Public > - License as published by the Free Software Foundation; either > - version 2.1 of the License, or (at your option) any later version. > - > - The GNU C Library is distributed in the hope that it will be useful, > - but WITHOUT ANY WARRANTY; without even the implied warranty of > - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > - Lesser General Public License for more details. > - > - You should have received a copy of the GNU Lesser General Public > - License along with the GNU C Library. If not, see > - . */ > - > -#include > - > -#ifdef SHARED > - > -void > -_dl_var_init (void *array[]) > -{ > - /* It has to match "variables" below. */ > - enum > - { > - DL_PAGESIZE = 0, > - DL_AUXV = 1, > - DL_HWCAP = 2, > - DL_HWCAP2 = 3, > - DL_CACHE_LINE_SIZE = 4 > - }; > - > - GLRO(dl_pagesize) = *((size_t *) array[DL_PAGESIZE]); > - GLRO(dl_auxv) = (ElfW(auxv_t) *) *((size_t *) array[DL_AUXV]); > - GLRO(dl_hwcap) = *((unsigned long int *) array[DL_HWCAP]); > - GLRO(dl_hwcap2) = *((unsigned long int *) array[DL_HWCAP2]); > - GLRO(dl_cache_line_size) = (int) *((int *) array[DL_CACHE_LINE_SIZE]); > -} > - > -#else > - > -static void *variables[] = > -{ > - &GLRO(dl_pagesize), > - &GLRO(dl_auxv), > - &GLRO(dl_hwcap), > - &GLRO(dl_hwcap2), > - &GLRO(dl_cache_line_size) > -}; > - > -static void > -_dl_unprotect_relro (struct link_map *l) > -{ > - ElfW(Addr) start = ((l->l_addr + l->l_relro_addr) > - & ~(GLRO(dl_pagesize) - 1)); > - ElfW(Addr) end = ((l->l_addr + l->l_relro_addr + l->l_relro_size) > - & ~(GLRO(dl_pagesize) - 1)); > - > - if (start != end) > - __mprotect ((void *) start, end - start, PROT_READ | PROT_WRITE); > -} > - > -void > -_dl_static_init (struct link_map *l) > -{ > - struct link_map *rtld_map = l; > - struct r_scope_elem **scope; > - const ElfW(Sym) *ref = NULL; > - lookup_t loadbase; > - void (*f) (void *[]); > - size_t i; > - > - loadbase = _dl_lookup_symbol_x ("_dl_var_init", l, &ref, l->l_local_scope, > - NULL, 0, 1, NULL); > - > - for (scope = l->l_local_scope; *scope != NULL; scope++) > - for (i = 0; i < (*scope)->r_nlist; i++) > - if ((*scope)->r_list[i] == loadbase) > - { > - rtld_map = (*scope)->r_list[i]; > - break; > - } > - > - if (ref != NULL) > - { > - f = (void (*) (void *[])) DL_SYMBOL_ADDRESS (loadbase, ref); > - _dl_unprotect_relro (rtld_map); > - f (variables); > - _dl_protect_relro (rtld_map); > - } > -} > - > -#endif Ok. > diff --git a/sysdeps/unix/sysv/linux/powerpc/ldsodefs.h b/sysdeps/unix/sysv/linux/powerpc/rtld_static_init.h > similarity index 59% > rename from sysdeps/unix/sysv/linux/powerpc/ldsodefs.h > rename to sysdeps/unix/sysv/linux/powerpc/rtld_static_init.h > index bb9c262299..730ac19f77 100644 > --- a/sysdeps/unix/sysv/linux/powerpc/ldsodefs.h > +++ b/sysdeps/unix/sysv/linux/powerpc/rtld_static_init.h > @@ -1,6 +1,5 @@ > -/* Run-time dynamic linker data structures for loaded ELF shared objects. > - PowerPC version. > - Copyright (C) 2013-2021 Free Software Foundation, Inc. > +/* Partial initialization of ld.so loaded via static dlopen. powerpc helper. > + Copyright (C) 2021 Free Software Foundation, Inc. > This file is part of the GNU C Library. > > The GNU C Library is free software; you can redistribute it and/or > @@ -17,17 +16,12 @@ > License along with the GNU C Library; if not, see > . */ > > -#ifndef _LDSODEFS_H > +static inline void > +__rtld_static_init_arch (struct link_map *map, struct rtld_global_ro *dl) > +{ > + /* This field does not exist in the generic _rtld_global_ro version. */ > > -/* Get the real definitions. */ > -#include_next > - > -/* Now define our stuff. */ > - > -/* We need special support to initialize DSO loaded for statically linked > - binaries. */ > -extern void _dl_static_init (struct link_map *map); > -#undef DL_STATIC_INIT > -#define DL_STATIC_INIT(map) _dl_static_init (map) > - > -#endif /* ldsodefs.h */ > + extern __typeof (dl->_dl_cache_line_size) _dl_cache_line_size > + attribute_hidden; > + dl->_dl_cache_line_size = _dl_cache_line_size; > +} > Ok.