]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
elf: Consolidate machine-agnostic DTV definitions in <dl-dtv.h>
authorFlorian Weimer <fweimer@redhat.com>
Mon, 20 Jun 2016 12:31:40 +0000 (14:31 +0200)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Thu, 26 Jan 2017 20:48:26 +0000 (18:48 -0200)
Identical definitions of dtv_t and TLS_DTV_UNALLOCATED were
repeated for all architectures using DTVs.

35 files changed:
ChangeLog
sysdeps/aarch64/dl-tls.h
sysdeps/aarch64/nptl/tls.h
sysdeps/alpha/dl-tls.h
sysdeps/alpha/nptl/tls.h
sysdeps/arm/dl-tls.h
sysdeps/arm/nptl/tls.h
sysdeps/generic/dl-dtv.h [new file with mode: 0644]
sysdeps/hppa/dl-tls.h
sysdeps/hppa/nptl/tls.h
sysdeps/i386/dl-tls.h
sysdeps/i386/nptl/tls.h
sysdeps/ia64/dl-tls.h
sysdeps/ia64/nptl/tls.h
sysdeps/m68k/dl-tls.h
sysdeps/m68k/nptl/tls.h
sysdeps/mach/hurd/i386/tls.h
sysdeps/microblaze/dl-tls.h
sysdeps/microblaze/nptl/tls.h
sysdeps/mips/dl-tls.h
sysdeps/mips/nptl/tls.h
sysdeps/nios2/dl-tls.h
sysdeps/nios2/nptl/tls.h
sysdeps/powerpc/dl-tls.h
sysdeps/powerpc/nptl/tls.h
sysdeps/s390/dl-tls.h
sysdeps/s390/nptl/tls.h
sysdeps/sh/dl-tls.h
sysdeps/sh/nptl/tls.h
sysdeps/sparc/dl-tls.h
sysdeps/sparc/nptl/tls.h
sysdeps/tile/dl-tls.h
sysdeps/tile/nptl/tls.h
sysdeps/x86_64/dl-tls.h
sysdeps/x86_64/nptl/tls.h

index 411ba2e299c2534918d6c0089e25162d811483e6..e5e06a2cb02de650c62b39791946b032b3ef91aa 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,55 @@
+2016-06-20  Florian Weimer  <fweimer@redhat.com>
+
+       Consolidate machine-agnostic DTV definitions in <dl-dtv.h>.
+       * sysdeps/generic/dl-dtv.h: New file.
+       * sysdeps/aarch64/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/aarch64/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/alpha/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/alpha/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/arm/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/arm/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/hppa/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/hppa/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/i386/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/i386/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/ia64/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/ia64/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/m68k/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/m68k/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/mach/hurd/i386/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/microblaze/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/microblaze/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/mips/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/mips/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/nios2/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/nios2/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/powerpc/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/powerpc/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/s390/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/s390/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/sh/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/sh/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/sparc/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/sparc/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+       * sysdeps/x86_64/dl-tls.h (TLS_DTV_UNALLOCATED): Remove.
+       * sysdeps/x86_64/nptl/tls.h: Include <dl-dtv.h>.
+       (dtv_t): Remove.
+
 2016-07-18  Siddhesh Poyarekar  <siddhesh@sourceware.org>
            Matt Clay  <mclay@lycos.com>
 
index 71265c5341a6f20f80710f11bbeaea38acf34d60..7eff42789e3b15fd2241ab304ae3646ff9329ac7 100644 (file)
@@ -25,6 +25,3 @@ typedef struct
 
 
 extern void *__tls_get_addr (tls_index *ti);
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED ((void *) -1l)
index 95ea3f9a1a20bdb9a1b662f7519647d441210af5..c5f20efc8c0fc1e668088d2c1e65f758ddf27e76 100644 (file)
 # include <stdbool.h>
 # include <stddef.h>
 # include <stdint.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 #else /* __ASSEMBLER__ */
 # include <tcb-offsets.h>
