%include <tls.h>

libc {
  GLIBC_2.0 {
%if !HAVE___THREAD
    # global variables
    _h_errno;
%endif

    _res;

    # helper functions
    __h_errno_location;

    # functions used in other libraries
    __res_randomid;

    # variables in normal name space
    h_errlist; h_nerr;
%if !HAVE___THREAD
    h_errno;
%endif

    # h*
    herror; hstrerror;

    # r*
    res_init;
  }
  GLIBC_2.2 {
    # r*
    __res_state; __res_init; __res_nclose; __res_ninit; _res_hconf;
  }
  GLIBC_PRIVATE {
    __gai_sigqueue;

%if HAVE___THREAD
    # This version is for the TLS symbol, GLIBC_2.0 is the old object symbol.
    h_errno; __resp;
%endif

    __res_maybe_init; __res_iclose;
  }
}

libresolv {
  GLIBC_2.0 {
    _gethtbyaddr; _gethtbyname; _gethtbyname2; _gethtent; _getlong;
    _getshort; _res_opcodes; _res_resultcodes; _sethtent; dn_expand;
    inet_net_ntop; inet_net_pton; inet_neta; res_gethostbyaddr;
    res_gethostbyname; res_gethostbyname2; res_mkquery; res_query;
    res_querydomain; res_search; res_send_setqhook; res_send_setrhook;
    # Variables
    __p_class_syms; __p_type_syms;
    # Private routines shared between libc/net, named, nslookup and others.
    __b64_ntop; __b64_pton;
    __dn_comp;  __dn_count_labels; __dn_skipname;
    __fp_nquery; __fp_query; __fp_resstat; __hostalias;
    __loc_aton; __loc_ntoa;
    __p_cdname; __p_cdnname; __p_class; __p_fqname; __p_fqnname; __p_option;
    __p_query; __p_rr; __p_secstodate; __p_time; __p_type;
    __putlong; __putshort;
    __res_close; __res_dnok; __res_hnok; __res_isourserver; __res_mailok;
    __res_nameinquery; __res_ownok; __res_queriesmatch;
    __res_send;
    __sym_ntop; __sym_ntos; __sym_ston;
  }
  GLIBC_2.2 {
    __dn_expand;
    __res_hostalias; __res_mkquery; __res_nmkquery; __res_nquery;
    __res_nquerydomain; __res_nsearch; __res_nsend; __res_query;
    __res_querydomain; __res_search;
  }
  GLIBC_2.3.2 {
    __p_rcode;
  }
  GLIBC_2.9 {
    ns_msg_getflag;
    ns_get16; ns_get32; ns_put16; ns_put32;
    ns_initparse; ns_skiprr; ns_parserr;
    ns_sprintrr; ns_sprintrrf;
    ns_format_ttl; ns_parse_ttl;
    ns_datetosecs;
    ns_name_ntol; ns_name_ntop; ns_name_pton;
    ns_name_unpack; ns_name_pack;
    ns_name_uncompress; ns_name_compress;
    ns_name_skip; ns_name_rollback;
    ns_samedomain; ns_subdomain; ns_makecanon; ns_samename;
  }
  GLIBC_PRIVATE {
    # Needed in libnss_dns.
    __ns_name_unpack; __ns_name_ntop;
    __ns_get16; __ns_get32;
    __libc_res_nquery; __libc_res_nsearch;
  }
}

libnss_dns {
  GLIBC_PRIVATE {
    _nss_dns_gethostbyaddr_r; _nss_dns_gethostbyname2_r;
    _nss_dns_gethostbyname3_r;
    _nss_dns_gethostbyname_r; _nss_dns_getnetbyaddr_r;
    _nss_dns_getnetbyname_r; _nss_dns_getcanonname_r;
    _nss_dns_gethostbyaddr2_r;
    _nss_dns_gethostbyname4_r;
  }
}

libanl {
  GLIBC_2.2.3 {
    getaddrinfo_a; gai_cancel; gai_error; gai_suspend;
  }
}
