%define SHARED
%include <shlib-compat.h>

libc {
  GLIBC_2.0 {
%if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_1)
    # These few symbols are here only for binary compatibility
    # with the pre-versioning libc.so.0.2 ABI.  Their replacements
    # are in the GLIBC_2.1 version set.  When the soname changes,
    # these can be removed.
    __getuids;
    __hurd_file_name_lookup;
    _hurd_proc_init; _hurd_umask;
%endif

    # These go into a different version set if GLIBC_2.0 compatibility
    # is not required.  See below.
%if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
    # variables used for detecting cthreads
    _cthread_exit_routine; _cthread_init_routine;

    # cthreads functions with stubs in libc
    cthread_keycreate; cthread_getspecific; cthread_setspecific;
    __libc_getspecific;

    # weak refs to libthreads functions that libc calls iff libthreads in use
    cthread_fork; cthread_detach;
%endif

    # necessary for the Hurd brk implementation
    _end;

    # variables used in macros & inline functions
    __hurd_sigthread_stack_base; __hurd_sigthread_stack_end;
    __hurd_sigthread_variables;
    __hurd_threadvar_max;
    __hurd_threadvar_stack_mask; __hurd_threadvar_stack_offset;

    # functions used in macros & inline functions
    __hurd_errno_location;

    # functions used in libmachuser and libhurduser
    _S_catch_exception_raise;
    _S_catch_exception_raise_state;
    _S_catch_exception_raise_state_identity;
    _S_msg_add_auth; _S_msg_del_auth;
    _S_msg_describe_ports;
    _S_msg_get_dtable; _S_msg_set_dtable;
    _S_msg_get_env_variable; _S_msg_set_env_variable;
    _S_msg_get_environment; _S_msg_set_environment;
    _S_msg_get_fd; _S_msg_set_fd;
    _S_msg_get_init_int; _S_msg_set_init_int;
    _S_msg_get_init_ints; _S_msg_set_init_ints;
    _S_msg_get_init_port; _S_msg_set_init_port;
    _S_msg_get_init_ports; _S_msg_set_init_ports;
    _S_msg_proc_newids; _S_msg_report_wait;
    _S_msg_sig_post; _S_msg_sig_post_untraced;
    _hurd_intr_rpc_mach_msg;
    _hurdsig_fault_catch_exception_raise;
    _hurdsig_fault_catch_exception_raise_state;
    _hurdsig_fault_catch_exception_raise_state_identity;

    # "quasi-internal" variables
    _hurd_device_master;
    _hurd_dtable; _hurd_dtablesize; _hurd_dtable_lock;
    _hurd_host_priv;
    _hurd_msgport;
    _hurd_ports;

    # "quasi-internal" functions
    _hurd_canonicalize_directory_name_internal;
    _hurd_critical_section_lock;
    _hurd_critical_section_unlock;
    _hurd_exception2signal;
    _hurd_exec;
    _hurd_fd_get;
    _hurd_init;
    _hurd_intern_fd;
    _hurd_port_cleanup;
    _hurd_port_free;
    _hurd_port_get;
    _hurd_port_locked_get;
    _hurd_ports_use;
    _hurd_thread_sigstate;

    # functions in normal name space

    # f*
    file_name_lookup; file_name_lookup_under; file_name_path_lookup;
    file_name_split;
    fopenport;

    # g*
    get_privileged_ports;
    getauth; getcrdir; getcwdir; getcttyid; getdport; getproc; getumask;

    # h*
    hurd_catch_signal;
    hurd_check_cancel;
    hurd_file_name_lookup; hurd_file_name_lookup_retry;
    hurd_file_name_path_lookup; hurd_file_name_split;
    hurd_preempt_signals;
    hurd_safe_copyin; hurd_safe_copyout;
    hurd_safe_memmove; hurd_safe_memset;
    hurd_sig_post;
    hurd_thread_cancel; hurd_thread_self;
    hurd_unpreempt_signals;

    # o*
    openport;

    # p*
    pid2task;

    # s*
    setauth; setcrdir; setcwdir; setproc; setcttyid;

    # t*
    task2pid;

    # v*
    vpprintf;
  }
  GLIBC_2.1 {
    # "quasi-internal" functions
    _hurd_proc_init;

    # g*
    geteuids;

    # s*
    seteuids;
  }
  GLIBC_2.1.3 {
    # d*
    directory_name_split;

    # h*
    hurd_directory_name_split;
  }
  GLIBC_2.2.5 {
    # These always existed as inlines but the real functions were not exported.
    __hurd_fail;
    _hurd_self_sigstate;

    # Same for these "quasi-internal" functions
    _hurd_port_init;
    _hurd_port_set;

    # internal symbols used by other libraries (e.g. librt)
    _hurd_raise_signal;
    _hurdsig_interrupt_timeout;
    _hurdsig_fault_preemptor; _hurdsig_fault_env;
  }
  GLIBC_2.2.6 {
    # functions used in macros & inline functions
    __errno_location;
  }

%if !SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_2)
  HURD_CTHREADS_0.3 {
    # weak refs to libthreads functions that libc calls iff libthreads in use
    cthread_fork; cthread_detach;

    # variables used for detecting cthreads
    _cthread_exit_routine; _cthread_init_routine;

    # cthreads functions with stubs in libc
    cthread_keycreate; cthread_getspecific; cthread_setspecific;
    __libc_getspecific;
  }
%endif
}
