Add _dl_load_lock, _dl_lazy, _dl_dynamic_weak, _dl_fpu_control,
authordrepper <drepper>
Fri, 1 Feb 2002 01:29:54 +0000 (01:29 +0000)
committerdrepper <drepper>
Fri, 1 Feb 2002 01:29:54 +0000 (01:29 +0000)
_dl_cpuclock_offset, and _dl_debug_fd to rtld_global.

19 files changed:
elf/Versions
elf/dl-close.c
elf/dl-iteratephdr.c
elf/dl-lookup.c
elf/dl-misc.c
elf/dl-open.c
elf/dl-support.c
elf/do-lookup.h
elf/rtld.c
sysdeps/generic/dl-cache.c
sysdeps/generic/dl-sysdep.c
sysdeps/generic/ldsodefs.h
sysdeps/i386/i686/Versions [deleted file]
sysdeps/ia64/Versions
sysdeps/sparc/Versions [deleted file]
sysdeps/unix/clock_gettime.c
sysdeps/unix/clock_settime.c
sysdeps/unix/sysv/linux/init-first.c
sysdeps/x86_64/Versions [deleted file]

index 5c8da22..af4f4b8 100644 (file)
@@ -30,9 +30,6 @@ libc {
 
 ld {
   GLIBC_2.0 {
-    # global variables
-    _dl_debug_fd;
-
     # Those are in the dynamic linker, but used by libc.so.
     __libc_enable_secure; _dl_catch_error; _dl_check_all_versions;
     _dl_debug_initialize; _dl_debug_state;
@@ -48,20 +45,17 @@ ld {
   }
   GLIBC_2.1 {
     # global variables
-    _dl_fpu_control; __libc_stack_end;
+    __libc_stack_end;
 
     # functions used in other libraries
     _dl_start_profile; _dl_mcount; _dl_unload_cache;
   }
   GLIBC_2.1.1 {
-    # global variables
-    _dl_lazy;
-
     # functions used in other libraries
     _dl_dst_count; _dl_dst_substitute;
   }
   GLIBC_2.2 {
-    _dl_init; _dl_load_lock; _dl_argv; _dl_check_map_versions;
+    _dl_init; _dl_argv; _dl_check_map_versions;
 
     # variables used elsewhere
     _dl_out_of_memory;
index cece96b..65de9e7 100644 (file)
@@ -57,7 +57,7 @@ _dl_close (void *_map)
     _dl_signal_error (0, map->l_name, NULL, N_("shared object not open"));
 
   /* Acquire the lock.  */
-  __libc_lock_lock_recursive (_dl_load_lock);
+  __libc_lock_lock_recursive (GL(dl_load_lock));
 
   /* Decrement the reference count.  */
   if (map->l_opencount > 1 || map->l_type != lt_loaded)
@@ -70,7 +70,7 @@ _dl_close (void *_map)
       /* One decrement the object itself, not the dependencies.  */
       --map->l_opencount;
 
-      __libc_lock_unlock_recursive (_dl_load_lock);
+      __libc_lock_unlock_recursive (GL(dl_load_lock));
       return;
     }
 
@@ -298,7 +298,7 @@ _dl_close (void *_map)
   free (list);
 
   /* Release the lock.  */
-  __libc_lock_unlock_recursive (_dl_load_lock);
+  __libc_lock_unlock_recursive (GL(dl_load_lock));
 }
 
 
index e2a5d2a..3145e38 100644 (file)
@@ -32,7 +32,7 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
   int ret = 0;
 
   /* Make sure we are alone.  */
-  __libc_lock_lock_recursive (_dl_load_lock);
+  __libc_lock_lock_recursive (GL(dl_load_lock));
 
   for (l = GL(dl_loaded); l != NULL; l = l->l_next)
     {
@@ -49,7 +49,7 @@ __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info,
     }
 
   /* Release the lock.  */
-  __libc_lock_unlock_recursive (_dl_load_lock);
+  __libc_lock_unlock_recursive (GL(dl_load_lock));
 
   return ret;
 }
index f10ff47..695ce54 100644 (file)
@@ -94,7 +94,7 @@ add_dependency (struct link_map *undef_map, struct link_map *map)
     return 0;
 
   /* Make sure nobody can unload the object while we are at it.  */
-  __libc_lock_lock_recursive (_dl_load_lock);
+  __libc_lock_lock_recursive (GL(dl_load_lock));
 
   /* Determine whether UNDEF_MAP already has a reference to MAP.  First
      look in the normal dependencies.  */
@@ -180,7 +180,7 @@ add_dependency (struct link_map *undef_map, struct link_map *map)
 
  out:
   /* Release the lock.  */
-  __libc_lock_unlock_recursive (_dl_load_lock);
+  __libc_lock_unlock_recursive (GL(dl_load_lock));
 
   return result;
 }
