[PATCH] libdl.c: static link fail for mips

Vincent Wen wenvincent90 at gmail.com
Fri Mar 29 17:56:29 UTC 2013


I am not sure what mean legitimately use DTPREL. When we build static
link on our application, the linker breaks due to this undefined
reference.

I can re-submit the patch as you suggest as following.

Thanks,

Vincent


diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c
index 71ade1f..385500a 100644
--- a/ldso/libdl/libdl.c
+++ b/ldso/libdl/libdl.c
@@ -41,8 +41,9 @@
 #endif

 #if defined(USE_TLS) && USE_TLS
-#include <ldsodefs.h>
+# include <ldsodefs.h>
 extern void _dl_add_to_slotinfo(struct link_map  *l);
+# include <dl-tls.h>
 #endif

 /* TODO: get rid of global lock and use more finegrained locking, or
@@ -51,7 +52,6 @@ __UCLIBC_MUTEX_STATIC(_dl_
mutex,
PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP);

 #ifdef SHARED
 # if defined(USE_TLS) && USE_TLS
-# include <dl-tls.h>
 extern struct link_map *_dl_update_slotinfo(unsigned long int req_modid);
 # endif


On Fri, Mar 29, 2013 at 4:52 AM, Bernhard Reutner-Fischer
<rep.dot.nop at gmail.com> wrote:
> On 23 February 2013 10:48, Bernhard Reutner-Fischer
> <rep.dot.nop at gmail.com> wrote:
>> On Fri, Feb 22, 2013 at 02:06:43PM -0800, Vincent Wen wrote:
>>>When build statically linked applications for MIPS platform,
>>>sometimes the linker fails with following errors:
>>>undefined reference to TLS_DTPREL_VALUE
>>>undefined reference to TLS_TPREL_VALUE
>>
>> I still suspect that these uses may need a SHARED guard, no?
>
> Would any static linkage legitimately use DTPREL?
>>
>>>The include of dl-tls.h is defined for shared library build.
>>>Removing the SHARED compilation option to cover static link too.
>>
>> Otherwise this would be ok, yes.
>> Can you have a look, please?
>
> If anything, this should be
>
> diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c
> index 71ade1f..385500a 100644
> --- a/ldso/libdl/libdl.c
> +++ b/ldso/libdl/libdl.c
> @@ -41,8 +41,9 @@
>  #endif
>
>  #if defined(USE_TLS) && USE_TLS
> -#include <ldsodefs.h>
> +# include <ldsodefs.h>
>  extern void _dl_add_to_slotinfo(struct link_map  *l);
> +# include <dl-tls.h>
>  #endif
>
>  /* TODO: get rid of global lock and use more finegrained locking, or
> @@ -51,7 +52,6 @@ __UCLIBC_MUTEX_STATIC(_dl_mutex,
> PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP);
>
>  #ifdef SHARED
>  # if defined(USE_TLS) && USE_TLS
> -# include <dl-tls.h>
>  extern struct link_map *_dl_update_slotinfo(unsigned long int req_modid);
>  # endif
>
> thanks,
>> TIA,
>>>
>>>Signed-off-by: Vincent Wen <wenvincent90 at gmail.com>
>>>---
>>> ldso/libdl/libdl.c |    5 ++++-
>>> 1 files changed, 4 insertions(+), 1 deletions(-)
>>>
>>>diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c
>>>index 2337223..5172754 100644
>>>--- a/ldso/libdl/libdl.c
>>>+++ b/ldso/libdl/libdl.c
>>>@@ -49,9 +49,12 @@ extern void _dl_add_to_slotinfo(struct link_map  *l);
>>>  * perhaps RCU for the global structures */
>>> __UCLIBC_MUTEX_STATIC(_dl_mutex, PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP);
>>>
>>>-#ifdef SHARED
>>> # if defined(USE_TLS) && USE_TLS
>>> # include <dl-tls.h>
>>>+# endif
>>>+
>>>+#ifdef SHARED
>>>+# if defined(USE_TLS) && USE_TLS
>>> extern struct link_map *_dl_update_slotinfo(unsigned long int req_modid);
>>> # endif
>>>
>>>--
>>>1.7.9.1.g8d994
>>>
>>>
>>>_______________________________________________
>>>uClibc mailing list
>>>uClibc at uclibc.org
>>>http://lists.busybox.net/mailman/listinfo/uclibc


More information about the uClibc mailing list