OSDN Git Service

delete some garbage, cleanup duplicate handling
authorEric Andersen <andersen@codepoet.org>
Tue, 2 Sep 2003 06:55:18 +0000 (06:55 -0000)
committerEric Andersen <andersen@codepoet.org>
Tue, 2 Sep 2003 06:55:18 +0000 (06:55 -0000)
ldso/ldso/ldso.c

index b6f236d..bcb3c98 100644 (file)
 char *_dl_library_path = 0;            /* Where we look for libraries */
 char *_dl_preload = 0;                 /* Things to be loaded before the libs. */
 char *_dl_ldsopath = 0;
-static int _dl_be_lazy = 1;
+static int _dl_be_lazy = RTLD_LAZY;
 #ifdef __SUPPORT_LD_DEBUG__
-static char *_dl_debug  = 0;
-static char *_dl_debug_symbols = 0;
-static char *_dl_debug_move    = 0;
-static char *_dl_debug_reloc   = 0;
-static char *_dl_debug_detail  = 0;
-static char *_dl_debug_nofixups  = 0;
-static char *_dl_debug_bindings  = 0;
-static int   _dl_debug_file = 2;
+char *_dl_debug  = 0;
+char *_dl_debug_symbols = 0;
+char *_dl_debug_move    = 0;
+char *_dl_debug_reloc   = 0;
+char *_dl_debug_detail  = 0;
+char *_dl_debug_nofixups  = 0;
+char *_dl_debug_bindings  = 0;
+int   _dl_debug_file = 2;
 #else
 #define _dl_debug_file 2
 #endif
