path: root/src/internal
diff options
authorRich Felker <>2018-09-10 23:26:40 -0400
committerRich Felker <>2018-09-12 14:34:33 -0400
commit13d1afa46f8098df290008c681816c9eb89ffbdb (patch)
tree01ec1581298b49f20848f9c5ce61bfa9bccd7e1a /src/internal
parent8c1ac426e15b27d2879afa26a500fd80010b33b9 (diff)
overhaul internally-public declarations using wrapper headers
commits leading up to this one have moved the vast majority of libc-internal interface declarations to appropriate internal headers, allowing them to be type-checked and setting the stage to limit their visibility. the ones that have not yet been moved are mostly namespace-protected aliases for standard/public interfaces, which exist to facilitate implementing plain C functions in terms of POSIX functionality, or C or POSIX functionality in terms of extensions that are not standardized. some don't quite fit this description, but are "internally public" interfacs between subsystems of libc. rather than create a number of newly-named headers to declare these functions, and having to add explicit include directives for them to every source file where they're needed, I have introduced a method of wrapping the corresponding public headers. parallel to the public headers in $(srcdir)/include, we now have wrappers in $(srcdir)/src/include that come earlier in the include path order. they include the public header they're wrapping, then add declarations for namespace-protected versions of the same interfaces and any "internally public" interfaces for the subsystem they correspond to. along these lines, the wrapper for features.h is now responsible for the definition of the hidden, weak, and weak_alias macros. this means source files will no longer need to include any special headers to access these features. over time, it is my expectation that the scope of what is "internally public" will expand, reducing the number of source files which need to include *_impl.h and related headers down to those which are actually implementing the corresponding subsystems, not just using them.
Diffstat (limited to 'src/internal')
3 files changed, 6 insertions, 22 deletions
diff --git a/src/internal/libc.h b/src/internal/libc.h
index f536eaf6..23988d92 100644
--- a/src/internal/libc.h
+++ b/src/internal/libc.h
@@ -33,12 +33,13 @@ struct __libc {
#define PAGE_SIZE libc.page_size
-#define weak __attribute__((__weak__))
-#define hidden __attribute__((__visibility__("hidden")))
extern hidden struct __libc __libc;
#define libc __libc
+void __init_libc(char **, char *);
+void __init_tls(size_t *);
+void __libc_start_init(void);
extern hidden size_t __hwcap;
extern hidden size_t __sysinfo;
extern char *__progname, *__progname_full;
@@ -56,12 +57,6 @@ hidden void __unlockfile(FILE *);
void __synccall(void (*)(void *), void *);
int __setxid(int, int, int, int);
-extern char **__environ;
-#undef weak_alias
-#define weak_alias(old, new) \
- extern __typeof(old) new __attribute__((__weak__, __alias__(#old)))
#undef LFS64_2
#define LFS64_2(x, y) weak_alias(x, y)
diff --git a/src/internal/malloc_impl.h b/src/internal/malloc_impl.h
index 88b4f670..e97337b3 100644
--- a/src/internal/malloc_impl.h
+++ b/src/internal/malloc_impl.h
@@ -2,11 +2,7 @@
#include "libc.h"
-void *__mmap(void *, size_t, int, int, int, off_t);
-int __munmap(void *, size_t);
-void *__mremap(void *, size_t, size_t, int, ...);
-int __madvise(void *, size_t, int);
+#include <sys/mman.h>
void *__expand_heap(size_t *);
diff --git a/src/internal/pthread_impl.h b/src/internal/pthread_impl.h
index 813b5966..4457262d 100644
--- a/src/internal/pthread_impl.h
+++ b/src/internal/pthread_impl.h
@@ -5,6 +5,7 @@
#include <signal.h>
#include <errno.h>
#include <limits.h>
+#include <sys/mman.h>
#include "libc.h"
#include "syscall.h"
#include "atomic.h"
@@ -146,10 +147,6 @@ hidden int __set_thread_area(void *);
int __libc_sigaction(int, const struct sigaction *, struct sigaction *);
void __unmapself(void *, size_t);
-void __vm_wait(void);
-void __vm_lock(void);
-void __vm_unlock(void);
int __timedwait(volatile int *, int, clockid_t, const struct timespec *, int);
int __timedwait_cp(volatile int *, int, clockid_t, const struct timespec *, int);
void __wait(volatile int *, volatile int *, int, int);
@@ -171,10 +168,6 @@ void __acquire_ptc(void);
void __release_ptc(void);
void __inhibit_ptc(void);
-void __block_all_sigs(void *);
-void __block_app_sigs(void *);
-void __restore_sigs(void *);
#define DEFAULT_STACK_SIZE 81920