Changeset View
Changeset View
Standalone View
Standalone View
head/lib/libc/gen/elf_utils.c
Show All 28 Lines | |||||
*/ | */ | ||||
#include <sys/types.h> | #include <sys/types.h> | ||||
#include <sys/mman.h> | #include <sys/mman.h> | ||||
#include <sys/resource.h> | #include <sys/resource.h> | ||||
#include <sys/sysctl.h> | #include <sys/sysctl.h> | ||||
#include <link.h> | #include <link.h> | ||||
#include <stddef.h> | #include <stddef.h> | ||||
#include <string.h> | |||||
#include "libc_private.h" | #include "libc_private.h" | ||||
#include "static_tls.h" | |||||
int __elf_phdr_match_addr(struct dl_phdr_info *, void *); | int __elf_phdr_match_addr(struct dl_phdr_info *, void *); | ||||
void __pthread_map_stacks_exec(void); | void __pthread_map_stacks_exec(void); | ||||
void __pthread_distribute_static_tls(size_t, void *, size_t, size_t); | |||||
int | int | ||||
__elf_phdr_match_addr(struct dl_phdr_info *phdr_info, void *addr) | __elf_phdr_match_addr(struct dl_phdr_info *phdr_info, void *addr) | ||||
{ | { | ||||
const Elf_Phdr *ph; | const Elf_Phdr *ph; | ||||
int i; | int i; | ||||
for (i = 0; i < phdr_info->dlpi_phnum; i++) { | for (i = 0; i < phdr_info->dlpi_phnum; i++) { | ||||
▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
#pragma weak __pthread_map_stacks_exec | #pragma weak __pthread_map_stacks_exec | ||||
void | void | ||||
__pthread_map_stacks_exec(void) | __pthread_map_stacks_exec(void) | ||||
{ | { | ||||
((void (*)(void))__libc_interposing[INTERPOS_map_stacks_exec])(); | ((void (*)(void))__libc_interposing[INTERPOS_map_stacks_exec])(); | ||||
} | |||||
void | |||||
__libc_distribute_static_tls(size_t offset, void *src, size_t len, | |||||
size_t total_len) | |||||
{ | |||||
uintptr_t tlsbase; | |||||
tlsbase = _libc_get_static_tls_base(offset); | |||||
memcpy((void *)tlsbase, src, len); | |||||
memset((char *)tlsbase + len, 0, total_len - len); | |||||
} | |||||
#pragma weak __pthread_distribute_static_tls | |||||
void | |||||
__pthread_distribute_static_tls(size_t offset, void *src, size_t len, | |||||
size_t total_len) | |||||
{ | |||||
((void (*)(size_t, void *, size_t, size_t))__libc_interposing[ | |||||
INTERPOS_distribute_static_tls])(offset, src, len, total_len); | |||||
} | } |