# XXX ltrace misses long double and long long support
typedef ldouble = double;
typedef llong = long;

# This should generally work, I'm not aware of any arch, where the
# parameter passing of complex arguments differs from that for
# structure of two floats.
typedef double_complex = struct(double, double);
typedef float_complex = struct(float, float);
typedef ldouble_complex = struct(ldouble, ldouble);

double sin(double);
float sinf(float);
ldouble sinl(ldouble);

double cos(double);
float cosf(float);
ldouble cosl(ldouble);

void sincos(double, +double*, double*);
void sincosf(float, +float*, float*);
void sincosl(ldouble, +ldouble*, ldouble*);

double tan(double);
float tanf(float);
ldouble tanl(ldouble);

double asin(double);
float asinf(float);
ldouble asinl(ldouble);

double acos(double);
float acosf(float);
ldouble acosl(ldouble);

double atan(double);
float atanf(float);
ldouble atanl(ldouble);

double atan2(double, double);
float atan2f(float, float);
ldouble atan2l(ldouble, ldouble);

double sinh(double);
float sinhf(float);
ldouble sinhl(ldouble);

double cosh(double);
float coshf(float);
ldouble coshl(ldouble);

double tanh(double);
float tanhf(float);
ldouble tanhl(ldouble);

double asinh(double);
float asinhf(float);
ldouble asinhl(ldouble);

double acosh(double);
float acoshf(float);
ldouble acoshl(ldouble);

double atanh(double);
float atanhf(float);
ldouble atanhl(ldouble);

double_complex csin(double_complex);
float_complex csinf(float_complex);
ldouble_complex csinl(ldouble_complex);

double_complex ccos(double_complex);
float_complex ccosf(float_complex);
ldouble_complex ccosl(ldouble_complex);

double_complex ctan(double_complex);
float_complex ctanf(float_complex);
ldouble_complex ctanl(ldouble_complex);

double_complex casin(double_complex);
float_complex casinf(float_complex);
ldouble_complex casinl(ldouble_complex);

double_complex cacos(double_complex);
float_complex cacosf(float_complex);
ldouble_complex cacosl(ldouble_complex);

double_complex catan(double_complex);
float_complex catanf(float_complex);
ldouble_complex catanl(ldouble_complex);

double_complex csinh(double_complex);
float_complex csinhf(float_complex);
ldouble_complex csinhl(ldouble_complex);

double_complex ccosh(double_complex);
float_complex ccoshf(float_complex);
ldouble_complex ccoshl(ldouble_complex);

double_complex ctanh(double_complex);
float_complex ctanhf(float_complex);
ldouble_complex ctanhl(ldouble_complex);

double_complex casinh(double_complex);
float_complex casinhf(float_complex);
ldouble_complex casinhl(ldouble_complex);

double_complex cacosh(double_complex);
float_complex cacoshf(float_complex);
ldouble_complex cacoshl(ldouble_complex);

double_complex catanh(double_complex);
float_complex catanhf(float_complex);
ldouble_complex catanhl(ldouble_complex);

double creal(double_complex);
float crealf(float_complex);
ldouble creall(ldouble_complex);

double cimag(double_complex);
float cimagf(float_complex);
ldouble cimagl(ldouble_complex);

double round(double);
float roundf(float);
ldouble roundl(ldouble);

long lround(double);
long lroundf(float);
long lroundl(ldouble);

llong llround(double);
llong llroundf(float);
llong llroundl(ldouble);

double trunc(double);
float truncf(float);
ldouble truncl(ldouble);

double floor(double);
float floorf(float);
ldouble floorl(ldouble);

double ceil(double);
float ceilf(float);
ldouble ceill(ldouble);

double pow(double, double);
float powf(float, float);
ldouble powl(ldouble, ldouble);

double_complex cpow(double_complex, double_complex);
float_complex cpowf(float_complex, float_complex);
ldouble_complex cpowl(ldouble_complex, ldouble_complex);

double pow10(double);
float pow10f(float);
ldouble pow10l(ldouble);

double sqrt(double);
float sqrtf(float);
ldouble sqrtl(ldouble);

double_complex csqrt(double_complex);
float_complex csqrtf(float_complex);
ldouble_complex csqrtl(ldouble_complex);

double cbrt(double);
float cbrtf(float);
ldouble cbrtl(ldouble);

double log(double);
float logf(float);
ldouble logl(ldouble);

