From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16027 invoked by alias); 14 May 2003 21:31:02 -0000 Mailing-List: contact libc-hacker-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-hacker-owner@sources.redhat.com Received: (qmail 15957 invoked from network); 14 May 2003 21:31:01 -0000 Received: from unknown (HELO localhost.localdomain) (195.113.19.66) by sources.redhat.com with SMTP; 14 May 2003 21:31:01 -0000 Received: from sunsite.ms.mff.cuni.cz (sunsite.mff.cuni.cz [127.0.0.1]) by localhost.localdomain (8.12.8/8.12.8) with ESMTP id h4ELURqO030789; Wed, 14 May 2003 23:30:27 +0200 Received: (from jakub@localhost) by sunsite.ms.mff.cuni.cz (8.12.8/8.12.8/Submit) id h4ELTv3H030306; Wed, 14 May 2003 23:29:57 +0200 Date: Wed, 14 May 2003 21:31:00 -0000 From: Jakub Jelinek To: Ulrich Drepper , Roland McGrath Cc: Glibc hackers Subject: [PATCH] Allow prelinking libraries with no dependencies (glibc part) Message-ID: <20030514212957.GV16629@sunsite.ms.mff.cuni.cz> Reply-To: Jakub Jelinek Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4i X-SW-Source: 2003-05/txt/msg00021.txt.bz2 Hi! Some libraries (e.g. /usr/lib/libaio.so.0) don't have any DT_NEEDED entries because they don't have any relocations against any libraries but self. Such libraries haven't been prelinkable so far, because ld.so prints statically linked for them. This patch just moves the DT_NEEDED check after DL_DEBUG_PRELINK check, it looks big because of indent changes (diff -upb is very short). 2003-05-14 Jakub Jelinek * elf/rtld.c (dl_main): For LD_TRACE_PRELINKING print search scope even ifno DT_NEEDED is present. --- libc/elf/rtld.c.jj 2003-05-13 16:58:06.000000000 -0400 +++ libc/elf/rtld.c 2003-05-14 17:12:35.000000000 -0400 @@ -1262,57 +1262,52 @@ cannot allocate TLS data structures for important that we do this before real relocation, because the functions we call below for output may no longer work properly after relocation. */ - if (! GL(dl_loaded)->l_info[DT_NEEDED]) - _dl_printf ("\tstatically linked\n"); - else + struct link_map *l; + + if (GL(dl_debug_mask) & DL_DEBUG_PRELINK) { - struct link_map *l; + struct r_scope_elem *scope = &GL(dl_loaded)->l_searchlist; - if (GL(dl_debug_mask) & DL_DEBUG_PRELINK) + for (i = 0; i < scope->r_nlist; i++) { - struct r_scope_elem *scope = &GL(dl_loaded)->l_searchlist; - - for (i = 0; i < scope->r_nlist; i++) + l = scope->r_list [i]; + if (l->l_faked) { - l = scope->r_list [i]; - if (l->l_faked) - { - _dl_printf ("\t%s => not found\n", l->l_libname->name); - continue; - } - if (_dl_name_match_p (GL(dl_trace_prelink), l)) - GL(dl_trace_prelink_map) = l; - _dl_printf ("\t%s => %s (0x%0*Zx, 0x%0*Zx)", - l->l_libname->name[0] ? l->l_libname->name - : rtld_progname ?: "
", - l->l_name[0] ? l->l_name - : rtld_progname ?: "
", - (int) sizeof l->l_map_start * 2, - l->l_map_start, - (int) sizeof l->l_addr * 2, - l->l_addr); + _dl_printf ("\t%s => not found\n", l->l_libname->name); + continue; + } + if (_dl_name_match_p (GL(dl_trace_prelink), l)) + GL(dl_trace_prelink_map) = l; + _dl_printf ("\t%s => %s (0x%0*Zx, 0x%0*Zx)", + l->l_libname->name[0] ? l->l_libname->name + : rtld_progname ?: "
", + l->l_name[0] ? l->l_name + : rtld_progname ?: "
", + (int) sizeof l->l_map_start * 2, l->l_map_start, + (int) sizeof l->l_addr * 2, l->l_addr); #ifdef USE_TLS - if (l->l_tls_modid) - _dl_printf (" TLS(0x%Zx, 0x%0*Zx)\n", l->l_tls_modid, - (int) sizeof l->l_tls_offset * 2, - l->l_tls_offset); - else + if (l->l_tls_modid) + _dl_printf (" TLS(0x%Zx, 0x%0*Zx)\n", l->l_tls_modid, + (int) sizeof l->l_tls_offset * 2, + l->l_tls_offset); + else #endif - _dl_printf ("\n"); - } - } - else - { - for (l = GL(dl_loaded)->l_next; l; l = l->l_next) - if (l->l_faked) - /* The library was not found. */ - _dl_printf ("\t%s => not found\n", l->l_libname->name); - else - _dl_printf ("\t%s => %s (0x%0*Zx)\n", l->l_libname->name, - l->l_name, (int) sizeof l->l_map_start * 2, - l->l_map_start); + _dl_printf ("\n"); } } + else if (! GL(dl_loaded)->l_info[DT_NEEDED]) + _dl_printf ("\tstatically linked\n"); + else + { + for (l = GL(dl_loaded)->l_next; l; l = l->l_next) + if (l->l_faked) + /* The library was not found. */ + _dl_printf ("\t%s => not found\n", l->l_libname->name); + else + _dl_printf ("\t%s => %s (0x%0*Zx)\n", l->l_libname->name, + l->l_name, (int) sizeof l->l_map_start * 2, + l->l_map_start); + } if (__builtin_expect (mode, trace) != trace) for (i = 1; i < (unsigned int) _dl_argc; ++i) Jakub