index a96689e..d4d9d13 100644 (file)
@@ -1,5 +1,5 @@
 /* Miscellaneous support functions for dynamic linker
-   Copyright (C) 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -80,10 +80,6 @@ _dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot)
 }
 
 
-/* Descriptor to write debug messages to.  */
-int _dl_debug_fd = 2;
-
-
 /* Bare-bone printf implementation.  This function only knows about
    the formats and flags needed and can handle only up to 64 stripes in
    the output.  */
@@ -250,7 +246,7 @@ _dl_debug_printf (const char *fmt, ...)
   va_list arg;
 
   va_start (arg, fmt);
-  _dl_debug_vdprintf (_dl_debug_fd, 1, fmt, arg);
+  _dl_debug_vdprintf (GL(dl_debug_fd), 1, fmt, arg);
   va_end (arg);
 }
 
@@ -262,7 +258,7 @@ _dl_debug_printf_c (const char *fmt, ...)
   va_list arg;
 
   va_start (arg, fmt);
-  _dl_debug_vdprintf (_dl_debug_fd, -1, fmt, arg);
+  _dl_debug_vdprintf (GL(dl_debug_fd), -1, fmt, arg);
   va_end (arg);
 }
 
index 2f82e4c..56b6cbb 100644 (file)
@@ -259,7 +259,7 @@ dl_open_worker (void *a)
 #endif
 
   /* Only do lazy relocation if `LD_BIND_NOW' is not set.  */
-  lazy = (mode & RTLD_BINDING_MASK) == RTLD_LAZY && _dl_lazy;
+  lazy = (mode & RTLD_BINDING_MASK) == RTLD_LAZY && GL(dl_lazy);
 
   /* Relocate the objects loaded.  We do this in reverse order so that copy
      relocs of earlier objects overwrite the data written by later objects.  */
@@ -400,7 +400,7 @@ _dl_open (const char *file, int mode, const void *caller)
     _dl_signal_error (EINVAL, file, NULL, N_("invalid mode for dlopen()"));
 
   /* Make sure we are alone.  */
-  __libc_lock_lock_recursive (_dl_load_lock);
+  __libc_lock_lock_recursive (GL(dl_load_lock));
 
   args.file = file;
   args.mode = mode;
@@ -414,7 +414,7 @@ _dl_open (const char *file, int mode, const void *caller)
 #endif
 
   /* Release the lock.  */