index 5f4e4cf4a60c444fe9ef99472f3580f27bcf8b1c..b723a6e01934a81748b7579a540672511317534e 100644 (file)
@@ -25,6 +25,3 @@ typedef struct
 } tls_index;
 
 extern void *__tls_get_addr (tls_index *ti);
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index 90d98e124dd5cb0f8bcdda2327dc905add24e0f7..0d63770fc0b4e5e51078cf623652b4b5ce01e1a8 100644 (file)
 # include <stdbool.h>
 # include <stddef.h>
 # include <stdint.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 /* Get system call information.  */
 # include <sysdep.h>
index ed2efe8c180078b2295c572528ba6656b0af58a9..be2fe620f4a4a0ed4de2415bcfabfb5b519947ae 100644 (file)
@@ -26,6 +26,3 @@ typedef struct dl_tls_index
 
 
 extern void *__tls_get_addr (tls_index *ti);
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index 1ef57d2a87ca6387072128ccf8e5b8e9c7616cab..9b9a5213af4ac18ed7019eb7f8ffd2ab7a17026b 100644 (file)
 # include <stdbool.h>
 # include <stddef.h>
 # include <stdint.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 #else /* __ASSEMBLER__ */
 # include <tcb-offsets.h>
diff --git a/sysdeps/generic/dl-dtv.h b/sysdeps/generic/dl-dtv.h
new file mode 100644 (file)
index 0000000..36c5c58
--- /dev/null
@@ -0,0 +1,36 @@
+/* Generic declarations for DTV-based TLS handling in the dynamic linker.
+   Copyright (C) 2002-2016 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
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, see
+   <http://www.gnu.org/licenses/>.  */
+
+#ifndef _DL_DTV_H
+#define _DL_DTV_H
+
+/* Type for the dtv.  */
+typedef union dtv
+{
+  size_t counter;
+  struct
+  {
+    void *val;
+    bool is_static;
+  } pointer;
+} dtv_t;
+
+/* Value used for dtv entries for which the allocation is delayed.  */
+#define TLS_DTV_UNALLOCATED ((void *) -1l)
+
+#endif /* _DLT_DTV_H */
index 58b9280848591717bf5685ae1b029ddc972b1f1e..2cae6e42ec3d97479519371b716b3a1a3c628e24 100644 (file)
@@ -26,6 +26,3 @@ typedef struct
 
 
 extern void *__tls_get_addr (tls_index *ti);
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index 2e0c861e093e11d87935a040293d313d48fa761a..14a0083d30f9117e1ea78d03d7c02293ab100a99 100644 (file)
 # include <stdbool.h>
 # include <stddef.h>
 # include <stdint.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 #else /* __ASSEMBLER__ */
 # include <tcb-offsets.h>
index 1a8c358bfcd343d71f02fca03344c26d41c529ac..d798b9a6954a1546d2ee4772030f2acc11792489 100644 (file)
@@ -59,6 +59,3 @@ rtld_hidden_def (___tls_get_addr)
 
 # endif
 #endif
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index a6dfa9b377cd2b9f1254153d4b3487565b1a5dcc..74a11dd0d364e8aa14e7493d17544c5434ba7aad 100644 (file)
 # include <sysdep.h>
 # include <libc-internal.h>
 # include <kernel-features.h>
