From patchwork Fri Aug 5 07:40:25 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gleb Natapov X-Patchwork-Id: 14324 Received: (qmail 93581 invoked by alias); 5 Aug 2016 07:41:45 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 93566 invoked by uid 89); 5 Aug 2016 07:41:44 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-2.6 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_LOW, SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-wm0-f51.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=uQivm9L6cqm3o1PT3RNK7LbBgmOjxrC4o8XwdKQ2lQc=; b=lrl2KiK7ksyq3UtK7Bckb0an3UoMyu2zSFYTQfwJSAenvsO1Lel/OaGreZghYbBXZQ WrPdCFDJjQFuX06cCWZNA/m/Q3i+ptmL7Yv+JkAVPLePUlQPbz7qP86ACHm8bej0l4Qn iStNjvDXrjaUq3WTZdYANV3hlgC4IWRat5V3oBsQhyqjkEd9nR0hpde3PuxcoZaWb7Sj dFbuuRv/dNembAWMEpdg3515Z8p40GuC++z4wchn9J0mOYdT5nzond2zeTTUhRBPQNbx ZcrtEz3QWVBgyHMNSg74/xHUlIlkqXjLnRAkZQ4qBRkcQHdI6zDnY86chWZbFWzxSZDV cULg== X-Gm-Message-State: AEkooutOR5eSj1UIWwdlCW6SYm86n1IvKtnh+pD/FuMqAJTt1og+hZG4Wd/mGdIssx5waA== X-Received: by 10.28.111.4 with SMTP id k4mr2088548wmc.94.1470382891537; Fri, 05 Aug 2016 00:41:31 -0700 (PDT) From: Gleb Natapov To: libc-alpha@sourceware.org Subject: [PATCH v2 1/2] count number of loaded objects in each namespace only once Date: Fri, 5 Aug 2016 10:40:25 +0300 Message-Id: <1470382826-6022-2-git-send-email-gleb@scylladb.com> In-Reply-To: <1470382826-6022-1-git-send-email-gleb@scylladb.com> References: <1470382826-6022-1-git-send-email-gleb@scylladb.com> _ns_nloaded already has count of all objects in a namespace, no need to add it while iterating over all objects. --- elf/dl-iteratephdr.c | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/elf/dl-iteratephdr.c b/elf/dl-iteratephdr.c index 1cb6e26..e4e7205 100644 --- a/elf/dl-iteratephdr.c +++ b/elf/dl-iteratephdr.c @@ -48,17 +48,18 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, #ifdef SHARED const void *caller = RETURN_ADDRESS (0); for (Lmid_t cnt = GL(dl_nns) - 1; cnt > 0; --cnt) - for (struct link_map *l = GL(dl_ns)[cnt]._ns_loaded; l; l = l->l_next) - { - /* We have to count the total number of loaded objects. */ - nloaded += GL(dl_ns)[cnt]._ns_nloaded; - - if (caller >= (const void *) l->l_map_start - && caller < (const void *) l->l_map_end - && (l->l_contiguous - || _dl_addr_inside_object (l, (ElfW(Addr)) caller))) - ns = cnt; - } + { + /* We have to count the total number of loaded objects. */ + nloaded += GL(dl_ns)[cnt]._ns_nloaded; + for (struct link_map *l = GL(dl_ns)[cnt]._ns_loaded; l; l = l->l_next) + { + if (caller >= (const void *) l->l_map_start + && caller < (const void *) l->l_map_end + && (l->l_contiguous + || _dl_addr_inside_object (l, (ElfW(Addr)) caller))) + ns = cnt; + } + } #endif for (l = GL(dl_ns)[ns]._ns_loaded; l != NULL; l = l->l_next)