summaryrefslogtreecommitdiffstats
path: root/ldso/include
diff options
context:
space:
mode:
author"Steven J. Hill" <sjhill@realitydiluted.com>2005-08-09 05:45:37 +0000
committer"Steven J. Hill" <sjhill@realitydiluted.com>2005-08-09 05:45:37 +0000
commit7eca0902fd7bbdb04ea83f967b0a198335c8d5db (patch)
treed8e38b0b0b122031b546b94f9c208c98f77ad482 /ldso/include
parent79d0de9210745aad1115832e74c39da14142d619 (diff)
downloaduClibc-alpine-7eca0902fd7bbdb04ea83f967b0a198335c8d5db.tar.bz2
uClibc-alpine-7eca0902fd7bbdb04ea83f967b0a198335c8d5db.tar.xz
Changes made to the dynamic loader for TLS/NPTL support. Additional changes made to libpthread and libc for remaining support.
Diffstat (limited to 'ldso/include')
-rw-r--r--ldso/include/dl-string.h7
-rw-r--r--ldso/include/ldsodefs.h39
2 files changed, 30 insertions, 16 deletions
diff --git a/ldso/include/dl-string.h b/ldso/include/dl-string.h
index 8e35e6ad2..2e21a3dff 100644
--- a/ldso/include/dl-string.h
+++ b/ldso/include/dl-string.h
@@ -13,6 +13,7 @@ static char * _dl_strchr(const char * str,int c);
static char *_dl_strrchr(const char *str, int c);
static char *_dl_strstr(const char *s1, const char *s2);
static void * _dl_memcpy(void * dst, const void * src, size_t len);
+static void * _dl_mempcpy(void * dst, const void * src, size_t len);
static int _dl_memcmp(const void * s1,const void * s2,size_t len);
static void *_dl_memset(void * str,int c,size_t len);
static char *_dl_get_last_path_component(char *path);
@@ -146,6 +147,12 @@ static inline void * _dl_memcpy(void * dst, const void * src, size_t len)
return dst;
}
+static inline void * _dl_mempcpy(void * dst, const void * src, size_t len)
+{
+ _dl_memcpy(dst, src, len);
+ return (void *)(((char *) dst) + len);
+}
+
static __always_inline int _dl_memcmp(const void * s1,const void * s2,size_t len)
{
unsigned char *c1 = (unsigned char *)s1-1;
diff --git a/ldso/include/ldsodefs.h b/ldso/include/ldsodefs.h
index 833fe2c25..ce4c375da 100644
--- a/ldso/include/ldsodefs.h
+++ b/ldso/include/ldsodefs.h
@@ -4,11 +4,19 @@
#include <features.h>
#include <tls.h>
-/*
- * NPTL - These are supposed to be from 'sysdeps/generic/ldsodefs.h'
- * and used with the ld.so global structure. I am not sure how
- * this fits into uClibc yet, so they are empty.
- */
+#ifdef IS_IN_rtld
+# define EXTERN
+#else
+# define EXTERN extern
+#endif
+
+/* Non-shared code has no support for multiple namespaces. */
+#ifdef SHARED
+# define DL_NNS 16
+#else
+# define DL_NNS 1
+#endif
+
#define GL(x) _##x
#define GLRO(x) _##x
@@ -17,7 +25,6 @@
might use the variable which results in copy relocations on some
platforms. But this does not matter, ld.so can always use the local
copy. */
-//extern void *__libc_stack_end attribute_relro;
extern void *__libc_stack_end;
rtld_hidden_proto (__libc_stack_end)
@@ -64,11 +71,11 @@ extern void _dl_nothread_init_static_tls (struct link_map *) attribute_hidden;
defined as well, so _dl_rtld_map needs to be last before this. */
#ifdef USE_TLS
/* Highest dtv index currently needed. */
- extern size_t _dl_tls_max_dtv_idx;
+ EXTERN size_t _dl_tls_max_dtv_idx;
/* Flag signalling whether there are gaps in the module ID allocation. */
- extern bool _dl_tls_dtv_gaps;
+ EXTERN bool _dl_tls_dtv_gaps;
/* Information about the dtv slots. */
- extern struct dtv_slotinfo_list
+ EXTERN struct dtv_slotinfo_list
{
size_t len;
struct dtv_slotinfo_list *next;
@@ -80,13 +87,13 @@ extern void _dl_nothread_init_static_tls (struct link_map *) attribute_hidden;
} slotinfo[0];
} *_dl_tls_dtv_slotinfo_list;
/* Number of modules in the static TLS block. */
- extern size_t _dl_tls_static_nelem;
+ EXTERN size_t _dl_tls_static_nelem;
/* Size of the static TLS block. */
- extern size_t _dl_tls_static_size;
+ EXTERN size_t _dl_tls_static_size;
/* Size actually allocated in the static TLS block. */
- extern size_t _dl_tls_static_used;
+ EXTERN size_t _dl_tls_static_used;
/* Alignment requirement of the static TLS block. */
- extern size_t _dl_tls_static_align;
+ EXTERN size_t _dl_tls_static_align;
/* Number of additional entries in the slotinfo array of each slotinfo
list element. A large number makes it almost certain take we never
@@ -97,11 +104,11 @@ extern void _dl_nothread_init_static_tls (struct link_map *) attribute_hidden;
# define DTV_SURPLUS (14)
/* Initial dtv of the main thread, not allocated with normal malloc. */
- extern void *_dl_initial_dtv;
+ EXTERN void *_dl_initial_dtv;
/* Generation counter for the dtv. */
- extern size_t _dl_tls_generation;
+ EXTERN size_t _dl_tls_generation;
- extern void (*_dl_init_static_tls) (struct link_map *);
+ EXTERN void (*_dl_init_static_tls) (struct link_map *);
#endif
#endif