-
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
-
+# include <dl-dtv.h>
 
 typedef struct
 {
index bc008882bf31e0e09ae1281fc6a232d56b934a5d..756b84d0eebe127efd887cd937725db3aed105a2 100644 (file)
@@ -28,6 +28,3 @@
 #define DONT_USE_TLS_INDEX     1
 
 extern void *__tls_get_addr (size_t m, size_t offset);
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index 54fddf5952cdda9ece24aca5c74cbf81c16b8a70..1e03e2c0a8404412789ecf1bfaeb85984a42a692 100644 (file)
 # include <stdint.h>
 # include <stdlib.h>
 # include <list.h>
-
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
-
+# include <dl-dtv.h>
 
 typedef struct
 {
index f853b998741b5c3fc099473769241c509ac0d903..d24ad90dbc794e6dfbe4e97cefa6060a86365928 100644 (file)
@@ -45,6 +45,3 @@ extern void *__tls_get_addr (tls_index *ti);
 
 #define GET_ADDR_OFFSET                (ti->ti_offset + TLS_DTV_OFFSET)
 #define __TLS_GET_ADDR(__ti)   (__tls_get_addr (__ti) - TLS_DTV_OFFSET)
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index f93228212bbc8a369220ad019e7768dc4135c293..4825c4c81adf28cac57be8329ccbaf3349ff6b19 100644 (file)
 # include <stdbool.h>
 # include <stddef.h>
 # include <stdint.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 #else /* __ASSEMBLER__ */
 # include <tcb-offsets.h>
index 3ec5bb032be7fbbb33a622528a1de9e80e0bebdd..81e6926680b21ca57c943212783bf480dd410db9 100644 (file)
 
 
 #ifndef __ASSEMBLER__
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
-
+# include <dl-dtv.h>
 
 /* Type of the TCB.  */
 typedef struct
index f0f8205181e7fe21398ee9e96c0c1675cbeb91f2..5613e21e2ee25f44ae7ad00517019a67dc1076e6 100644 (file)
@@ -24,6 +24,3 @@ typedef struct
 } tls_index;
 
 extern void *__tls_get_addr (tls_index *ti);
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index 8376f5005e76f74048f19cbb6dd2041e2c890456..5e9560abf391e942c7295541d7d3007da118ec59 100644 (file)
 # include <stdbool.h>
 # include <stddef.h>
 # include <stdint.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 #else /* __ASSEMBLER__ */
 # include <tcb-offsets.h>
index 4d084d6191f8224ace7079f80301e5f0edf28cf6..1c5a83f8a41c58a2537d35e381f2c234b3532c8e 100644 (file)
@@ -43,6 +43,3 @@ extern void *__tls_get_addr (tls_index *ti);
 
 # define GET_ADDR_OFFSET       (ti->ti_offset + TLS_DTV_OFFSET)
 # define __TLS_GET_ADDR(__ti)  (__tls_get_addr (__ti) - TLS_DTV_OFFSET)
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index 10ca8782920431a250644d6864ef1a4118f4c8fe..f5f4891bd85ae83946b8dcc33b73270faaca4205 100644 (file)
 # include <stdbool.h>
 # include <stddef.h>
 # include <stdint.h>
+# include <dl-dtv.h>
+
 /* Get system call information.  */
 # include <sysdep.h>
 
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
-
 #ifdef __mips16
 /* MIPS16 uses GCC builtin to access the TP.  */
 # define READ_THREAD_POINTER() (__builtin_thread_pointer ())
index cd794610b6e3f53a8abbac0dc44aaa5a13f5ee1c..45c0db2b9c9c6d279e517f11442d3d95bfc4b436 100644 (file)
@@ -43,6 +43,3 @@ extern void *__tls_get_addr (tls_index *ti);
 
 # define GET_ADDR_OFFSET       (ti->ti_offset + TLS_DTV_OFFSET)
 # define __TLS_GET_ADDR(__ti)  (__tls_get_addr (__ti) - TLS_DTV_OFFSET)
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index ad29ac5ac2f21cc473ba32c6a9dc1423f3082e8c..55e115419b9d3b6ce90813f282ff9fc8fc08554e 100644 (file)
 # include <stdbool.h>
 # include <stddef.h>
 # include <stdint.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 #else /* __ASSEMBLER__ */
 # include <tcb-offsets.h>
index eced36b65da88810bb199465bd572df354f15781..f8b6fcf195eda995ac45e42d92754bbeb2b4bd34 100644 (file)
@@ -49,7 +49,4 @@ extern void *__tls_get_addr (tls_index *ti);
 # define __TLS_GET_ADDR(__ti)  (__tls_get_addr (__ti) - TLS_DTV_OFFSET)
 #endif
 
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
-
 #endif /* dl-tls.h */
index 0e889bc122c9bf91bae1adf43977e9e04c1e5595..fa476a5b3fc5977bc506bc2203667927fcb26e1e 100644 (file)
 # include <stdbool.h>
 # include <stddef.h>
 # include <stdint.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 #else /* __ASSEMBLER__ */
 # include <tcb-offsets.h>
index 503048a622ff2af9601fde3ce1f79fada9e5aba5..ce2d020abadd6ec5e6e56ba56cb18588e8175b16 100644 (file)
@@ -102,6 +102,3 @@ extern void *__tls_get_addr_internal (tls_index *ti);
       + (unsigned long) __builtin_thread_pointer (); })
 
 #endif
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index e4c3ec78302ba4d99e913f9e11a943a4f10e68b8..0fec5863caf15fd11204278f6df92180accc0b24 100644 (file)
 # include <stdlib.h>
 # include <list.h>
 # include <kernel-features.h>
