libc {
  GLIBC_2.0 {
    # global variables.
    _null_auth;

    # functions used in other libraries
    _rpc_dtablesize; _seterr_reply;

    # variables in normal name space
    rpc_createerr; svc_fdset; svcauthdes_stats;

    # a*
    authnone_create; authunix_create; authunix_create_default;

    # b*
    bindresvport;

    # c*
    callrpc;
    clnt_broadcast; clnt_create; clnt_pcreateerror; clnt_perrno;
    clnt_perror; clnt_spcreateerror; clnt_sperrno; clnt_sperror;
    clntraw_create; clnttcp_create; clntudp_bufcreate; clntudp_create;

    # g*
    get_myaddress; getpublickey; getsecretkey;

    # p*
    pmap_getmaps; pmap_getport; pmap_rmtcall; pmap_set; pmap_unset;

    # r*
    registerrpc;

    # s*
    svc_exit; svc_getreq; svc_getreqset; svc_register; svc_run;
    svc_sendreply; svc_unregister; svcerr_auth; svcerr_decode;
    svcerr_noproc; svcerr_noprog; svcerr_progvers; svcerr_systemerr;
    svcerr_weakauth; svcfd_create; svcraw_create; svctcp_create;
    svcudp_bufcreate; svcudp_create; svcudp_enablecache;

    # x*
    xdr_accepted_reply; xdr_array; xdr_authunix_parms; xdr_bool; xdr_bytes;
    xdr_callhdr; xdr_callmsg; xdr_char; xdr_cryptkeyarg; xdr_cryptkeyarg2;
    xdr_cryptkeyres; xdr_des_block; xdr_double; xdr_enum; xdr_float;
    xdr_free; xdr_int; xdr_key_netstarg; xdr_key_netstres; xdr_keybuf;
    xdr_keystatus; xdr_long; xdr_netobj; xdr_opaque; xdr_opaque_auth;
    xdr_pmap; xdr_pmaplist; xdr_pointer; xdr_reference; xdr_rejected_reply;
    xdr_replymsg; xdr_rmtcall_args; xdr_rmtcallres; xdr_short; xdr_string;
    xdr_u_char; xdr_u_int; xdr_u_long; xdr_u_short; xdr_union; xdr_vector;
    xdr_void; xdr_wrapstring; xdrmem_create; xdrrec_create;
    xdrrec_endofrecord; xdrrec_eof; xdrrec_skiprecord; xdrstdio_create;
    xencrypt; xprt_register; xprt_unregister;
  }
  GLIBC_2.1 {
    # Special Pointer to avoid keyserv deadlock
    __key_decryptsession_pk_LOCAL; __key_encryptsession_pk_LOCAL;
    __key_gendes_LOCAL;

    # _*
    _authenticate;

    # a*
    authdes_create; authdes_getucred; authdes_pk_create;

    # c*
    cbc_crypt; clntunix_create;

    # d*
    des_setparity;

    # e*
    ecb_crypt;

    # g*
    getnetname;

    # h*
    host2netname;

    # k*
    key_decryptsession; key_decryptsession_pk; key_encryptsession;
    key_encryptsession_pk; key_gendes; key_get_conv; key_secretkey_is_set;
    key_setnet; key_setsecret;

    # n*
    netname2host; netname2user;

    # p*
    passwd2des;

    # r*
    rtime;

    # s*
    svcunix_create; svcunixfd_create;

    # u*
    user2netname;

    # x*
    xdecrypt; xdr_authdes_cred; xdr_authdes_verf;
    xdr_getcredres; xdr_int16_t; xdr_int32_t; xdr_int8_t;
    xdr_netnamestr; xdr_sizeof;
    xdr_uint16_t; xdr_uint32_t; xdr_uint8_t; xdr_unixcred;
  }
  GLIBC_2.1.1 {
    xdr_hyper; xdr_u_hyper; xdr_longlong_t; xdr_u_longlong_t;
    xdr_int64_t; xdr_uint64_t;
  }
  GLIBC_2.2 {
    svc_getreq_common; svc_getreq_poll; svc_max_pollfd; svc_pollfd;
  }
  GLIBC_2.2.3 {
    __rpc_thread_svc_fdset; __rpc_thread_createerr;
    __rpc_thread_svc_pollfd; __rpc_thread_svc_max_pollfd;
  }
  GLIBC_2.3.4 {
    xdr_quad_t; xdr_u_quad_t;
  }
  GLIBC_PRIVATE {
    __libc_clntudp_bufcreate; __libc_rpc_getport;
  }
}
