libc {
  GLIBC_2.0 {
    pthread_attr_destroy; pthread_attr_getdetachstate;
    pthread_attr_getinheritsched; pthread_attr_getschedparam;
    pthread_attr_getschedpolicy; pthread_attr_getscope; pthread_attr_init;
    pthread_attr_setdetachstate; pthread_attr_setinheritsched;
    pthread_attr_setschedparam; pthread_attr_setschedpolicy;
    pthread_attr_setscope; pthread_cond_broadcast; pthread_cond_destroy;
    pthread_cond_init; pthread_cond_signal; pthread_cond_wait;
    pthread_condattr_destroy; pthread_condattr_init; pthread_equal;
    pthread_exit; pthread_getschedparam; pthread_mutex_destroy;
    pthread_mutex_init; pthread_mutex_lock; pthread_mutex_unlock;
    pthread_mutexattr_getkind_np; pthread_mutexattr_setkind_np;
    pthread_self; pthread_setcancelstate; pthread_setcanceltype;
    pthread_setschedparam;

    # Internal libc interface to libpthread
    __libc_internal_tsd_get; __libc_internal_tsd_set;
  }
  GLIBC_2.1 {
    pthread_attr_init;
  }
}

ld.so {
  GLIBC_2.0 {
    # Internal libc interface to libpthread
    __libc_internal_tsd_get; __libc_internal_tsd_set;
  }
}

libpthread {
  GLIBC_2.0 {
    # Hidden entry point (through macros).
    _pthread_cleanup_pop; _pthread_cleanup_pop_restore; _pthread_cleanup_push;
    _pthread_cleanup_push_defer;

    # Internal libc interface to libpthread
    __libc_internal_tsd_get; __libc_internal_tsd_set;

    # Overwritten libc functions.
    accept; close; connect; fcntl; fork; fsync; longjmp; lseek; msync;
    nanosleep; open; pause; raise; read; recv; recvfrom; recvmsg; send;
    sendmsg; sendto; sigaction; siglongjmp; system; tcdrain; wait;
    waitpid; write;
    __close; __connect; __fcntl; __lseek; __open; __read; __send; __wait;
    __write;
    _IO_flockfile; _IO_ftrylockfile; _IO_funlockfile;
    vfork; __fork;

    # POSIX.1c extensions to libc.
    flockfile; funlockfile; ftrylockfile;

    # Non-standard POSIX1.x functions.
    pthread_kill_other_threads_np; pthread_mutexattr_getkind_np;
    pthread_mutexattr_setkind_np;

    # Real POSIX.1c functions.
    pthread_atfork; pthread_attr_destroy; pthread_attr_getdetachstate;
    pthread_attr_getinheritsched; pthread_attr_getschedparam;
    pthread_attr_getschedpolicy; pthread_attr_getscope; pthread_attr_init;
    pthread_attr_setdetachstate; pthread_attr_setinheritsched;
    pthread_attr_setschedparam; pthread_attr_setschedpolicy;
    pthread_attr_setscope; pthread_cancel; pthread_cond_broadcast;
    pthread_cond_destroy; pthread_cond_init; pthread_cond_signal;
    pthread_cond_timedwait; pthread_cond_wait; pthread_condattr_destroy;
    pthread_condattr_init; pthread_create; pthread_detach; pthread_equal;
    pthread_exit; pthread_getschedparam; pthread_getspecific; pthread_join;
    pthread_key_create; pthread_key_delete; pthread_kill;
    pthread_mutex_destroy; pthread_mutex_init; pthread_mutex_lock;
    pthread_mutex_trylock; pthread_mutex_unlock; pthread_mutexattr_destroy;
    pthread_mutexattr_init; pthread_once; pthread_self; pthread_setcancelstate;
    pthread_setcanceltype; pthread_setschedparam; pthread_setspecific;
    pthread_sigmask; pthread_testcancel;

    sem_destroy; sem_getvalue; sem_init; sem_post; sem_trywait; sem_wait;
    sigwait;

    # Protected names for functions used in other shared objects.
    __pthread_atfork; __pthread_initialize; __pthread_getspecific;
    __pthread_key_create; __pthread_mutex_destroy; __pthread_mutex_init;
    __pthread_mutex_lock; __pthread_mutex_trylock; __pthread_mutex_unlock;
    __pthread_mutexattr_destroy; __pthread_mutexattr_init;
    __pthread_mutexattr_settype; __pthread_once; __pthread_setspecific;

    # The error functions.
    __errno_location; __h_errno_location;
  }
  GLIBC_2.1 {
    # Functions with changed interface.
    pthread_attr_init; pthread_create;

    # Unix98 extensions.
    pthread_rwlock_init; pthread_rwlock_destroy; pthread_rwlock_rdlock;
    pthread_rwlock_tryrdlock; pthread_rwlock_wrlock; pthread_rwlock_trywrlock;
    pthread_rwlock_unlock; pthread_rwlockattr_init; pthread_rwlockattr_destroy;
    pthread_rwlockattr_getpshared; pthread_rwlockattr_setpshared;
    pthread_rwlockattr_getkind_np; pthread_rwlockattr_setkind_np;

    pthread_attr_getguardsize; pthread_attr_setguardsize;
    pthread_attr_getstackaddr; pthread_attr_setstackaddr;
    pthread_attr_getstacksize; pthread_attr_setstacksize;

    pthread_getconcurrency; pthread_setconcurrency;

    pthread_mutexattr_gettype; pthread_mutexattr_settype;

    sem_destroy; sem_getvalue; sem_init; sem_post; sem_trywait; sem_wait;

    # helper functions
    __libc_current_sigrtmin; __libc_current_sigrtmax;
    __libc_allocate_rtsig;
  }
  GLIBC_2.1.1 {
    sem_close; sem_open; sem_unlink;
  }
  GLIBC_2.1.2 {
    __pthread_kill_other_threads_np;
    __vfork;
  }
}
