From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 37225 invoked by alias); 7 Mar 2018 20:23:14 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Received: (qmail 36947 invoked by uid 89); 7 Mar 2018 20:23:13 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.2 required=5.0 tests=AWL,BAYES_00,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=no version=3.3.2 spammy=sparc32, insignificant X-HELO: mail-yb0-f194.google.com 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=dlMgUBGL4Fh18+EfQVyfrGqber5wYEUpf6ywoLHKpyY=; b=Xw+1SK2PV30DEhQOiKd9qkKxSzbVzms2OAnVD3n+UjAFfbD7O9fhDTdvO6Mx5PETLi JbVV6GiV8aU3+vc822D/TXyt6ArpYHU+oyJ1ObAdghYYhXswEU8bieorX4dK8s9qo+A5 ma4wdnW4C5m8IUvXDEsHRdZOY9l+pS/tPKRFt+Rio9oU+AECX2WDYWiqvkWCNq8CpQba 02xpXBsHWI3EXYdqU2/XaBm7GzRsp+i8Wk0tV8MPBINrmhdRNrk2H9qb1VOz+AwMCY8D r8IjeApb9J+D5RFH2UEt9rmgEGZz/bFsUGnewCS9ElLW3pEDC2AC/Vx+5XMeGH+Jz4d2 Pwow== X-Gm-Message-State: AElRT7FY9cNxI30uh6mOxj7NDFdQdkKWnorv1BkotYOEpMzVi2CEkzR0 ZsVan13t5XeWX9M2SSOCRuPUf5Tlyqk= X-Google-Smtp-Source: AG47ELtrNN65LZZXs5YVVCq7oAj5HrbAdzkW7FbtNrdPNsliQh6azR8O23IpgCuBWswiDtOnXjOJOQ== X-Received: by 2002:a25:d781:: with SMTP id o123-v6mr10400503ybg.462.1520454189849; Wed, 07 Mar 2018 12:23:09 -0800 (PST) Subject: Re: [PATCH v2 1/2] elf: Unify symbol address run-time calculation [BZ #19818] To: libc-alpha@sourceware.org References: From: Adhemerval Zanella Message-ID: <12d3e8d5-eb3e-0fa8-74d3-b670be26d791@linaro.org> Date: Wed, 07 Mar 2018 20:23:00 -0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-SW-Source: 2018-03/txt/msg00198.txt.bz2 On 20/02/2018 15:37, Maciej W. Rozycki wrote: > Wrap symbol address run-time calculation into a macro and use it > throughout, replacing inline calculations. > > There are a couple of variants, most of them different in a functionally > insignificant way. Most calculations are right following RESOLVE_MAP, > at which point either the map or the symbol returned can be checked for > validity as the macro sets either both or neither. In some places both > the symbol and the map has to be checked however. > > My initial implementation therefore always checked both, however that > resulted in code larger by as much as 0.3%, as many places know from > elsewhere that no check is needed. I have decided the size growth was > unacceptable. > > Having looked closer I realized that it's the map that is the culprit. > Therefore I have modified LOOKUP_VALUE_ADDRESS to accept an additional > boolean argument telling it to access the map without checking it for > validity. This in turn has brought quite nice results, with new code > actually being smaller for i686, and MIPS o32, n32 and little-endian n64 > targets, unchanged in size for x86-64 and, unusually, marginally larger > for big-endian MIPS n64, as follows: > > i686: > text data bss dec hex filename > 152255 4052 192 156499 26353 ld-2.27.9000-base.so > 152159 4052 192 156403 262f3 ld-2.27.9000-elf-symbol-value.so > MIPS/o32/el: > text data bss dec hex filename > 142906 4396 260 147562 2406a ld-2.27.9000-base.so > 142890 4396 260 147546 2405a ld-2.27.9000-elf-symbol-value.so > MIPS/n32/el: > text data bss dec hex filename > 142267 4404 260 146931 23df3 ld-2.27.9000-base.so > 142171 4404 260 146835 23d93 ld-2.27.9000-elf-symbol-value.so > MIPS/n64/el: > text data bss dec hex filename > 149835 7376 408 157619 267b3 ld-2.27.9000-base.so > 149787 7376 408 157571 26783 ld-2.27.9000-elf-symbol-value.so > MIPS/o32/eb: > text data bss dec hex filename > 142870 4396 260 147526 24046 ld-2.27.9000-base.so > 142854 4396 260 147510 24036 ld-2.27.9000-elf-symbol-value.so > MIPS/n32/eb: > text data bss dec hex filename > 142019 4404 260 146683 23cfb ld-2.27.9000-base.so > 141923 4404 260 146587 23c9b ld-2.27.9000-elf-symbol-value.so > MIPS/n64/eb: > text data bss dec hex filename > 149763 7376 408 157547 2676b ld-2.27.9000-base.so > 149779 7376 408 157563 2677b ld-2.27.9000-elf-symbol-value.so > x86-64: > text data bss dec hex filename > 148462 6452 400 155314 25eb2 ld-2.27.9000-base.so > 148462 6452 400 155314 25eb2 ld-2.27.9000-elf-symbol-value.so > > [BZ #19818] > * sysdeps/generic/ldsodefs.h (LOOKUP_VALUE_ADDRESS): Add `set' > parameter. > (SYMBOL_ADDRESS): New macro. > [!ELF_FUNCTION_PTR_IS_SPECIAL] (DL_SYMBOL_ADDRESS): Use > SYMBOL_ADDRESS for symbol address calculation. > * elf/dl-runtime.c (_dl_fixup): Likewise. > (_dl_profile_fixup): Likewise. > * elf/dl-symaddr.c (_dl_symbol_address): Likewise. > * elf/rtld.c (dl_main): Likewise. > * sysdeps/aarch64/dl-machine.h (elf_machine_rela): Likewise. > * sysdeps/alpha/dl-machine.h (elf_machine_rela): Likewise. > * sysdeps/arm/dl-machine.h (elf_machine_rel): Likewise. > (elf_machine_rela): Likewise. > * sysdeps/hppa/dl-machine.h (elf_machine_rela): Likewise. > * sysdeps/hppa/dl-symaddr.c (_dl_symbol_address): Likewise. > * sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise. > (elf_machine_rela): Likewise. > * sysdeps/ia64/dl-machine.h (elf_machine_rela): Likewise. > * sysdeps/m68k/dl-machine.h (elf_machine_rela): Likewise. > * sysdeps/microblaze/dl-machine.h (elf_machine_rela): Likewise. > * sysdeps/mips/dl-machine.h (ELF_MACHINE_BEFORE_RTLD_RELOC): > Likewise. > (elf_machine_reloc): Likewise. > (elf_machine_got_rel): Likewise. > * sysdeps/mips/dl-trampoline.c (__dl_runtime_resolve): Likewise. > * sysdeps/nios2/dl-machine.h (elf_machine_rela): Likewise. > * sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela): > Likewise. > * sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela): > Likewise. > * sysdeps/riscv/dl-machine.h (elf_machine_rela): Likewise. > * sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela): > Likewise. > * sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela): > Likewise. > * sysdeps/sh/dl-machine.h (elf_machine_rela): Likewise. > * sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): > Likewise. > * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): > Likewise. > * sysdeps/tile/dl-machine.h (elf_machine_rela): Likewise. > * sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise. LGTM, thanks. Reviewed-by: Adhemerval Zanella