@@ -906,6 +906,10 @@ static void _dl_get_ready_to_run(struct elf_resolve *tpnt, struct elf_resolve *a
                                {
                                        continue;
                                }
+#if defined (__SUPPORT_LD_DEBUG__)
+                               if(_dl_debug) _dl_dprintf(_dl_debug_file, "\tfile='%s';  needed by '%s'\n", 
+                                               str, _dl_progname);
+#endif
                                tpnt1 = _dl_load_shared_library(_dl_secure, &rpnt, NULL, str);
                                if (!tpnt1) {
 #ifdef __LDSO_LDD_SUPPORT__
@@ -986,6 +990,10 @@ static void _dl_get_ready_to_run(struct elf_resolve *tpnt, struct elf_resolve *a
                                                {
                                                        continue;
                                                }
+#if defined (__SUPPORT_LD_DEBUG__)
+                                               if(_dl_debug) _dl_dprintf(_dl_debug_file, "\tfile='%s';  needed by '%s'\n", 
+                                                               cp2, _dl_progname);
+#endif
                                                tpnt1 = _dl_load_shared_library(0, &rpnt, NULL, cp2);
                                                if (!tpnt1) {
 #ifdef __LDSO_LDD_SUPPORT__
@@ -1022,70 +1030,32 @@ static void _dl_get_ready_to_run(struct elf_resolve *tpnt, struct elf_resolve *a
        }
 #endif
 
-       for (tcurr = _dl_loaded_modules; tcurr; tcurr = tcurr->next) {
+       for (tcurr = _dl_loaded_modules; tcurr; tcurr = tcurr->next) 
+       {
                Elf32_Dyn *dpnt;
-               for (dpnt = (Elf32_Dyn *) tcurr->dynamic_addr; dpnt->d_tag;
-                               dpnt++) {
-                       if (dpnt->d_tag == DT_NEEDED) {
+               for (dpnt = (Elf32_Dyn *) tcurr->dynamic_addr; dpnt->d_tag; dpnt++) 
+               {
+                       if (dpnt->d_tag == DT_NEEDED) 
+                       {
+                               char *name;
                                lpntstr = (char*) (tcurr->loadaddr + tcurr->dynamic_info[DT_STRTAB] + dpnt->d_un.d_val);
-                               if (_dl_strcmp(lpntstr, "libc.so.6") == 0) {
-                                       char *name, *msg;
-                                       name = tcurr->libname;
-                                       while(*name == '/')
-                                               name++;
-                                       if (_dl_trace_loaded_objects) {
-                                               msg = "WARNING"; 
-                                       } else {
-                                               msg = "ERROR"; 
-                                       }
-                                       _dl_dprintf(2, "\t%s: %s is linked with GNU libc!\n", msg, --name);
-                                       /* If all we are doing is ldd, then we don't need to freak out... */
-                                       if (_dl_trace_loaded_objects) {
-                                               continue;
-                                       }
-                                       /* Time to freak out.  Make sure glibc linked libraries are not loaded */
-                                       _dl_exit(150);
-                               }
-                               if (tpnt && _dl_strcmp(lpntstr, _dl_get_last_path_component(tpnt->libname)) == 0) 
-                               {
-                                       struct elf_resolve *ttmp;
+                               name = _dl_get_last_path_component(lpntstr);
 
-#ifdef __LDSO_LDD_SUPPORT__
-                                       if (_dl_trace_loaded_objects && tpnt->usage_count==1) {
-                                               char *name;
-                                               name = tpnt->libname;
-                                               while(*name == '/')
-                                                       name++;
-                                               _dl_dprintf(1, "\t%s => %s (%x)\n", 
-                                                               lpntstr, --name, (unsigned) tpnt->loadaddr);
-                                       }
-#endif
-                                       ttmp = _dl_loaded_modules;
-                                       while (ttmp->next)
-                                               ttmp = ttmp->next;
-                                       ttmp->next = tpnt;
-                                       tpnt->prev = ttmp;
-                                       tpnt->next = NULL;
-                                       rpnt->next = (struct dyn_elf *) _dl_malloc(sizeof(struct dyn_elf));
-                                       _dl_memset(rpnt->next, 0, sizeof(struct dyn_elf));
-                                       rpnt->next->prev = rpnt;
-                                       rpnt = rpnt->next;
-                                       rpnt->dyn = tpnt;
-                                       tpnt->usage_count++;
-                                       tpnt->symbol_scope = _dl_symbol_tables;
-                                       tpnt = NULL;
-                                       continue;
-                               }
-                               if ((tpnt1 = _dl_check_if_named_library_is_loaded(lpntstr))) 
+                               if ((tpnt1 = _dl_check_if_named_library_is_loaded(name))) 
                                {
                                        continue;
                                }
+#if defined (__SUPPORT_LD_DEBUG__)
+                               if(_dl_debug) _dl_dprintf(_dl_debug_file, "\tfile='%s';  needed by '%s'\n", 
+                                               lpntstr, _dl_progname);
+#endif
                                if (!(tpnt1 = _dl_load_shared_library(0, &rpnt, tcurr, lpntstr)))
                                {
 #ifdef __LDSO_LDD_SUPPORT__
-                                       if (_dl_trace_loaded_objects)
+                                       if (_dl_trace_loaded_objects) {
                                                _dl_dprintf(1, "\t%s => not found\n", lpntstr);
-                                       else 
+                                               continue;
+                                       } else 
 #endif
                                        {
                                                _dl_dprintf(2, "%s: can't load library '%s'\n", _dl_progname, lpntstr);
@@ -1097,10 +1067,7 @@ static void _dl_get_ready_to_run(struct elf_resolve *tpnt, struct elf_resolve *a
 #endif
 #ifdef __LDSO_LDD_SUPPORT__
                                        if (_dl_trace_loaded_objects && tpnt1->usage_count==1) {
-                                               char *name;
-                                               name = tpnt1->libname;
-                                               while(*name == '/')
-                                                       name++;
+                                               name = _dl_get_last_path_component(tpnt1->libname);
                                                _dl_dprintf(1, "\t%s => %s (%x)\n", lpntstr, --name, 
                                                                (unsigned) tpnt1->loadaddr);
                                        }