projects
/
musl
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fix omission of dtv setup in static linked programs on TLS variant I archs
[musl]
/
src
/
env
/
__init_tls.c
diff --git
a/src/env/__init_tls.c
b/src/env/__init_tls.c
index
c341bfc
..
a4704f0
100644
(file)
--- a/
src/env/__init_tls.c
+++ b/
src/env/__init_tls.c
@@
-1,5
+1,7
@@
#include <elf.h>
#include <limits.h>
#include <elf.h>
#include <limits.h>
+#include <sys/mman.h>
+#include <string.h>
#include "pthread_impl.h"
#include "libc.h"
#include "atomic.h"
#include "pthread_impl.h"
#include "libc.h"
#include "atomic.h"
@@
-21,12
+23,12
@@
void *__copy_tls(unsigned char *mem)
td = (pthread_t)mem;
mem += sizeof(struct pthread);
#else
td = (pthread_t)mem;
mem += sizeof(struct pthread);
#else
- mem +=
__
libc.tls_size - sizeof(struct pthread);
+ mem += libc.tls_size - sizeof(struct pthread);
mem -= (uintptr_t)mem & (align-1);
td = (pthread_t)mem;
mem -= (uintptr_t)mem & (align-1);
td = (pthread_t)mem;
- td->dtv = dtv;
mem -= size;
#endif
mem -= size;
#endif
+ td->dtv = dtv;
dtv[1] = mem;
memcpy(mem, image, len);
return td;
dtv[1] = mem;
memcpy(mem, image, len);
return td;
@@
-56,7
+58,7
@@
typedef Elf64_Phdr Phdr;
void __init_tls(size_t *aux)
{
unsigned char *p, *mem;
void __init_tls(size_t *aux)
{
unsigned char *p, *mem;
- size_t n
, d
;
+ size_t n;
Phdr *phdr, *tls_phdr=0;
size_t base = 0;
Phdr *phdr, *tls_phdr=0;
size_t base = 0;