%include <float128-abi.h>
libc {
  GLIBC_2.0 {
    # functions with required interface outside normal name space
    __xpg_basename;

    # functions used in inline functions or macros
    __strtod_internal; __strtof_internal; __strtold_internal;
    __strtol_internal; __strtoll_internal;
    __strtoul_internal; __strtoull_internal;
    # functions formerly so used (compatibility symbols)
    __strtoq_internal; __strtouq_internal;

    # compatibility symbol
    __secure_getenv;

    # a*
    a64l; abort; abs; atexit; atof; atoi; atol; atoll;

    # b*
    bsearch;

    # c*
    canonicalize_file_name; clearenv;

    # d*
    div; drand48; drand48_r;

    # e*
    erand48; erand48_r; exit;

    # g*
    getenv; getsubopt;

    # i*
    initstate; initstate_r;

    # l*
    l64a; labs; lcong48; lcong48_r; ldiv; llabs; lldiv; lrand48; lrand48_r;

    # m*
    mblen; mbrlen; mbrtowc; mbsinit; mbsnrtowcs; mbsrtowcs; mbstowcs;
    mbtowc; mcheck; mcount; mrand48; mrand48_r;

    # n*
    nrand48; nrand48_r;

    # o*
    on_exit;

    # p*
    putenv;

    # q*
    qsort;

    # r*
    rand; rand_r; random; random_r; realpath; rpmatch;

    # s*
    seed48; seed48_r; setcontext; setenv; setstate; setstate_r; srand; srand48;
    srand48_r; srandom; srandom_r; step; strfmon; strtod; strtof; strtol;
    strtold; strtoll; strtoq; strtoul; strtoull; strtouq; system;

    # u*
    unsetenv;

    # w*
    wcstombs; wctomb;
  }
  GLIBC_2.1 {
    # a*
    addseverity;

    # f*
    fmtmsg;

    # g*
    getcontext;

    # m*
    makecontext;

    # s*
    strtoimax; strtoumax; swapcontext;
  }
  GLIBC_2.1.1 {
    # _*
    _Exit;

    # i*
    imaxabs; imaxdiv;
  }
  GLIBC_2.1.3 {
    # used by new G++ ABI
    __cxa_atexit; __cxa_finalize;
  }
  GLIBC_2.3 {
    # Silent change in SUS.
    realpath;
  }
  GLIBC_2.8 {
    qsort_r;
  }
  GLIBC_2.10 {
    quick_exit; __cxa_at_quick_exit;
  }
  GLIBC_2.13 {
    __fentry__;
  }
  GLIBC_2.17 {
    secure_getenv;
  }
  GLIBC_2.18 {
    __cxa_thread_atexit_impl;
  }
  GLIBC_2.24 {
    quick_exit;
  }
  GLIBC_2.25 {
    # s*
    strfromd; strfromf; strfroml;
    getrandom; getentropy;
  }
%ifdef FLOAT128_VERSION
  FLOAT128_VERSION {
    strfromf128;
    strtof128;
    strtof128_l;
  }
%endif
  GLIBC_2.27 {
    # _Float64x functions, only present for some configurations.
    strfromf64x;
    strtof64x;
    strtof64x_l;
    # _Float32, _Float64 and _Float32x functions, for all configurations.
    strfromf32; strfromf64; strfromf32x;
    strtof32; strtof64; strtof32x;
    strtof32_l; strtof64_l; strtof32x_l;
  }
  GLIBC_PRIVATE {
    # functions which have an additional interface since they are
    # are cancelable.
    __libc_system;
    # Variable which needs a dynamic symbol table entry.
    __abort_msg;
    # Used from other libraries
    __libc_secure_getenv;
    __call_tls_dtors;
    __strtof_nan; __strtod_nan; __strtold_nan;
  }
}
