summary refs log tree commit diff
path: root/elf/dl-open.c
diff options
context:
space:
mode:
Diffstat (limited to 'elf/dl-open.c')
-rw-r--r--elf/dl-open.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/elf/dl-open.c b/elf/dl-open.c
index c7acd74964..6fcfcce3ce 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -155,6 +155,9 @@ dl_open_worker (void *a)
   const char *dst;
   int lazy;
   unsigned int i;
+#ifdef USE_TLS
+  bool any_tls;
+#endif
 
   /* Maybe we have to expand a DST.  */
   dst = strchr (file, '$');
@@ -292,6 +295,12 @@ dl_open_worker (void *a)
       l = l->l_prev;
     }
 
+#ifdef USE_TLS
+  /* We normally don't bump the TLS generation counter.  There must be
+     actually a need to do this.  */
+  any_tls = false;
+#endif
+
   /* Increment the open count for all dependencies.  If the file is
      not loaded as a dependency here add the search list of the newly
      loaded object to the scope.  */
@@ -415,10 +424,14 @@ dl_open_worker (void *a)
 	/* Add the information into the slotinfo data structure.  */
 	listp->slotinfo[idx].map = new->l_searchlist.r_list[i];
 	listp->slotinfo[idx].gen = GL(dl_tls_generation) + 1;
+
+	/* We have to bump the generation counter.  */
+	any_tls = true;
       }
 
-  /* Bump the generation number.  */
-  ++GL(dl_tls_generation);
+  /* Bump the generation number if necessary.  */
+  if (any_tls)
+    ++GL(dl_tls_generation);
 #endif
 
   /* Run the initializer functions of new objects.  */