libc {
  GLIBC_2.0 {
    # functions with special/multiple interfaces
    __bsd_getpgrp; __setpgid; __getpgid;

    # functions with required interface outside normal name space
    _exit;

    # functions used in other libraries
    __sched_get_priority_max; __sched_get_priority_min;
    __sched_getparam; __sched_getscheduler; __sched_setscheduler;
    __sched_yield; __fork; __getpid; __wait;

    # functions used by libstdc++ 2.7.2
    __waitpid;

    # global variables
    __environ; _environ;

    # variables in normal name space
    environ; optarg; opterr; optind; optopt;
    re_max_failures; re_syntax_options;

    # a*
    alarm;

    # c*
    confstr;

    # e*
    execl; execle; execlp; execv; execve; execvp; fexecve;

    # f*
    fnmatch; fork; fpathconf; freeaddrinfo;

    # g*
    getaddrinfo; getdtablesize; getegid; geteuid; getgid; getopt; getopt_long;
    getopt_long_only; getpgid; getpgrp; getpid; getppid; getsid; getuid; glob;
    glob_pattern_p; globfree; group_member;

    # n*
    nanosleep;

    # p*
    pathconf; pause; pselect;

    # r*
    re_comp; re_compile_fastmap; re_compile_pattern; re_exec; re_match;
    re_match_2; re_search; re_search_2; re_set_registers; re_set_syntax;
    regcomp; regerror; regexec; regfree;

    # s*
    sched_get_priority_max; sched_get_priority_min; sched_getparam;
    sched_getscheduler; sched_rr_get_interval; sched_setparam;
    sched_setscheduler; sched_yield; setegid; seteuid; setgid; setlogin;
    setpgid; setpgrp; setsid; setuid; sleep; sysconf;

    # t*
    times;

    # u*
    uname;

    # v*
    vfork;

    # w*
    wait; wait3; wait4; waitpid;
  }
  GLIBC_2.1 {
    # functions used in other libraries
    __pread64; __pwrite64;

    # g*
    gai_strerror; getnameinfo; glob64; globfree64;

    # p*
    pread; pread64; pwrite; pwrite64;

    # w*
    waitid; wordexp; wordfree;
  }
  GLIBC_2.1.2 {
    # functions used in other libraries
    __vfork;
  }
  GLIBC_2.2 {
    # p*
    posix_spawn_file_actions_init; posix_spawn_file_actions_destroy;
    posix_spawn_file_actions_addclose; posix_spawn_file_actions_addopen;
    posix_spawn_file_actions_adddup2;
    posix_spawnattr_init; posix_spawnattr_destroy;
    posix_spawnattr_getsigdefault; posix_spawnattr_setsigdefault;
    posix_spawnattr_getflags; posix_spawnattr_setflags;
    posix_spawnattr_getpgroup; posix_spawnattr_setpgroup;
    posix_spawnattr_setsigmask; posix_spawnattr_getsigmask;
    posix_spawn; posix_spawnp; posix_spawnattr_getschedpolicy;
    posix_spawnattr_setschedpolicy; posix_spawnattr_getschedparam;
    posix_spawnattr_setschedparam;

    # Used in macros.
    __sysconf;
  }
  GLIBC_2.2.3 {
    # Extended Interface.
    fnmatch;
  }
  GLIBC_2.2.6 {
    # For syscall wrapper
    __nanosleep;
  }
  GLIBC_2.3.2 {
    # Note that these symbols appear in sysdeps/unix/sysv/linux/Versions
    # under GLIBC_2.0; the first instance in the script is taken as the
    # default, so linux configurations put them in GLIBC_2.0 while other
    # configuration put them in GLIBC_2.3.2.
    getresuid; getresgid; setresuid; setresgid;
  }
  GLIBC_2.3.3 {
    sched_getaffinity; sched_setaffinity;
  }
  GLIBC_2.3.4 {
    regexec;
  }
  GLIBC_2.6 {
    __sched_cpucount;
  }
  GLIBC_2.7 {
    __sched_cpualloc; __sched_cpufree;
  }
  GLIBC_2.10 {
    __posix_getopt;
  }
  GLIBC_2.11 {
    execvpe;
  }
  GLIBC_PRIVATE {
    __libc_fork; __libc_pwrite;
  }
}
