Back to index

glibc  2.9
dl-tsd.c
Go to the documentation of this file.
00001 /* Thread-local data used by error handling for runtime dynamic linker.
00002    Copyright (C) 2002, 2005 Free Software Foundation, Inc.
00003    This file is part of the GNU C Library.
00004 
00005    The GNU C Library is free software; you can redistribute it and/or
00006    modify it under the terms of the GNU Lesser General Public
00007    License as published by the Free Software Foundation; either
00008    version 2.1 of the License, or (at your option) any later version.
00009 
00010    The GNU C Library is distributed in the hope that it will be useful,
00011    but WITHOUT ANY WARRANTY; without even the implied warranty of
00012    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013    Lesser General Public License for more details.
00014 
00015    You should have received a copy of the GNU Lesser General Public
00016    License along with the GNU C Library; if not, write to the Free
00017    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
00018    02111-1307 USA.  */
00019 
00020 #ifdef _LIBC_REENTRANT
00021 
00022 # include <ldsodefs.h>
00023 # include <tls.h>
00024 
00025 # ifndef SHARED
00026 
00027 /* _dl_error_catch_tsd points to this for the single-threaded case.
00028    It's reset by the thread library for multithreaded programs
00029    if we're not using __thread.  */
00030 void ** __attribute__ ((const))
00031 _dl_initial_error_catch_tsd (void)
00032 {
00033 #  if USE___THREAD
00034   static __thread void *data;
00035 #  else
00036   static void *data;
00037 #  endif
00038   return &data;
00039 }
00040 void **(*_dl_error_catch_tsd) (void) __attribute__ ((const))
00041      = &_dl_initial_error_catch_tsd;
00042 
00043 # elif USE___THREAD
00044 
00045 /* libpthread sets _dl_error_catch_tsd to point to this function.
00046    We define it here instead of in libpthread so that it doesn't
00047    need to have a TLS segment of its own just for this one pointer.  */
00048 
00049 void ** __attribute__ ((const))
00050 __libc_dl_error_tsd (void)
00051 {
00052   static __thread void *data attribute_tls_model_ie;
00053   return &data;
00054 }
00055 
00056 # endif       /* SHARED */
00057 
00058 #endif /* _LIBC_REENTRANT */