Update.
authorUlrich Drepper <drepper@redhat.com>
Tue, 20 Mar 2001 09:26:25 +0000 (09:26 +0000)
committerUlrich Drepper <drepper@redhat.com>
Tue, 20 Mar 2001 09:26:25 +0000 (09:26 +0000)
* elf/dl-load.c: Various little optimizations.

ChangeLog
elf/dl-load.c

index 86d9a67..12d4217 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,7 @@
 2001-03-20  Ulrich Drepper  <drepper@redhat.com>
 
+       * elf/dl-load.c: Various little optimizations.
+
        * sysdeps/unix/sysv/linux/pathconf.c (__pathconf): Return
        LINUX_LINK_MAX only if the statfs function is not implemented for
        the filesystem.
index 6f56f97..098da6c 100644 (file)
@@ -306,7 +306,7 @@ expand_dynamic_string_token (struct link_map *l, const char *s)
   cnt = DL_DST_COUNT (s, 1);
 
   /* If we do not have to replace anything simply copy the string.  */
-  if (cnt == 0)
+  if (__builtin_expect (cnt, 0) == 0)
     return local_strdup (s);
 
   /* Determine the length of the substituted string.  */
@@ -905,8 +905,8 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
                if (ph->p_flags & PF_X)
                  c->prot |= PROT_EXEC;
              }
-           break;
          }
+         break;
        }
 
     /* Now process the load commands and map segments into memory.  */
@@ -953,7 +953,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
       {
        /* This object is loaded at a fixed address.  This must never
            happen for objects loaded with dlopen().  */
-       if (mode & __RTLD_DLOPEN)
+       if (__builtin_expect (mode & __RTLD_DLOPEN, 0))
          {
            LOSE (0, N_("cannot dynamically load executable"));
          }
@@ -1007,7 +1007,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
                                    _dl_pagesize, c->prot|PROT_WRITE) < 0)
                      LOSE (errno, N_("cannot change memory protections"));
                  }
-               memset ((void *) zero, 0, zeropage - zero);
+               memset ((void *) zero, '\0', zeropage - zero);
                if ((c->prot & PROT_WRITE) == 0)
                  __mprotect ((caddr_t) (zero & ~(_dl_pagesize - 1)),
                              _dl_pagesize, c->prot);
@@ -1030,7 +1030,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
 
     if (l->l_phdr == NULL)
       {
-       /* The program header is not contained in any of the segmenst.
+       /* The program header is not contained in any of the segments.
           We have to allocate memory ourself and copy it over from
           out temporary place.  */
        ElfW(Phdr) *newp = (ElfW(Phdr) *) malloc (header->e_phnum
@@ -1138,7 +1138,7 @@ _dl_map_object_from_fd (const char *name, int fd, struct filebuf *fbp,
     }
 
   /* Remember whether this object must be initialized first.  */
-  if (l->l_flags_1 & DF_1_INITFIRST)
+  if (__builtin_expect (l->l_flags_1 & DF_1_INITFIRST, 0))
     _dl_initfirst = l;
 
   /* Finally the file information.  */
@@ -1220,7 +1220,7 @@ open_verify (const char *name, struct filebuf *fbp)
   };
   static const struct {
     ElfW(Word) vendorlen, datalen, type;
-    char vendor [4];
+    char vendor[4];
   } expected_note = { 4, 16, 1, "GNU" };
   int fd;
 
@@ -1339,10 +1339,10 @@ open_verify (const char *name, struct filebuf *fbp)
            if (memcmp (abi_note, &expected_note, sizeof (expected_note)))
              continue;
 
-           osversion = (abi_note [5] & 0xff) * 65536
-                       + (abi_note [6] & 0xff) * 256
-                       + (abi_note [7] & 0xff);
-           if (abi_note [4] != __ABI_TAG_OS
+           osversion = (abi_note[5] & 0xff) * 65536
+                       + (abi_note[6] & 0xff) * 256
+                       + (abi_note[7] & 0xff);
+           if (abi_note[4] != __ABI_TAG_OS
                || (_dl_osversion && _dl_osversion < osversion))
              {
              close_and_out:
@@ -1384,6 +1384,7 @@ open_path (const char *name, size_t namelen, int preloaded,
       size_t cnt;
       char *edp;
       int here_any = 0;
+      int err;
 
       /* If we are debugging the search for libraries print the path
         now if it hasn't happened now.  */
@@ -1436,7 +1437,8 @@ open_path (const char *name, size_t namelen, int preloaded,
          /* Remember whether we found any existing directory.  */
          here_any |= this_dir->status[cnt] == existing;
 
-         if (fd != -1 && preloaded && __libc_enable_secure)
+         if (fd != -1 && __builtin_expect (preloaded, 0)
+             && __libc_enable_secure)
            {
              /* This is an extra security effort to make sure nobody can
                 preload broken shared objects which are in the trusted
@@ -1474,7 +1476,7 @@ open_path (const char *name, size_t namelen, int preloaded,
              return -1;
            }
        }
-      if (here_any && errno != ENOENT && errno != EACCES)
+      if (here_any && (err = errno) != ENOENT && err != EACCES)
        /* The file exists and is readable, but something went wrong.  */
        return -1;
 
@@ -1484,7 +1486,7 @@ open_path (const char *name, size_t namelen, int preloaded,
   while (*++dirs != NULL);
 
   /* Remove the whole path if none of the directories exists.  */
-  if (! any)
+  if (__builtin_expect (! any, 0))
     {
       /* Paths which were allocated using the minimal malloc() in ld.so
         must not be freed using the general free() in libc.  */
@@ -1515,7 +1517,7 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded,
       /* If the requested name matches the soname of a loaded object,
         use that object.  Elide this check for names that have not
         yet been opened.  */
-      if (l->l_faked != 0)
+      if (__builtin_expect (l->l_faked, 0) != 0)
        continue;
       if (!_dl_name_match_p (name, l))
        {
@@ -1626,7 +1628,8 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded,
                            &loader->l_runpath_dirs, &realname, &fb);
        }
 
-      if (fd == -1 && (! preloaded || ! __libc_enable_secure))
+      if (fd == -1
+         && (__builtin_expect (! preloaded, 1) || ! __libc_enable_secure))
        {
          /* Check the list of libraries in the file /etc/ld.so.cache,
             for compatibility with Linux's ldconfig program.  */
@@ -1665,7 +1668,7 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded,
              if (cached)
                {
                  fd = open_verify (cached, &fb);
-                 if (fd != -1)
+                 if (__builtin_expect (fd, 0) != -1)
                    {
                      realname = local_strdup (cached);
                      if (realname == NULL)
@@ -1701,12 +1704,12 @@ _dl_map_object (struct link_map *loader, const char *name, int preloaded,
       else
        {
          fd = open_verify (realname, &fb);
-         if (fd == -1)
+         if (__builtin_expect (fd, 0) == -1)
            free (realname);
        }
     }
 
-  if (fd == -1)
+  if (__builtin_expect (fd, 0) == -1)
     {
       if (trace_mode)
        {