From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS17314 8.43.84.0/22 X-Spam-Status: No, score=-5.5 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI,NICE_REPLY_A, RCVD_IN_DNSWL_MED,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server2.sourceware.org [8.43.85.97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id 3FD9F1F8C8 for ; Thu, 7 Oct 2021 16:53:39 +0000 (UTC) Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 018003858013 for ; Thu, 7 Oct 2021 16:53:38 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 018003858013 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1633625618; bh=Nn/XhIf1gk3PGxd+G5yDqE7zE2Uuy4aiw02ytrKYuzU=; h=Subject:To:References:Date:In-Reply-To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To:Cc: From; b=gTICFL7L7GHvGu10OQxjgvqsN6LWyr6HYKmJqzxDu0Y5yWhqnEtTFPogAK67HEtvV fGvtTZZkAakqPYPgIGNZh1UrE4NbSg9g6ZA2uanJRTThKUOXiIhvR3zal2MFeEutK2 UXFEXbsNSY0wdPZ6azgMyc1jTITvVvd5Dr1Hhg+k= Received: from mail-qv1-xf2b.google.com (mail-qv1-xf2b.google.com [IPv6:2607:f8b0:4864:20::f2b]) by sourceware.org (Postfix) with ESMTPS id 6375B3858C60 for ; Thu, 7 Oct 2021 16:53:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 6375B3858C60 Received: by mail-qv1-xf2b.google.com with SMTP id z3so4565313qvl.9 for ; Thu, 07 Oct 2021 09:53:17 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=Nn/XhIf1gk3PGxd+G5yDqE7zE2Uuy4aiw02ytrKYuzU=; b=Cb34D/qE2W4sNFWCbcw3+VXDPb7RbiRecS8i3aNTiU7H6d8/flM6I9+XkUkPxVd5a8 NzZOL4sNNP2IMtUT+5JsIEHGU5jrOf0uxJUwruSwrbXvLqZ1vlr2nruluWSL7bjvl6eO f5n2lpeumkosUFVJPU0PEYVDtMo41FbPqFYfVS8sKQD3fHjQQgHZmMAuYWu0fS/rg8IU X89ohkfiO0E47geAltZX94oJ02DzjtVWduQVAru3/nnGtiWwgxlgKvvVDtRHnQAiOzgY 8i53XDA+CqS+Z1s7Y9i0eT+1ppuSXFAhUXTRqmaofBLIB3Ll57wnKzDVnW4out1KY88z IR5w== X-Gm-Message-State: AOAM531+xxqDl5xUfqzFm3eDOYEciJ7OBSffoOW4fyG+6GjPmSQncNzj dgBBfSHIpdKfWlI0WzKS+lHy+HrZ9ubbFQ== X-Google-Smtp-Source: ABdhPJxHLs79Finp1yw4jinKzfMmvngrO8HVHUBuI8AsP4LbUgpPW7pzoXd5axxIcxokE18GUKDUSg== X-Received: by 2002:a05:6214:11a8:: with SMTP id u8mr5109697qvv.14.1633625596827; Thu, 07 Oct 2021 09:53:16 -0700 (PDT) Received: from ?IPv6:2804:431:c7cb:807a:2864:3aef:e68:8698? ([2804:431:c7cb:807a:2864:3aef:e68:8698]) by smtp.gmail.com with ESMTPSA id v3sm62022qkd.20.2021.10.07.09.53.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 07 Oct 2021 09:53:16 -0700 (PDT) Subject: Re: [PATCH 1/2] Initial support for GNU_PROPERTY_1_NEEDED To: "H.J. Lu" References: <20210803215914.4170913-1-hjl.tools@gmail.com> Message-ID: Date: Thu, 7 Oct 2021 13:53:14 -0300 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit 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: , From: Adhemerval Zanella via Libc-alpha Reply-To: Adhemerval Zanella Cc: GNU C Library Errors-To: libc-alpha-bounces+e=80x24.org@sourceware.org Sender: "Libc-alpha" On 07/10/2021 12:11, H.J. Lu wrote: > On Thu, Oct 7, 2021 at 7:53 AM Adhemerval Zanella > wrote: >> >> >> >> On 03/08/2021 18:59, H.J. Lu via Libc-alpha wrote: >>> 1. Add GNU_PROPERTY_1_NEEDED: >>> >>> #define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO >>> >>> to indicate the needed properties by the object file. >>> 2. Add GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS: >>> >>> #define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0) >>> >>> to indicate that the object file requires canonical function pointers and >>> cannot be used with copy relocation. >>> 3. Scan GNU_PROPERTY_1_NEEDED property and store it in l_1_needed. >> >> It was added by binutils with commit 6320fd00dc374f74658, maybe add on >> the commit the version expected to have this support. >> >> LGTM, with a small suggestion below. >> >> Reviewed-by: Adhemerval Zanella >> >>> --- >>> elf/elf.h | 17 +++++++++++++++++ >>> sysdeps/generic/dl-prop.h | 9 ++++++++- >>> sysdeps/generic/link_map.h | 3 ++- >>> sysdeps/x86/dl-prop.h | 19 ++++++++++++++----- >>> sysdeps/x86/link_map.h | 2 ++ >>> 5 files changed, 43 insertions(+), 7 deletions(-) >>> >>> diff --git a/elf/elf.h b/elf/elf.h >>> index 4738dfa28f..50f87baceb 100644 >>> --- a/elf/elf.h >>> +++ b/elf/elf.h >>> @@ -1312,6 +1312,23 @@ typedef struct >>> /* No copy relocation on protected data symbol. */ >>> #define GNU_PROPERTY_NO_COPY_ON_PROTECTED 2 >>> >>> +/* A 4-byte unsigned integer property: A bit is set if it is set in all >>> + relocatable inputs. */ >>> +#define GNU_PROPERTY_UINT32_AND_LO 0xb0000000 >>> +#define GNU_PROPERTY_UINT32_AND_HI 0xb0007fff >>> + >>> +/* A 4-byte unsigned integer property: A bit is set if it is set in any >>> + relocatable inputs. */ >>> +#define GNU_PROPERTY_UINT32_OR_LO 0xb0008000 >>> +#define GNU_PROPERTY_UINT32_OR_HI 0xb000ffff >>> + >>> +/* The needed properties by the object file. */ >>> +#define GNU_PROPERTY_1_NEEDED GNU_PROPERTY_UINT32_OR_LO >>> + >>> +/* Set if the object file requires canonical function pointers and >>> + cannot be used with copy relocation. */ >>> +#define GNU_PROPERTY_1_NEEDED_INDIRECT_EXTERN_ACCESS (1U << 0) >>> + >>> /* Processor-specific semantics, lo */ >>> #define GNU_PROPERTY_LOPROC 0xc0000000 >>> /* Processor-specific semantics, hi */ >> >> Ok. >> >>> diff --git a/sysdeps/generic/dl-prop.h b/sysdeps/generic/dl-prop.h >>> index eaee8052b6..207aadb35d 100644 >>> --- a/sysdeps/generic/dl-prop.h >>> +++ b/sysdeps/generic/dl-prop.h >>> @@ -47,7 +47,14 @@ static inline int __attribute__ ((always_inline)) >>> _dl_process_gnu_property (struct link_map *l, int fd, uint32_t type, >>> uint32_t datasz, void *data) >>> { >>> - return 0; >>> + /* Continue until GNU_PROPERTY_1_NEEDED is found. */ >>> + if (type == GNU_PROPERTY_1_NEEDED) >>> + { >>> + if (datasz == 4) >>> + l->l_1_needed = *(unsigned int *) data; >> >> Although the pointer seems to be aligned, I think it would be better to >> use memcpy here: >> >> unsigned int t; >> memcpy (&t, data, sizeof (t)); >> l->l_1_needed = t; >> >> (the x86 header might use a more relax since the architecture always >> support unaligned access) > > The GNU property is guaranteed to be properly aligned: > > void > _dl_process_pt_gnu_property (struct link_map *l, int fd, const ElfW(Phdr) *ph) > { > const ElfW(Nhdr) *note = (const void *) (ph->p_vaddr + l->l_addr); > const ElfW(Addr) size = ph->p_memsz; > const ElfW(Addr) align = ph->p_align; > > /* The NT_GNU_PROPERTY_TYPE_0 note must be aligned to 4 bytes in > 32-bit objects and to 8 bytes in 64-bit objects. Skip notes > with incorrect alignment. */ > if (align != (__ELF_NATIVE_CLASS / 8)) > return; > > data passed to _dl_process_gnu_property should be properly aligned. Alright, the memcpy seems unnecessary then.