From patchwork Sun May 1 06:06:13 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fangrui Song X-Patchwork-Id: 53371 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id CCDF33858413 for ; Sun, 1 May 2022 06:07:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org CCDF33858413 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sourceware.org; s=default; t=1651385248; bh=IB1oqrXNCN/gMqpTejlWZtqOBSG87eZ2oRry++iLO8k=; h=Date:In-Reply-To:References:Subject:To:List-Id:List-Unsubscribe: List-Archive:List-Post:List-Help:List-Subscribe:From:Reply-To: From; b=aDm8b4Xs7cgOXiOWozxqzfePUqoaqA2HOjVlE85+NP/Cqg7KO3Dv9SO8We52tHv75 9HwFsk4488SSoQA31kgirBRJMbH6peuJOluHbb91LZTpvukpM3GzNdC/GuisP42AY2 9A4Irk1X8ZUwKuzVYEcr8XIZ/9kcBmRq7t68kfMg= X-Original-To: libc-alpha@sourceware.org Delivered-To: libc-alpha@sourceware.org Received: from mail-yw1-x114a.google.com (mail-yw1-x114a.google.com [IPv6:2607:f8b0:4864:20::114a]) by sourceware.org (Postfix) with ESMTPS id CE4D03858D3C for ; Sun, 1 May 2022 06:07:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org CE4D03858D3C Received: by mail-yw1-x114a.google.com with SMTP id 00721157ae682-2f8398e99dcso111736427b3.9 for ; Sat, 30 Apr 2022 23:07:01 -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:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=IB1oqrXNCN/gMqpTejlWZtqOBSG87eZ2oRry++iLO8k=; b=guX5rzY8s+yoMX7nV7u/faJChYs4e+0eoKz6tV9EbttlU0P4J3LknDOAUP1dHSWVbO NvPawLORwlXb2CWdr7Oo59tsOJDiX6+0iQWYfB5r3O0vNlRd+8iB9+renjNkJt8yD/Ks WJEXs7M/Sv+xZbskxuKycIcDvFciFWLPnIdbOMr4wENC8T03aVFz0WfR+4pzH6OBI03t uGLUdg1DqacEwtp4Z6mCT+uRz1qAT2eKum56kF9Yx/mUHX2OvlMGpQF10+jvlcYLJiBg sUQqtvTPqNikasCPfggkVdXcbPTIJJ1PRb37hy4VZNpOHGToKYn+cVh5W5T1mpRwTRmt o8fQ== X-Gm-Message-State: AOAM5313mHD4/IsBs+WK5NVTQMR6DCAkHAD28NeX77iMVsVdWl9ellKn wVDIRESwULvKR0iN+By1vW1W0t3j1ov5ieIuSc3o0IdwrJp/MzL4Lo0d6XFJuZPFGAiAdvuk55z Ath/9UAloVBSgH/fpTTvGZbS/p0J5fscrBhXJpKfc/ST1ATZlI8GlJ5hmRg3E85w53Syd X-Google-Smtp-Source: ABdhPJwoekUhHNigR7+H9cca5kNG8qR48sm/AePuxLpFTKrqtiexK8MkZAYH8iyTo599zMoo6wj1HzqO8Wqd X-Received: from maskray1.svl.corp.google.com ([2620:15c:2ce:200:a6bd:e82a:7b1:cc1]) (user=maskray job=sendgmr) by 2002:a25:d6c4:0:b0:649:5620:8814 with SMTP id n187-20020a25d6c4000000b0064956208814mr3465364ybg.110.1651385221176; Sat, 30 Apr 2022 23:07:01 -0700 (PDT) Date: Sat, 30 Apr 2022 23:06:13 -0700 In-Reply-To: <20220501060615.1694317-1-maskray@google.com> Message-Id: <20220501060615.1694317-2-maskray@google.com> Mime-Version: 1.0 References: <20220501060615.1694317-1-maskray@google.com> Subject: [PATCH 1/3] elf: Remove ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA check for non-DL_EXTERN_PROTECTED_DATA ports To: libc-alpha@sourceware.org, Adhemerval Zanella , Szabolcs Nagy 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.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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+patchwork=sourceware.org@sourceware.org Sender: "Libc-alpha" A port not defining DL_EXTERN_PROTECTED_DATA should not incur the overhead. In addition, taking the address of a protected function never works (either breaks pointer equality or rejected by ld). Just remove the code related to functions. --- elf/dl-lookup.c | 46 +++++++++++++++------------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c index 989b073e4f..1bb80688ad 100644 --- a/elf/dl-lookup.c +++ b/elf/dl-lookup.c @@ -863,40 +863,24 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map, return 0; } - int protected = (*ref - && ELFW(ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED); - if (__glibc_unlikely (protected != 0)) + if (ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA + && __glibc_unlikely ( + *ref && ELFW (ST_VISIBILITY) ((*ref)->st_other) == STV_PROTECTED + && ELFW (ST_TYPE) ((*ref)->st_info) == STT_OBJECT)) { - /* It is very tricky. We need to figure out what value to - return for the protected symbol. */ - if (type_class == ELF_RTYPE_CLASS_PLT) - { - if (current_value.s != NULL && current_value.m != undef_map) - { - current_value.s = *ref; - current_value.m = undef_map; - } - } - else - { - struct sym_val protected_value = { NULL, NULL }; + struct sym_val protected_value = { NULL, NULL }; - for (scope = symbol_scope; *scope != NULL; i = 0, ++scope) - if (do_lookup_x (undef_name, new_hash, &old_hash, *ref, - &protected_value, *scope, i, version, flags, - skip_map, - (ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA - && ELFW(ST_TYPE) ((*ref)->st_info) == STT_OBJECT - && type_class == ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA) - ? ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA - : ELF_RTYPE_CLASS_PLT, NULL) != 0) - break; + for (scope = symbol_scope; *scope != NULL; i = 0, ++scope) + if (do_lookup_x (undef_name, new_hash, &old_hash, *ref, + &protected_value, *scope, i, version, flags, skip_map, + ELF_RTYPE_CLASS_EXTERN_PROTECTED_DATA, NULL) + != 0) + break; - if (protected_value.s != NULL && protected_value.m != undef_map) - { - current_value.s = *ref; - current_value.m = undef_map; - } + if (protected_value.s != NULL && protected_value.m != undef_map) + { + current_value.s = *ref; + current_value.m = undef_map; } }