-  __libc_lock_unlock_recursive (_dl_load_lock);
+  __libc_lock_unlock_recursive (GL(dl_load_lock));
 
   if (errstring)
     {
index 0efbcc4..b78b79d 100644 (file)
@@ -27,6 +27,7 @@
 #include <ldsodefs.h>
 #include <dl-machine.h>
 #include <bits/libc-lock.h>
+#include <dl-cache.h>
 #include <dl-librecon.h>
 #include <unsecvars.h>
 #include <hp-timing.h>
@@ -119,6 +120,11 @@ struct r_search_path_elem *_dl_init_all_dirs;
 /* The object to be initialized first.  */
 struct link_map *_dl_initfirst;
 
+/* Descriptor to write debug messages to.  */
+int _dl_debug_fd = STDERR_FILENO;
+
+int _dl_correct_cache_id = _DL_CACHE_DEFAULT_ID;
+
 /* During the program run we must not modify the global data of
    loaded shared object simultanously in two threads.  Therefore we
    protect `_dl_open' and `_dl_close' in dl-close.c.
index 65f7b02..18d1ab5 100644 (file)
@@ -160,7 +160,7 @@ FCT (const char *undef_name, unsigned long int hash, const ElfW(Sym) *ref,
            {
            case STB_WEAK:
              /* Weak definition.  Use this value if we don't find another.  */
-             if (__builtin_expect (_dl_dynamic_weak, 0))
+             if (__builtin_expect (GL(dl_dynamic_weak), 0))
                {
                  if (! result->s)
                    {
index 050d7fa..e4c2c6e 100644 (file)
@@ -33,6 +33,8 @@
 #include "dynamic-link.h"
 #include "dl-librecon.h"
 #include <unsecvars.h>
+#include <dl-cache.h>
+#include <dl-procinfo.h>
 
 #include <assert.h>
 
@@ -58,25 +60,6 @@ static void process_envvars (enum mode *modep);
 int _dl_argc;
 char **_dl_argv;
 unsigned int _dl_skip_args;    /* Nonzero if we were run directly.  */
-fpu_control_t _dl_fpu_control = _FPU_DEFAULT;
-int _dl_lazy = 1;
-/* XXX I know about at least one case where we depend on the old weak
-   behavior (it has to do with librt).  Until we get DSO groups implemented
-   we have to make this the default.  Bummer. --drepper  */
-#if 0
-int _dl_dynamic_weak;
-#else
-int _dl_dynamic_weak = 1;
-#endif
-
-/* During the program run we must not modify the global data of
-   loaded shared object simultanously in two threads.  Therefore we
-   protect `_dl_open' and `_dl_close' in dl-close.c.
-
-   This must be a recursive lock since the initializer function of
-   the loaded object might as well require a call to this function.
-   At this time it is not anymore a problem to modify the tables.  */
-__libc_lock_define_initialized_recursive (, _dl_load_lock)
 
 /* Set nonzero during loading and initialization of executable and
    libraries, cleared before the executable's entry point runs.  This
@@ -89,7 +72,26 @@ int _dl_starting_up;
 
 /* This is the structure which defines all variables global to ld.so
    (except those which cannot be added for some reason).  */
-struct rtld_global _rtld_global;
+struct rtld_global _rtld_global =
+  {
+    ._dl_debug_fd = STDERR_FILENO,
+#if 1
+    /* XXX I know about at least one case where we depend on the old
+       weak behavior (it has to do with librt).  Until we get DSO
+       groups implemented we have to make this the default.
+       Bummer. --drepper  */
+    ._dl_dynamic_weak = 1,
+#endif
+    ._dl_lazy = 1,
+    ._dl_fpu_control = _FPU_DEFAULT,
+    ._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
+    ._dl_hwcap_mask = HWCAP_IMPORTANT,
+    ._dl_load_lock = _LIBC_LOCK_RECURSIVE_INITIALIZER
+  };
+/* There must only be the definition in ld.so itself.  */
+#ifdef HAVE_PROTECTED
+asm (".protected _rtld_global");
+#endif
 
 
 static void dl_main (const ElfW(Phdr) *phdr,
@@ -418,7 +420,7 @@ dl_main (const ElfW(Phdr) *phdr,
        if (! strcmp (_dl_argv[1], "--list"))
          {
            mode = list;
-           _dl_lazy = -1;      /* This means do no dependency analysis.  */
+           GL(dl_lazy) = -1;   /* This means do no dependency analysis.  */
 
            ++_dl_skip_args;
            --_dl_argc;
@@ -941,13 +943,13 @@ of this helper program; chances are you did not intend to run this program.\n\
       else
        {
          /* If LD_WARN is set warn about undefined symbols.  */
-         if (_dl_lazy >= 0 && GL(dl_verbose))
+         if (GL(dl_lazy) >= 0 && GL(dl_verbose))
            {
              /* We have to do symbol dependency testing.  */
              struct relocate_args args;
              struct link_map *l;
 
-             args.lazy = _dl_lazy;
+             args.lazy = GL(dl_lazy);
 
              l = GL(dl_loaded);
              while (l->l_next)
@@ -1142,7 +1144,7 @@ of this helper program; chances are you did not intend to run this program.\n\
 #endif
 
     /* If we are profiling we also must do lazy reloaction.  */
-    _dl_lazy |= consider_profiling;
+    GL(dl_lazy) |= consider_profiling;
 
     l = GL(dl_loaded);
     while (l->l_next)
@@ -1163,7 +1165,7 @@ of this helper program; chances are you did not intend to run this program.\n\
          }
 
        if (l != &GL(dl_rtld_map))
-         _dl_relocate_object (l, l->l_scope, _dl_lazy, consider_profiling);
+         _dl_relocate_object (l, l->l_scope, GL(dl_lazy), consider_profiling);
 
        l = l->l_prev;
       }
@@ -1327,6 +1329,7 @@ process_dl_debug (const char *dl_debug)
                && debopts[cnt].name[len] == '\0')
              {
                GL(dl_debug_mask) |= debopts[cnt].mask;
+               any_debug = 1;
                break;
              }
 
@@ -1428,7 +1431,7 @@ process_envvars (enum mode *modep)
          /* Do we bind early?  */
          if (memcmp (envline, "BIND_NOW", 8) == 0)
            {
-             _dl_lazy = envline[9] == '\0';
+             GL(dl_lazy) = envline[9] == '\0';
              break;
            }
          if (memcmp (envline, "BIND_NOT", 8) == 0)
@@ -1471,7 +1474,7 @@ process_envvars (enum mode *modep)
            }
 
          if (memcmp (envline, "DYNAMIC_WEAK", 12) == 0)
-           _dl_dynamic_weak = 1;
+           GL(dl_dynamic_weak) = 1;
          break;
 
        case 14:
@@ -1553,10 +1556,10 @@ process_envvars (enum mode *modep)
       *--startp = '.';
       startp = memcpy (startp - name_len, debug_output, name_len);
 
-      _dl_debug_fd = __open (startp, flags, DEFFILEMODE);
-      if (_dl_debug_fd == -1)
+      GL(dl_debug_fd) = __open (startp, flags, DEFFILEMODE);
+      if (GL(dl_debug_fd) == -1)
        /* We use standard output if opening the file failed.  */
-       _dl_debug_fd = STDOUT_FILENO;
+       GL(dl_debug_fd) = STDOUT_FILENO;
     }
 }
 
index 7ba00e4..3800a67 100644 (file)
@@ -38,10 +38,6 @@ static size_t cachesize;
 /* 1 if cache_data + PTR points into the cache.  */
 #define _dl_cache_verify_ptr(ptr) (ptr < cache_data_size)
 
-/* This is the cache ID we expect.  Normally it is 3 for glibc linked
-   binaries.  */
-int _dl_correct_cache_id = _DL_CACHE_DEFAULT_ID;
-
 #define SEARCH_CACHE(cache) \
 /* We use binary search since the table is sorted in the cache file.         \
    The first matching entry in the table is returned.                        \
@@ -111,12 +107,12 @@ do                                                                              \
                if (_dl_cache_check_flags (flags)                             \
                    && _dl_cache_verify_ptr (lib->value))                     \
                  {                                                           \
-                   if (best == NULL || flags == _dl_correct_cache_id)        \
+                   if (best == NULL || flags == GL(dl_correct_cache_id))     \
                      {                                                       \
                        HWCAP_CHECK;                                          \
                        best = cache_data + lib->value;                       \
                                                                              \
-                       if (flags == _dl_correct_cache_id)                    \
+                       if (flags == GL(dl_correct_cache_id))                 \
                          /* We've found an exact match for the shared        \
                             object and no general `ELF' release.  Stop       \
                             searching.  */                                   \
index f8b8ac1..d3d5a8c 100644 (file)
@@ -39,7 +39,6 @@
 #include <hp-timing.h>
 
 extern char **_environ;
-extern fpu_control_t _dl_fpu_control;
 extern void _end;
 
 /* Protect SUID program against misuse of file descriptors.  */
@@ -54,10 +53,6 @@ int __libc_multiple_libcs = 0;       /* Defining this here avoids the inclusion
 /* This variable contains the lowest stack address ever used.  */
 void *__libc_stack_end;
 static ElfW(auxv_t) *_dl_auxv;
-//Xunsigned long int _dl_hwcap_mask = HWCAP_IMPORTANT;
-#if HP_TIMING_AVAIL
-hp_timing_t _dl_cpuclock_offset;
-#endif
 
 #ifndef DL_FIND_ARG_COMPONENTS
 # define DL_FIND_ARG_COMPONENTS(cookie, argc, argv, envp, auxp)        \
@@ -95,7 +90,7 @@ _dl_sysdep_start (void **start_argptr,
 #endif
 
 #if HP_TIMING_AVAIL
-  HP_TIMING_NOW (_dl_cpuclock_offset);
+  HP_TIMING_NOW (GL(dl_cpuclock_offset));
 #endif
 
   DL_FIND_ARG_COMPONENTS (start_argptr, _dl_argc, _dl_argv, _environ,
@@ -146,7 +141,7 @@ _dl_sysdep_start (void **start_argptr,
        GL(dl_clktck) = av->a_un.a_val;
        break;
       case AT_FPUCW:
-       _dl_fpu_control = av->a_un.a_val;
+       GL(dl_fpu_control) = av->a_un.a_val;
        break;
       }
 
index 5230332..3249105 100644 (file)
 
 #include <elf.h>
 #include <dlfcn.h>
+#include <fpu_control.h>
 #include <sys/mman.h>
 #include <link.h>
 #include <dl-lookupcfg.h>
 #include <bits/libc-lock.h>
+#include <hp-timing.h>
 
 __BEGIN_DECLS
 
@@ -234,6 +236,15 @@ struct rtld_global
   /* Cached value of `getpagesize ()'.  */
   EXTERN size_t _dl_pagesize;
 
+  /* During the program run we must not modify the global data of
+     loaded shared object simultanously in two threads.  Therefore we
+     protect `_dl_open' and `_dl_close' in dl-close.c.
+
+     This must be a recursive lock since the initializer function of
+     the loaded object might as well require a call to this function.
+     At this time it is not anymore a problem to modify the tables.  */
+  __libc_lock_define_recursive (EXTERN, _dl_load_lock)
+
   /* OS version.  */
   EXTERN unsigned int _dl_osversion;
   /* Platform name.  */
@@ -251,12 +262,27 @@ struct rtld_global
   /* If nonzero print warnings messages.  */
   EXTERN int _dl_verbose;
 
+  /* Do we do lazy relocations?  */
+  EXTERN int _dl_lazy;
+
   /* Nonzero if runtime lookups should not update the .got/.plt.  */
   EXTERN int _dl_bind_not;
 
+  /* Nonzero if references should be treated as weak during runtime
+     linking.  */
+  EXTERN int _dl_dynamic_weak;
+
+  /* Default floating-point control word.  */
+  EXTERN fpu_control_t _dl_fpu_control;
+
   /* The object to be initialized first.  */
   EXTERN struct link_map *_dl_initfirst;
 
+  /* Start time on CPU clock.  */
+#if HP_TIMING_AVAIL
+  EXTERN hp_timing_t _dl_cpuclock_offset;
+#endif
+
   /* Name of the shared object to be profiled (if any).  */
   EXTERN const char *_dl_profile;
   /* Map of shared object to be profiled.  */
@@ -268,7 +294,7 @@ struct rtld_global
   /* Name of the object we want to trace the prelinking.  */
   EXTERN const char *_dl_trace_prelink;
 
-  /* Expect cache ID.  */
+  /* Expected cache ID.  */
   EXTERN int _dl_correct_cache_id;
 
   /* Counters for the number of relocations performed.  */
@@ -291,6 +317,9 @@ struct rtld_global
   EXTERN struct r_search_path_elem *_dl_all_dirs;
   EXTERN struct r_search_path_elem *_dl_init_all_dirs;
 
+  /* File descriptor to write debug messages to.  */
+  EXTERN int _dl_debug_fd;
+
   /* Structure describing the dynamic linker itself.  */
   EXTERN struct link_map _dl_rtld_map;
 #ifdef SHARED
@@ -303,22 +332,9 @@ extern struct rtld_global _rtld_global;
 extern int _dl_argc;
 extern char **_dl_argv;
 
-/* Do we do lazy relocations?  */
-extern int _dl_lazy;
-
 /* The array with message we print as a last resort.  */
 extern const char _dl_out_of_memory[];
 
-/* File descriptor to write debug messages to.  */
-extern int _dl_debug_fd;
-
-/* Nonzero if references should be treated as weak during runtime
-   linking.
-
-   XXX Once we can set the default for this variable to zero move it
-   into _rtld_global.  */
-extern int _dl_dynamic_weak;
-
 
 /* OS-dependent function to open the zero-fill device.  */
 extern int _dl_sysdep_open_zero_fill (void); /* dl-sysdep.c */
diff --git a/sysdeps/i386/i686/Versions b/sysdeps/i386/i686/Versions
deleted file mode 100644 (file)
index 4242ca4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-ld {
-  GLIBC_2.2.3 {
-    _dl_cpuclock_offset;
-  }
-}
index b1df498..1e1387f 100644 (file)
@@ -4,7 +4,4 @@ ld {
     _dl_symbol_address; _dl_unmap; _dl_lookup_address;
     _dl_function_address;
   }
-  GLIBC_2.2.3 {
-    _dl_cpuclock_offset;
-  }
 }
diff --git a/sysdeps/sparc/Versions b/sysdeps/sparc/Versions
deleted file mode 100644 (file)
index 7785430..0000000
+++ /dev/null
@@ -1,6 +0,0 @@
-ld {
-  GLIBC_2.2.3 {
-    # If this symbol is ever available on SPARC it was introduced in 2.2.3.
-    _dl_cpuclock_offset;
-  }
-}
index a86786b..5dc329e 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -21,7 +21,7 @@
 #include <time.h>
 #include <sys/time.h>
 #include <libc-internal.h>
-#include <hp-timing.h>
+#include <ldsodefs.h>
 
 
 #if HP_TIMING_AVAIL
 static hp_timing_t freq;
 
 
-/* We need the starting time for the process.  */
-extern hp_timing_t _dl_cpuclock_offset;
-
-
 /* This function is defined in the thread library.  */
 extern int __pthread_clock_gettime (hp_timing_t freq, struct timespec *tp)
      __attribute__ ((__weak__));
@@ -86,7 +82,7 @@ clock_gettime (clockid_t clock_id, struct timespec *tp)
        HP_TIMING_NOW (tsc);
 
        /* Compute the offset since the start time of the process.  */
-       tsc -= _dl_cpuclock_offset;
+       tsc -= GL(dl_cpuclock_offset);
 
        /* Compute the seconds.  */
        tp->tv_sec = tsc / freq;
index 79a9b56..407e759 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -20,6 +20,7 @@
 #include <time.h>
 #include <sys/time.h>
 #include <libc-internal.h>
+#include <ldsodefs.h>
 
 
 #if HP_TIMING_AVAIL
 static hp_timing_t freq;
 
 
-/* We need the starting time for the process.  */
-extern hp_timing_t _dl_cpuclock_offset;
-
-
 /* This function is defined in the thread library.  */
 extern void __pthread_clock_settime (hp_timing_t offset)
      __attribute__ ((__weak__));
@@ -92,7 +89,7 @@ clock_settime (clockid_t clock_id, const struct timespec *tp)
        /* Determine the offset and use it as the new base value.  */
        if (clock_id != CLOCK_THREAD_CPUTIME_ID
            || __pthread_clock_settime == NULL)
-         _dl_cpuclock_offset = tsc - usertime;
+         GL(dl_cpuclock_offset) = tsc - usertime;
        else
          __pthread_clock_settime (tsc - usertime);
 
index 3cfb08d..39f53a7 100644 (file)
@@ -1,5 +1,5 @@
 /* Initialization code run first thing by the ELF startup code.  Linux version.
-   Copyright (C) 1995-1999, 2000, 2001 Free Software Foundation, Inc.
+   Copyright (C) 1995-1999, 2000, 2001, 2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -28,8 +28,8 @@
 #include "kernel-features.h"
 #include <libc-internal.h>
 
+#include <ldsodefs.h>
 #ifndef SHARED
-# include <ldsodefs.h>
 # include "dl-osinfo.h"
 #endif
 
@@ -41,7 +41,6 @@ static void init (int, char **, char **) __attribute__ ((unused));
 extern int _dl_starting_up;
 weak_extern (_dl_starting_up)
 
-extern fpu_control_t _dl_fpu_control;
 extern int _dl_fpu_control_set;
 
 /* Set nonzero if we have to be prepared for more then one libc being
@@ -78,7 +77,7 @@ init (int argc, char **argv, char **envp)
         kernel would use a different value.  (In a static program we
         don't have this information.)  */
 #ifdef SHARED
-      if (__fpu_control != _dl_fpu_control)
+      if (__fpu_control != GL(dl_fpu_control))
 #endif
        __setfpucw (__fpu_control);
     }
diff --git a/sysdeps/x86_64/Versions b/sysdeps/x86_64/Versions
deleted file mode 100644 (file)
index 42386f4..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-ld {
-  GLIBC_2.2.5 {
-    _dl_cpuclock_offset;
-  }
-}