1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-26 21:47:46 +00:00

LibC+LibPthread: Implement function forwarding for libpthread

GCC will insert various calls to pthread functions when compiling
C++ code with static initializers, even when the user doesn't link
their program against libpthread explicitly.

This is used to make static initializers thread-safe, e.g. when
building a library that does not itself use thread functionality
and thus does not link against libpthread - but is intended to
be used with other code that does use libpthread explicitly.

This makes these symbols available in libc.
This commit is contained in:
Gunnar Beutner 2021-04-17 18:38:32 +02:00 committed by Andreas Kling
parent db3fd11646
commit 88cebb05ad
14 changed files with 381 additions and 100 deletions

View file

@ -27,6 +27,7 @@
#pragma once
#include <sys/cdefs.h>
#include <sys/types.h>
__BEGIN_DECLS
@ -37,12 +38,21 @@ void __pthread_fork_atfork_register_prepare(void (*)(void));
void __pthread_fork_atfork_register_parent(void (*)(void));
void __pthread_fork_atfork_register_child(void (*)(void));
int __pthread_mutex_lock(void*);
int __pthread_mutex_unlock(void*);
int __pthread_mutex_init(void*, const void*);
int __pthread_mutex_lock(pthread_mutex_t*);
int __pthread_mutex_unlock(pthread_mutex_t*);
int __pthread_mutex_init(pthread_mutex_t*, const pthread_mutexattr_t*);
typedef void (*KeyDestructor)(void*);
int __pthread_key_create(pthread_key_t*, KeyDestructor);
int __pthread_key_delete(pthread_key_t);
void* __pthread_getspecific(pthread_key_t);
int __pthread_setspecific(pthread_key_t, const void*);
int __pthread_self();
void __pthread_key_destroy_for_current_thread();
#define __PTHREAD_MUTEX_NORMAL 0
#define __PTHREAD_MUTEX_RECURSIVE 1
#define __PTHREAD_MUTEX_INITIALIZER \