%include <tls.h>

libc {
  GLIBC_2.0 {
    _res;

    # helper functions
    __h_errno_location;

    # functions used in other libraries
    __res_randomid;

    # variables in normal name space
    h_errlist; h_nerr;

    # h*
    herror; hstrerror;

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

    h_errno; __resp;

    __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;
  }
}