| %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 | 
 | } |