double log10(double);
float log10f(float);
ldouble log10l(ldouble);

double log2(double);
float log2f(float);
ldouble log2l(ldouble);

double logb(double);
float logbf(float);
ldouble logbl(ldouble);

int ilogb(double);
int ilogbf(float);
int ilogbl(ldouble);

double log1p(double);
float log1pf(float);
ldouble log1pl(ldouble);

double_complex clog(double_complex);
float_complex clogf(float_complex);
ldouble_complex clogl(ldouble_complex);

double_complex clog10(double_complex);
float_complex clog10f(float_complex);
ldouble_complex clog10l(ldouble_complex);

double gamma(double);
float gammaf(float);
ldouble gammal(ldouble);

double lgamma(double);
float lgammaf(float);
ldouble lgammal(ldouble);

double lgamma_r(double, +int*);
float lgammaf_r(float, +int*);
ldouble lgammal_r(ldouble, +int*);

double tgamma(double);
float tgammaf(float);
ldouble tgammal(ldouble);

double j0(double);
float j0f(float);
ldouble j0l(ldouble);

double j1(double);
float j1f(float);
ldouble j1l(ldouble);

double jn(int, double);
float jnf(int, float);
ldouble jnl(int, ldouble);

double y0(double);
float y0f(float);
ldouble y0l(ldouble);

double y1(double);
float y1f(float);
ldouble y1l(ldouble);

double yn(int, double);
float ynf(int, float);
ldouble ynl(int, ldouble);

double fdim(double, double);
float fdimf(float, float);
ldouble fdiml(ldouble, ldouble);

double remainder(double, double);
float remainderf(float, float);
ldouble remainderl(ldouble, ldouble);

double drem(double, double);
float dremf(float, float);
ldouble dreml(ldouble, ldouble);

double nearbyint(double);
float nearbyintf(float);
ldouble nearbyintl(ldouble);

double rint(double);
float rintf(float);
ldouble rintl(ldouble);

long lrint(double);
long lrintf(float);
long lrintl(ldouble);

llong llrint(double);
llong llrintf(float);
llong llrintl(ldouble);

double exp(double);
float expf(float);
ldouble expl(ldouble);

double exp10(double);
float exp10f(float);
ldouble exp10l(ldouble);

double exp2(double);
float exp2f(float);
ldouble exp2l(ldouble);

double expm1(double);
float expm1f(float);
ldouble expm1l(ldouble);

double frexp(double, +int *);
float frexpf(float, +int *);
ldouble frexpl(ldouble, +int *);

double ldexp(double, int);
float ldexpf(float, int);
ldouble ldexpl(ldouble, int);

double_complex cexp(double_complex);
float_complex cexpf(float_complex);
ldouble_complex cexpl(ldouble_complex);

double significand(double);
float significandf(float);
ldouble significandl(ldouble);

int finite(double);
int finitef(float);
int finitel(ldouble);

int isinf(double);
int isinff(float);
int isinfl(ldouble);

int isnan(double);
int isnanf(float);
int isnanl(ldouble);

double nan(string);
float nanf(string);
ldouble nanl(string);

double fabs(double);
float fabsf(float);
ldouble fabsl(ldouble);

double cabs(double_complex);
float cabsf(float_complex);
ldouble cabsl(ldouble_complex);

double modf(double, +double *);
float modff(float, +float *);
ldouble modfl(ldouble, +ldouble *);

double fmod(double, double);
float fmodf(float, float);
ldouble fmodl(ldouble, ldouble);

double remquo(double, double, +int *);
float remquof(float, float, +int *);
ldouble remquol(ldouble, ldouble, +int *);

double erf(double);
float erff(float);
ldouble erfl(ldouble);

double erfc(double);
float erfcf(float);
ldouble erfcl(ldouble);

double fmax(double, double);
float fmaxf(float, float);
ldouble fmaxl(ldouble, ldouble);

double fmin(double, double);
float fminf(float, float);
ldouble fminl(ldouble, ldouble);

double carg(double_complex);
float cargf(float_complex);
ldouble cargl(ldouble_complex);

double hypot(double, double);
float hypotf(float, float);
ldouble hypotl(ldouble, ldouble);

double scalb(double, double);
float scalbf(float, double);
ldouble scalbl(ldouble, double);

double scalbn(double, int);
float scalbnf(float, int);
ldouble scalbnl(ldouble, int);

double scalbln(double, long);
float scalblnf(float, long);
ldouble scalblnl(ldouble, long);

