this makes it so the #undef libc and __libc name are no longer needed,
which were problematic because the "accessor function" mode for
accessing the libc struct could not be used, breaking build on any
compiler without (working) visibility.
#include <dlfcn.h>
#include "pthread_impl.h"
#include "libc.h"
#include <dlfcn.h>
#include "pthread_impl.h"
#include "libc.h"
static int errflag;
static char errbuf[128];
static int errflag;
static char errbuf[128];
void __init_ssp(size_t *);
void *__install_initial_tls(void *);
void __init_ssp(size_t *);
void *__install_initial_tls(void *);
-static struct dso *head, *tail, *libc, *fini_head;
+static struct dso *head, *tail, *ldso, *fini_head;
static char *env_path, *sys_path, *r_path;
static int ssp_used;
static int runtime;
static char *env_path, *sys_path, *r_path;
static int ssp_used;
static int runtime;
size_t l = z-name;
for (rp=reserved; *rp && memcmp(name+3, rp, l-3); rp+=strlen(rp)+1);
if (*rp) {
size_t l = z-name;
for (rp=reserved; *rp && memcmp(name+3, rp, l-3); rp+=strlen(rp)+1);
if (*rp) {
- if (!libc->prev) {
- tail->next = libc;
- libc->prev = tail;
- tail = libc->next ? libc->next : libc;
+ if (!ldso->prev) {
+ tail->next = ldso;
+ ldso->prev = tail;
+ tail = ldso->next ? ldso->next : ldso;
if (runtime && temp_dso.tls_image) {
size_t per_th = temp_dso.tls_size + temp_dso.tls_align
+ sizeof(void *) * (tls_cnt+3);
if (runtime && temp_dso.tls_image) {
size_t per_th = temp_dso.tls_size + temp_dso.tls_align
+ sizeof(void *) * (tls_cnt+3);
- n_th = __libc.threads_minus_1 + 1;
+ n_th = libc.threads_minus_1 + 1;
if (n_th > SSIZE_MAX / per_th) alloc_size = SIZE_MAX;
else alloc_size += n_th * per_th;
}
if (n_th > SSIZE_MAX / per_th) alloc_size = SIZE_MAX;
else alloc_size += n_th * per_th;
}
static void do_init_fini(struct dso *p)
{
size_t dyn[DYN_CNT] = {0};
static void do_init_fini(struct dso *p)
{
size_t dyn[DYN_CNT] = {0};
- int need_locking = __libc.threads_minus_1;
+ int need_locking = libc.threads_minus_1;
/* Allow recursive calls that arise when a library calls
* dlopen from one of its constructors, but block any
* other threads until all ctors have finished. */
/* Allow recursive calls that arise when a library calls
* dlopen from one of its constructors, but block any
* other threads until all ctors have finished. */
void **dtv = (void *)mem;
dtv[0] = (void *)tls_cnt;
void **dtv = (void *)mem;
dtv[0] = (void *)tls_cnt;
- mem += __libc.tls_size - sizeof(struct pthread);
+ mem += libc.tls_size - sizeof(struct pthread);
mem -= (uintptr_t)mem & (tls_align-1);
mem -= tls_start;
td = (pthread_t)mem;
mem -= (uintptr_t)mem & (tls_align-1);
mem -= tls_start;
td = (pthread_t)mem;
{
size_t below_tp = (1+tls_cnt) * sizeof(void *) + tls_offset;
size_t above_tp = sizeof(struct pthread) + tls_start + tls_align;
{
size_t below_tp = (1+tls_cnt) * sizeof(void *) + tls_offset;
size_t above_tp = sizeof(struct pthread) + tls_start + tls_align;
- __libc.tls_size = ALIGN(below_tp + above_tp, tls_align);
+ libc.tls_size = ALIGN(below_tp + above_tp, tls_align);
}
void *__dynlink(int argc, char **argv)
}
void *__dynlink(int argc, char **argv)
* restore the initial chain in preparation for loading third
* party libraries (preload/needed). */
head = tail = app;
* restore the initial chain in preparation for loading third
* party libraries (preload/needed). */
head = tail = app;
app->next = lib;
reloc_all(lib);
app->next = 0;
app->next = lib;
reloc_all(lib);
app->next = 0;
update_tls_size();
if (tls_cnt) {
struct dso *p;
update_tls_size();
if (tls_cnt) {
struct dso *p;
- void *mem = mmap(0, __libc.tls_size, PROT_READ|PROT_WRITE,
+ void *mem = mmap(0, libc.tls_size, PROT_READ|PROT_WRITE,
MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
if (mem==MAP_FAILED ||
!__install_initial_tls(__copy_tls(mem))) {
dprintf(2, "%s: Error getting %zu bytes thread-local storage: %m\n",
MAP_ANONYMOUS|MAP_PRIVATE, -1, 0);
if (mem==MAP_FAILED ||
!__install_initial_tls(__copy_tls(mem))) {
dprintf(2, "%s: Error getting %zu bytes thread-local storage: %m\n",
- argv[0], __libc.tls_size);
+ argv[0], libc.tls_size);