-
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
-
+# include <dl-dtv.h>
 
 typedef struct
 {
index 276ec547605d4f0a96ad31f2ad18a9fd4ee05f4d..52e2a10cafbd6d4013dd667cc57920f94b9407c1 100644 (file)
@@ -26,6 +26,3 @@ typedef struct
 
 
 extern void *__tls_get_addr (tls_index *ti);
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index 6f128c9e957252c46654e7ea38c32056368b36b3..a81e8055f1f0cdaeeac29856801c04938add1119 100644 (file)
 # include <stdlib.h>
 # include <list.h>
 # include <sysdep.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 typedef struct
 {
index 2bfd366747997a53bd7ed629844a9747ab2a9831..b74861ab47d2e7c04e32e340acc0446d4bcb478d 100644 (file)
@@ -26,6 +26,3 @@ typedef struct
 
 
 extern void *__tls_get_addr (tls_index *ti);
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index 08c055220ad2f01ea8cfa6d09e90daa54e92c337..85f2a2c31ccedd02a4fc0649e3bf4972514f45cb 100644 (file)
 # include <stdlib.h>
 # include <list.h>
 # include <kernel-features.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 typedef struct
 {
index d26c6befc5c8744c87bef3e6cd6a888ecbdeca2f..20096f4234491da51aae0f179d6ca90e87f2bfe2 100644 (file)
@@ -40,6 +40,3 @@ extern void *__tls_get_addr (tls_index *ti);
 /* Compute the value for a DTPREL reloc.  */
 #define TLS_DTPREL_VALUE(sym) \
   ((sym)->st_value - TLS_DTV_OFFSET)
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index c908fb8e1fc93fe525ae85b0cbab45d139d6c300..16e8fafa8f15fec3ae9ed68da2c7d7a4daf98dfc 100644 (file)
 # include <stdbool.h>
 # include <stddef.h>
 # include <stdint.h>
-
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
+# include <dl-dtv.h>
 
 #else /* __ASSEMBLER__ */
 # include <tcb-offsets.h>
index 0f101e6ac68dbef257d9edf31598bd8607bd7671..cf6c107f544a5f3474bf638126ba0cce4896c41e 100644 (file)
@@ -27,6 +27,3 @@ typedef struct dl_tls_index
 
 
 extern void *__tls_get_addr (tls_index *ti);
-
-/* Value used for dtv entries for which the allocation is delayed.  */
-#define TLS_DTV_UNALLOCATED    ((void *) -1l)
index 2b061a07c6c59575e93de08d699b7c69720faf03..1bf9586c3bb1ffd3e106a3d2004b66d867b23a8c 100644 (file)
@@ -28,6 +28,7 @@
 # include <sysdep.h>
 # include <libc-internal.h>
 # include <kernel-features.h>
+# include <dl-dtv.h>
 
 /* Replacement type for __m128 since this file is included by ld.so,
    which is compiled with -mno-sse.  It must not change the alignment
@@ -38,18 +39,6 @@ typedef struct
 } __128bits;
 
 
-/* Type for the dtv.  */
-typedef union dtv
-{
-  size_t counter;
-  struct
-  {
-    void *val;
-    bool is_static;
-  } pointer;
-} dtv_t;
-
-
 typedef struct
 {
   void *tcb;           /* Pointer to the TCB.  Not necessarily the