double fma(double, double, double);
float fmaf(float, float, float);
ldouble fmal(ldouble, ldouble, ldouble);

double_complex cproj(double_complex);
float_complex cprojf(float_complex);
ldouble_complex cprojl(ldouble_complex);

double copysign(double, double);
float copysignf(float, float);
ldouble copysignl(ldouble, ldouble);

double nextafter(double, double);
float nextafterf(float, float);
ldouble nextafterl(ldouble, ldouble);

double nexttoward(double, ldouble);
float nexttowardf(float, ldouble);
ldouble nexttowardl(ldouble, ldouble);

double_complex conj(double_complex);
float_complex conjf(float_complex);
ldouble_complex conjl(ldouble_complex);

;    15: 000000000003c000     15 FUNC    GLOBAL DEFAULT       13 __finitel@@GLIBC_2.2.5
;    44: 0000000000027be0    286 FUNC    GLOBAL DEFAULT       13 __clog10@@GLIBC_2.2.5
;    50: 00000000000068d0     85 FUNC    GLOBAL DEFAULT       13 feholdexcept@@GLIBC_2.2.5
;    56: 0000000000028900     10 FUNC    GLOBAL DEFAULT       13 __signbit@@GLIBC_2.2.5
;    61: 0000000000006ae0     53 FUNC    GLOBAL DEFAULT       13 feenableexcept@@GLIBC_2.2.5
;    65: 0000000000006760     29 FUNC    GLOBAL DEFAULT       13 fegetexceptflag@@GLIBC_2.2.5
;    68: 0000000000006a60     52 FUNC    GLOBAL DEFAULT       13 feupdateenv@@GLIBC_2.2.5
;    75: 0000000000006840     25 FUNC    GLOBAL DEFAULT       13 fetestexcept@@GLIBC_2.2.5
;    89: 0000000000025500     80 FUNC    GLOBAL DEFAULT       13 __fpclassify@@GLIBC_2.2.5
;    99: 0000000000033370    310 FUNC    GLOBAL DEFAULT       13 __clog10f@@GLIBC_2.2.5
;   104: 000000000003b600    307 FUNC    GLOBAL DEFAULT       13 __clog10l@@GLIBC_2.2.5
;   127: 0000000000028560     29 FUNC    GLOBAL DEFAULT       13 __finite@@GLIBC_2.2.5
;   134: 0000000000006870     66 FUNC    GLOBAL DEFAULT       13 fesetround@@GLIBC_2.2.5
;   136: 0000000000006780     99 FUNC    GLOBAL DEFAULT       13 feraiseexcept@@GLIBC_2.2.5
;   146: 0000000000006aa0     49 FUNC    GLOBAL DEFAULT       13 fedisableexcept@@GLIBC_2.2.5
;   155: 0000000000006730     40 FUNC    GLOBAL DEFAULT       13 feclearexcept@@GLIBC_2.2.5
;   175: 0000000000006860     14 FUNC    GLOBAL DEFAULT       13 fegetround@@GLIBC_2.2.5
;   199: 0000000000006b20     16 FUNC    GLOBAL DEFAULT       13 fegetexcept@@GLIBC_2.2.5
;   213: 00000000000067f0     71 FUNC    GLOBAL DEFAULT       13 fesetexceptflag@@GLIBC_2.2.5
;   229: 00000000000068c0      9 FUNC    GLOBAL DEFAULT       13 fegetenv@@GLIBC_2.2.5
;   249: 0000000000006930    303 FUNC    GLOBAL DEFAULT       13 fesetenv@@GLIBC_2.2.5
;   256: 00000000000308c0     56 FUNC    GLOBAL DEFAULT       13 __fpclassifyf@@GLIBC_2.2.5
;   261: 0000000000039020     94 FUNC    GLOBAL DEFAULT       13 __fpclassifyl@@GLIBC_2.2.5
;   263: 0000000000033a80      8 FUNC    GLOBAL DEFAULT       13 __signbitf@@GLIBC_2.2.5
;   267: 000000000003c2f0     29 FUNC    GLOBAL DEFAULT       13 __signbitl@@GLIBC_2.2.5
;   318: 0000000000006720      3 FUNC    WEAK   DEFAULT       13 matherr@@GLIBC_2.2.5
;   328: 00000000000337f0     18 FUNC    GLOBAL DEFAULT       13 __finitef@@GLIBC_2.2.5