diff options
| 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 |
| commit | 7eca0902fd7bbdb04ea83f967b0a198335c8d5db (patch) | |
| tree | d8e38b0b0b122031b546b94f9c208c98f77ad482 /ldso/include | |
| parent | 79d0de9210745aad1115832e74c39da14142d619 (diff) | |
| download | uClibc-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.h | 7 | ||||
| -rw-r--r-- | ldso/include/ldsodefs.h | 39 |
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 |
