#ifndef LIBC_H
#define LIBC_H

#include <stdlib.h>
#include <stdio.h>
#include <limits.h>

struct __locale_map;

struct __locale_struct {
  const struct __locale_map* volatile cat[6];
};

struct tls_module {
  struct tls_module* next;
  void* image;
  size_t len, size, align, offset;
};

struct __libc {
  int can_do_threads;
  int threaded;
  int secure;
  volatile int threads_minus_1;
  size_t* auxv;
  struct tls_module* tls_head;
  size_t tls_size, tls_align, tls_cnt;
  size_t page_size;
  struct __locale_struct global_locale;
};

#ifndef PAGE_SIZE
#define PAGE_SIZE libc.page_size
#endif

#ifdef __PIC__
#define ATTR_LIBC_VISIBILITY __attribute__((visibility("hidden")))
#else
#define ATTR_LIBC_VISIBILITY
#endif

extern struct __libc __libc ATTR_LIBC_VISIBILITY;
#define libc __libc

extern size_t __hwcap ATTR_LIBC_VISIBILITY;
extern size_t __sysinfo ATTR_LIBC_VISIBILITY;
extern char *__progname, *__progname_full;

/* Designed to avoid any overhead in non-threaded processes */
void __lock(volatile int*) ATTR_LIBC_VISIBILITY;
void __unlock(volatile int*) ATTR_LIBC_VISIBILITY;
int __lockfile(FILE*) ATTR_LIBC_VISIBILITY;
void __unlockfile(FILE*) ATTR_LIBC_VISIBILITY;
#define LOCK(x) __lock(x)
#define UNLOCK(x) __unlock(x)

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)))

#endif
