@@ -349,4 +349,9 @@ ifeq ($(subdir),dlfcn)
libdl-routines += ieee128-dlfcn
CFLAGS-dlsym.c += -mabi=ibmlongdouble
CFLAGS-dlvsym.c += -mabi=ibmlongdouble
+
+ $(objpfx)test-ieee128-dlfcn: $(libdl)
+ $(objpfx)test-ibm128-dlfcn: $(libdl)
+ CFLAGS-test-ibm128-dlfcn.c += -mabi=ibmlongdouble
+ tests-internal += test-ieee128-dlfcn test-ibm128-dlfcn
endif
@@ -20,14 +20,34 @@
#include <dlfcn.h>
+/* gperf -H __ldbl_hash -N __ldbl_lookup -Ct -S 10 ldbl_to_ieee128.gperf -K ldbl_name --null-strings --output-file=ldbl_to_ieee128.h */
+#include "ldbl_to_ieee128.h"
+
+/*
+ Rename any long double sensitive symbols which pass through
+ dl*sym. This may be imperfect if someone overrides a symbol
+ in library loaded after libc/m, though they are setup for
+ some strange behavior if they include math.h which will quietly
+ mangle any such attempts to rename anyways. This plugs one
+ of the major drawbacks of the symbol redirects provided by GCC,
+ but is by no means perfect.
+*/
+static const char *
+mangle_ldbl (const char *name)
+{
+ const struct ldbl_ieee128 *m = __ldbl_lookup (name, strlen (name));
+ return m ? m->ieee128_name : name;
+}
+
void *
__dlsymieee128 (void *handle, const char *name)
{
- return __dlsym_internal (handle, name, RETURN_ADDRESS (0));
+ return __dlsym_internal (handle, mangle_ldbl (name), RETURN_ADDRESS (0));
}
void *
__dlvsymieee128 (void *handle, const char *name, const char *version_str)
{
- return __dlvsym_internal (handle, name, version_str, RETURN_ADDRESS (0));
+ return __dlvsym_internal (handle, mangle_ldbl (name), version_str,
+ RETURN_ADDRESS (0));
}
new file mode 100644
@@ -0,0 +1,226 @@
+%{
+
+/* Hash table lookup for ldbl == ieee128 symbols.
+ This is generated by unmange_ieee128_syms.py
+ Copyright (C) 2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+%}
+struct ldbl_ieee128 { const char *ldbl_name; const char *ieee128_name; };
+%%
+acoshl, "__acoshieee128"
+acosl, "__acosieee128"
+argp_error, "__argp_errorieee128"
+argp_failure, "__argp_failureieee128"
+asinhl, "__asinhieee128"
+asinl, "__asinieee128"
+asprintf, "__asprintfieee128"
+asprintf_chk, "__asprintf_chkieee128"
+atan2l, "__atan2ieee128"
+atanhl, "__atanhieee128"
+atanl, "__atanieee128"
+cabsl, "__cabsieee128"
+cacoshl, "__cacoshieee128"
+cacosl, "__cacosieee128"
+canonicalizel, "__canonicalizeieee128"
+cargl, "__cargieee128"
+casinhl, "__casinhieee128"
+casinl, "__casinieee128"
+catanhl, "__catanhieee128"
+catanl, "__catanieee128"
+cbrtl, "__cbrtieee128"
+ccoshl, "__ccoshieee128"
+ccosl, "__ccosieee128"
+ceill, "__ceilieee128"
+cexpl, "__cexpieee128"
+cimagl, "__cimagieee128"
+clog10l, "__clog10ieee128"
+clogl, "__clogieee128"
+conjl, "__conjieee128"
+copysignl, "__copysignieee128"
+coshl, "__coshieee128"
+cosl, "__cosieee128"
+cpowl, "__cpowieee128"
+cprojl, "__cprojieee128"
+creall, "__crealieee128"
+csinhl, "__csinhieee128"
+csinl, "__csinieee128"
+csqrtl, "__csqrtieee128"
+ctanhl, "__ctanhieee128"
+ctanl, "__ctanieee128"
+dlsym, "__dlsymieee128"
+dlvsym, "__dlvsymieee128"
+dprintf, "__dprintfieee128"
+dprintf_chk, "__dprintf_chkieee128"
+dreml, "__remainderieee128"
+erfcl, "__erfcieee128"
+erfl, "__erfieee128"
+err, "__errieee128"
+error, "__errorieee128"
+error_at_line, "__error_at_lineieee128"
+errx, "__errxieee128"
+exp10l, "__exp10ieee128"
+exp2l, "__exp2ieee128"
+expl, "__expieee128"
+expm1l, "__expm1ieee128"
+f32addl, "__f32addieee128"
+f32divl, "__f32divieee128"
+f32mull, "__f32mulieee128"
+f32subl, "__f32subieee128"
+f64addl, "__f64addieee128"
+f64divl, "__f64divieee128"
+f64mull, "__f64mulieee128"
+f64subl, "__f64subieee128"
+fabsl, "__fabsieee128"
+fdiml, "__fdimieee128"
+floorl, "__floorieee128"
+fmal, "__fmaieee128"
+fmaxl, "__fmaxieee128"
+fmaxmagl, "__fmaxmagieee128"
+fminl, "__fminieee128"
+fminmagl, "__fminmagieee128"
+fmodl, "__fmodieee128"
+fprintf, "__fprintfieee128"
+fprintf_chk, "__fprintf_chkieee128"
+frexpl, "__frexpieee128"
+fromfpl, "__fromfpieee128"
+fromfpxl, "__fromfpxieee128"
+fscanf, "__fscanfieee128"
+fwprintf, "__fwprintfieee128"
+fwprintf_chk, "__fwprintf_chkieee128"
+fwscanf, "__fwscanfieee128"
+gammal, "__lgammaieee128"
+getpayloadl, "__getpayloadieee128"
+hypotl, "__hypotieee128"
+ilogbl, "__ilogbieee128"
+j0l, "__j0ieee128"
+j1l, "__j1ieee128"
+jnl, "__jnieee128"
+ldexpl, "__ldexpieee128"
+lgammal, "__lgammaieee128"
+lgammal_r, "__lgammaieee128_r"
+llogbl, "__llogbieee128"
+llrintl, "__llrintieee128"
+llroundl, "__llroundieee128"
+log10l, "__log10ieee128"
+log1pl, "__log1pieee128"
+log2l, "__log2ieee128"
+logbl, "__logbieee128"
+logl, "__logieee128"
+lrintl, "__lrintieee128"
+lroundl, "__lroundieee128"
+modfl, "__modfieee128"
+nanl, "__nanieee128"
+nearbyintl, "__nearbyintieee128"
+nextafterl, "__nextafterieee128"
+nextdownl, "__nextdownieee128"
+nexttoward, "__nexttoward_to_ieee128"
+nexttowardf, "__nexttowardf_to_ieee128"
+nexttowardl, "__nexttowardieee128"
+nextupl, "__nextupieee128"
+obstack_printf, "__obstack_printfieee128"
+obstack_printf_chk, "__obstack_printf_chkieee128"
+obstack_vprintf, "__obstack_vprintfieee128"
+obstack_vprintf_chk, "__obstack_vprintf_chkieee128"
+powl, "__powieee128"
+printf, "__printfieee128"
+printf_chk, "__printf_chkieee128"
+printf_size, "__printf_sizeieee128"
+qecvtl, "__qecvtieee128"
+qecvtl_r, "__qecvtieee128_r"
+qfcvtl, "__qfcvtieee128"
+qfcvtl_r, "__qfcvtieee128_r"
+qgcvtl, "__qgcvtieee128"
+remainderl, "__remainderieee128"
+remquol, "__remquoieee128"
+rintl, "__rintieee128"
+roundevenl, "__roundevenieee128"
+roundl, "__roundieee128"
+scalbl, "__scalbieee128"
+scalblnl, "__scalblnieee128"
+scalbnl, "__scalbnieee128"
+scanf, "__scanfieee128"
+setpayloadl, "__setpayloadieee128"
+setpayloadsigl, "__setpayloadsigieee128"
+significandl, "__significandieee128"
+sincosl, "__sincosieee128"
+sinhl, "__sinhieee128"
+sinl, "__sinieee128"
+snprintf, "__snprintfieee128"
+snprintf_chk, "__snprintf_chkieee128"
+sprintf, "__sprintfieee128"
+sprintf_chk, "__sprintf_chkieee128"
+sqrtl, "__sqrtieee128"
+sscanf, "__sscanfieee128"
+strfmon, "__strfmonieee128"
+strfmon_l, "__strfmon_lieee128"
+strfroml, "__strfromieee128"
+strtol, "__strtoieee128"
+strtol_l, "__strtoieee128_l"
+swprintf, "__swprintfieee128"
+swprintf_chk, "__swprintf_chkieee128"
+swscanf, "__swscanfieee128"
+syslog, "__syslogieee128"
+syslog_chk, "__syslog_chkieee128"
+tanhl, "__tanhieee128"
+tanl, "__tanieee128"
+tgammal, "__tgammaieee128"
+totalorderl, "__totalorderieee128"
+totalordermagl, "__totalordermagieee128"
+truncl, "__truncieee128"
+ufromfpl, "__ufromfpieee128"
+ufromfpxl, "__ufromfpxieee128"
+vasprintf, "__vasprintfieee128"
+vasprintf_chk, "__vasprintf_chkieee128"
+vdprintf, "__vdprintfieee128"
+vdprintf_chk, "__vdprintf_chkieee128"
+verr, "__verrieee128"
+verrx, "__verrxieee128"
+vfprintf, "__vfprintfieee128"
+vfprintf_chk, "__vfprintf_chkieee128"
+vfscanf, "__vfscanfieee128"
+vfwprintf, "__vfwprintfieee128"
+vfwprintf_chk, "__vfwprintf_chkieee128"
+vfwscanf, "__vfwscanfieee128"
+vprintf, "__vprintfieee128"
+vprintf_chk, "__vprintf_chkieee128"
+vscanf, "__vscanfieee128"
+vsnprintf, "__vsnprintfieee128"
+vsnprintf_chk, "__vsnprintf_chkieee128"
+vsprintf, "__vsprintfieee128"
+vsprintf_chk, "__vsprintf_chkieee128"
+vsscanf, "__vsscanfieee128"
+vswprintf, "__vswprintfieee128"
+vswprintf_chk, "__vswprintf_chkieee128"
+vswscanf, "__vswscanfieee128"
+vsyslog, "__vsyslogieee128"
+vsyslog_chk, "__vsyslog_chkieee128"
+vwarn, "__vwarnieee128"
+vwarnx, "__vwarnxieee128"
+vwprintf, "__vwprintfieee128"
+vwprintf_chk, "__vwprintf_chkieee128"
+vwscanf, "__vwscanfieee128"
+warn, "__warnieee128"
+warnx, "__warnxieee128"
+wcstol, "__wcstoieee128"
+wcstol_l, "__wcstoieee128_l"
+wprintf, "__wprintfieee128"
+wprintf_chk, "__wprintf_chkieee128"
+wscanf, "__wscanfieee128"
+y0l, "__y0ieee128"
+y1l, "__y1ieee128"
+ynl, "__ynieee128"
new file mode 100644
@@ -0,0 +1,1254 @@
+/* ANSI-C code produced by gperf version 3.1 */
+/* Command-line: gperf -H __ldbl_hash -N __ldbl_lookup -Ct -S 10 -K ldbl_name --null-strings --output-file=ldbl_to_ieee128.h ldbl_to_ieee128.gperf */
+/* Computed positions: -k'1-5,11' */
+
+#if !((' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \
+ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \
+ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \
+ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \
+ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \
+ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \
+ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \
+ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \
+ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \
+ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \
+ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \
+ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \
+ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \
+ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \
+ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \
+ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \
+ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \
+ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \
+ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \
+ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \
+ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \
+ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \
+ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126))
+/* The character set is not based on ISO-646. */
+#error "gperf generated tables don't work with this execution character set. Please report a bug to <bug-gperf@gnu.org>."
+#endif
+
+#line 1 "ldbl_to_ieee128.gperf"
+
+
+/* Hash table lookup for ldbl == ieee128 symbols.
+ This is generated by unmange_ieee128_syms.py
+ Copyright (C) 2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+#line 23 "ldbl_to_ieee128.gperf"
+struct ldbl_ieee128 { const char *ldbl_name; const char *ieee128_name; };
+
+#define TOTAL_KEYWORDS 202
+#define MIN_WORD_LENGTH 3
+#define MAX_WORD_LENGTH 19
+#define MIN_HASH_VALUE 6
+#define MAX_HASH_VALUE 574
+/* maximum key range = 569, duplicates = 0 */
+
+#ifdef __GNUC__
+__inline
+#else
+#ifdef __cplusplus
+inline
+#endif
+#endif
+static unsigned int
+__ldbl_hash (register const char *str, register size_t len)
+{
+ static const unsigned short asso_values[] =
+ {
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 85, 25,
+ 5, 35, 575, 10, 10, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 25, 575, 5, 0, 0,
+ 150, 175, 80, 254, 30, 20, 135, 45, 10, 20,
+ 10, 0, 60, 75, 50, 0, 0, 45, 20, 50,
+ 105, 230, 40, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575, 575, 575, 575,
+ 575, 575, 575, 575, 575, 575, 575
+ };
+ register unsigned int hval = len;
+
+ switch (hval)
+ {
+ default:
+ hval += asso_values[(unsigned char)str[10]];
+ /*FALLTHROUGH*/
+ case 10:
+ case 9:
+ case 8:
+ case 7:
+ case 6:
+ case 5:
+ hval += asso_values[(unsigned char)str[4]];
+ /*FALLTHROUGH*/
+ case 4:
+ hval += asso_values[(unsigned char)str[3]];
+ /*FALLTHROUGH*/
+ case 3:
+ hval += asso_values[(unsigned char)str[2]+1];
+ /*FALLTHROUGH*/
+ case 2:
+ hval += asso_values[(unsigned char)str[1]];
+ /*FALLTHROUGH*/
+ case 1:
+ hval += asso_values[(unsigned char)str[0]];
+ break;
+ }
+ return hval;
+}
+
+const struct ldbl_ieee128 *
+__ldbl_lookup (register const char *str, register size_t len)
+{
+ static const struct ldbl_ieee128 wordlist[] =
+ {
+#line 172 "ldbl_to_ieee128.gperf"
+ {"strtol", "__strtoieee128"},
+#line 173 "ldbl_to_ieee128.gperf"
+ {"strtol_l", "__strtoieee128_l"},
+#line 56 "ldbl_to_ieee128.gperf"
+ {"cosl", "__cosieee128"},
+#line 45 "ldbl_to_ieee128.gperf"
+ {"cbrtl", "__cbrtieee128"},
+#line 153 "ldbl_to_ieee128.gperf"
+ {"scalbl", "__scalbieee128"},
+#line 155 "ldbl_to_ieee128.gperf"
+ {"scalbnl", "__scalbnieee128"},
+#line 154 "ldbl_to_ieee128.gperf"
+ {"scalblnl", "__scalblnieee128"},
+#line 180 "ldbl_to_ieee128.gperf"
+ {"tanl", "__tanieee128"},
+#line 36 "ldbl_to_ieee128.gperf"
+ {"cabsl", "__cabsieee128"},
+#line 64 "ldbl_to_ieee128.gperf"
+ {"ctanl", "__ctanieee128"},
+#line 33 "ldbl_to_ieee128.gperf"
+ {"atan2l", "__atan2ieee128"},
+#line 160 "ldbl_to_ieee128.gperf"
+ {"sincosl", "__sincosieee128"},
+#line 127 "ldbl_to_ieee128.gperf"
+ {"nanl", "__nanieee128"},
+#line 35 "ldbl_to_ieee128.gperf"
+ {"atanl", "__atanieee128"},
+#line 206 "ldbl_to_ieee128.gperf"
+ {"vsscanf", "__vsscanfieee128"},
+#line 162 "ldbl_to_ieee128.gperf"
+ {"sinl", "__sinieee128"},
+#line 135 "ldbl_to_ieee128.gperf"
+ {"obstack_printf", "__obstack_printfieee128"},
+#line 42 "ldbl_to_ieee128.gperf"
+ {"casinl", "__casinieee128"},
+#line 41 "ldbl_to_ieee128.gperf"
+ {"casinhl", "__casinhieee128"},
+#line 136 "ldbl_to_ieee128.gperf"
+ {"obstack_printf_chk", "__obstack_printf_chkieee128"},
+#line 55 "ldbl_to_ieee128.gperf"
+ {"coshl", "__coshieee128"},
+#line 63 "ldbl_to_ieee128.gperf"
+ {"ctanhl", "__ctanhieee128"},
+#line 179 "ldbl_to_ieee128.gperf"
+ {"tanhl", "__tanhieee128"},
+#line 34 "ldbl_to_ieee128.gperf"
+ {"atanhl", "__atanhieee128"},
+#line 123 "ldbl_to_ieee128.gperf"
+ {"logl", "__logieee128"},
+#line 122 "ldbl_to_ieee128.gperf"
+ {"logbl", "__logbieee128"},
+#line 219 "ldbl_to_ieee128.gperf"
+ {"wcstol", "__wcstoieee128"},
+#line 117 "ldbl_to_ieee128.gperf"
+ {"llrintl", "__llrintieee128"},
+#line 220 "ldbl_to_ieee128.gperf"
+ {"wcstol_l", "__wcstoieee128_l"},
+#line 121 "ldbl_to_ieee128.gperf"
+ {"log2l", "__log2ieee128"},
+#line 176 "ldbl_to_ieee128.gperf"
+ {"swscanf", "__swscanfieee128"},
+#line 161 "ldbl_to_ieee128.gperf"
+ {"sinhl", "__sinhieee128"},
+#line 39 "ldbl_to_ieee128.gperf"
+ {"canonicalizel", "__canonicalizeieee128"},
+#line 217 "ldbl_to_ieee128.gperf"
+ {"warn", "__warnieee128"},
+#line 137 "ldbl_to_ieee128.gperf"
+ {"obstack_vprintf", "__obstack_vprintfieee128"},
+#line 44 "ldbl_to_ieee128.gperf"
+ {"catanl", "__catanieee128"},
+#line 43 "ldbl_to_ieee128.gperf"
+ {"catanhl", "__catanhieee128"},
+#line 118 "ldbl_to_ieee128.gperf"
+ {"llroundl", "__llroundieee128"},
+#line 138 "ldbl_to_ieee128.gperf"
+ {"obstack_vprintf_chk", "__obstack_vprintf_chkieee128"},
+#line 47 "ldbl_to_ieee128.gperf"
+ {"ccosl", "__ccosieee128"},
+#line 210 "ldbl_to_ieee128.gperf"
+ {"vsyslog", "__vsyslogieee128"},
+#line 26 "ldbl_to_ieee128.gperf"
+ {"acosl", "__acosieee128"},
+#line 182 "ldbl_to_ieee128.gperf"
+ {"totalorderl", "__totalorderieee128"},
+#line 216 "ldbl_to_ieee128.gperf"
+ {"vwscanf", "__vwscanfieee128"},
+#line 150 "ldbl_to_ieee128.gperf"
+ {"rintl", "__rintieee128"},
+#line 184 "ldbl_to_ieee128.gperf"
+ {"truncl", "__truncieee128"},
+#line 167 "ldbl_to_ieee128.gperf"
+ {"sqrtl", "__sqrtieee128"},
+#line 183 "ldbl_to_ieee128.gperf"
+ {"totalordermagl", "__totalordermagieee128"},
+#line 156 "ldbl_to_ieee128.gperf"
+ {"scanf", "__scanfieee128"},
+#line 46 "ldbl_to_ieee128.gperf"
+ {"ccoshl", "__ccoshieee128"},
+#line 165 "ldbl_to_ieee128.gperf"
+ {"sprintf", "__sprintfieee128"},
+#line 88 "ldbl_to_ieee128.gperf"
+ {"fabsl", "__fabsieee128"},
+#line 25 "ldbl_to_ieee128.gperf"
+ {"acoshl", "__acoshieee128"},
+#line 62 "ldbl_to_ieee128.gperf"
+ {"csqrtl", "__csqrtieee128"},
+#line 169 "ldbl_to_ieee128.gperf"
+ {"strfmon", "__strfmonieee128"},
+#line 170 "ldbl_to_ieee128.gperf"
+ {"strfmon_l", "__strfmon_lieee128"},
+#line 195 "ldbl_to_ieee128.gperf"
+ {"vfscanf", "__vfscanfieee128"},
+#line 91 "ldbl_to_ieee128.gperf"
+ {"fmal", "__fmaieee128"},
+#line 199 "ldbl_to_ieee128.gperf"
+ {"vprintf", "__vprintfieee128"},
+#line 211 "ldbl_to_ieee128.gperf"
+ {"vsyslog_chk", "__vsyslog_chkieee128"},
+#line 120 "ldbl_to_ieee128.gperf"
+ {"log1pl", "__log1pieee128"},
+#line 209 "ldbl_to_ieee128.gperf"
+ {"vswscanf", "__vswscanfieee128"},
+#line 212 "ldbl_to_ieee128.gperf"
+ {"vwarn", "__vwarnieee128"},
+#line 213 "ldbl_to_ieee128.gperf"
+ {"vwarnx", "__vwarnxieee128"},
+#line 171 "ldbl_to_ieee128.gperf"
+ {"strfroml", "__strfromieee128"},
+#line 202 "ldbl_to_ieee128.gperf"
+ {"vsnprintf", "__vsnprintfieee128"},
+#line 105 "ldbl_to_ieee128.gperf"
+ {"fwscanf", "__fwscanfieee128"},
+#line 203 "ldbl_to_ieee128.gperf"
+ {"vsnprintf_chk", "__vsnprintf_chkieee128"},
+#line 187 "ldbl_to_ieee128.gperf"
+ {"vasprintf", "__vasprintfieee128"},
+#line 166 "ldbl_to_ieee128.gperf"
+ {"sprintf_chk", "__sprintf_chkieee128"},
+#line 221 "ldbl_to_ieee128.gperf"
+ {"wprintf", "__wprintfieee128"},
+#line 188 "ldbl_to_ieee128.gperf"
+ {"vasprintf_chk", "__vasprintf_chkieee128"},
+#line 53 "ldbl_to_ieee128.gperf"
+ {"conjl", "__conjieee128"},
+#line 59 "ldbl_to_ieee128.gperf"
+ {"creall", "__crealieee128"},
+#line 87 "ldbl_to_ieee128.gperf"
+ {"f64subl", "__f64subieee128"},
+#line 185 "ldbl_to_ieee128.gperf"
+ {"ufromfpl", "__ufromfpieee128"},
+#line 186 "ldbl_to_ieee128.gperf"
+ {"ufromfpxl", "__ufromfpxieee128"},
+#line 119 "ldbl_to_ieee128.gperf"
+ {"log10l", "__log10ieee128"},
+#line 31 "ldbl_to_ieee128.gperf"
+ {"asprintf", "__asprintfieee128"},
+#line 61 "ldbl_to_ieee128.gperf"
+ {"csinl", "__csinieee128"},
+#line 38 "ldbl_to_ieee128.gperf"
+ {"cacosl", "__cacosieee128"},
+#line 37 "ldbl_to_ieee128.gperf"
+ {"cacoshl", "__cacoshieee128"},
+#line 163 "ldbl_to_ieee128.gperf"
+ {"snprintf", "__snprintfieee128"},
+#line 30 "ldbl_to_ieee128.gperf"
+ {"asinl", "__asinieee128"},
+#line 200 "ldbl_to_ieee128.gperf"
+ {"vprintf_chk", "__vprintf_chkieee128"},
+#line 112 "ldbl_to_ieee128.gperf"
+ {"jnl", "__jnieee128"},
+#line 168 "ldbl_to_ieee128.gperf"
+ {"sscanf", "__sscanfieee128"},
+#line 86 "ldbl_to_ieee128.gperf"
+ {"f64mull", "__f64mulieee128"},
+#line 204 "ldbl_to_ieee128.gperf"
+ {"vsprintf", "__vsprintfieee128"},
+#line 218 "ldbl_to_ieee128.gperf"
+ {"warnx", "__warnxieee128"},
+#line 97 "ldbl_to_ieee128.gperf"
+ {"fprintf", "__fprintfieee128"},
+#line 139 "ldbl_to_ieee128.gperf"
+ {"powl", "__powieee128"},
+#line 27 "ldbl_to_ieee128.gperf"
+ {"argp_error", "__argp_errorieee128"},
+#line 60 "ldbl_to_ieee128.gperf"
+ {"csinhl", "__csinhieee128"},
+#line 125 "ldbl_to_ieee128.gperf"
+ {"lroundl", "__lroundieee128"},
+#line 111 "ldbl_to_ieee128.gperf"
+ {"j1l", "__j1ieee128"},
+#line 57 "ldbl_to_ieee128.gperf"
+ {"cpowl", "__cpowieee128"},
+#line 29 "ldbl_to_ieee128.gperf"
+ {"asinhl", "__asinhieee128"},
+#line 201 "ldbl_to_ieee128.gperf"
+ {"vscanf", "__vscanfieee128"},
+#line 32 "ldbl_to_ieee128.gperf"
+ {"asprintf_chk", "__asprintf_chkieee128"},
+#line 222 "ldbl_to_ieee128.gperf"
+ {"wprintf_chk", "__wprintf_chkieee128"},
+#line 164 "ldbl_to_ieee128.gperf"
+ {"snprintf_chk", "__snprintf_chkieee128"},
+#line 58 "ldbl_to_ieee128.gperf"
+ {"cprojl", "__cprojieee128"},
+#line 83 "ldbl_to_ieee128.gperf"
+ {"f32subl", "__f32subieee128"},
+#line 174 "ldbl_to_ieee128.gperf"
+ {"swprintf", "__swprintfieee128"},
+#line 90 "ldbl_to_ieee128.gperf"
+ {"floorl", "__floorieee128"},
+#line 205 "ldbl_to_ieee128.gperf"
+ {"vsprintf_chk", "__vsprintf_chkieee128"},
+#line 124 "ldbl_to_ieee128.gperf"
+ {"lrintl", "__lrintieee128"},
+#line 198 "ldbl_to_ieee128.gperf"
+ {"vfwscanf", "__vfwscanfieee128"},
+#line 92 "ldbl_to_ieee128.gperf"
+ {"fmaxl", "__fmaxieee128"},
+#line 223 "ldbl_to_ieee128.gperf"
+ {"wscanf", "__wscanfieee128"},
+#line 82 "ldbl_to_ieee128.gperf"
+ {"f32mull", "__f32mulieee128"},
+#line 214 "ldbl_to_ieee128.gperf"
+ {"vwprintf", "__vwprintfieee128"},
+#line 98 "ldbl_to_ieee128.gperf"
+ {"fprintf_chk", "__fprintf_chkieee128"},
+#line 72 "ldbl_to_ieee128.gperf"
+ {"err", "__errieee128"},
+#line 28 "ldbl_to_ieee128.gperf"
+ {"argp_failure", "__argp_failureieee128"},
+#line 93 "ldbl_to_ieee128.gperf"
+ {"fmaxmagl", "__fmaxmagieee128"},
+#line 152 "ldbl_to_ieee128.gperf"
+ {"roundl", "__roundieee128"},
+#line 175 "ldbl_to_ieee128.gperf"
+ {"swprintf_chk", "__swprintf_chkieee128"},
+#line 151 "ldbl_to_ieee128.gperf"
+ {"roundevenl", "__roundevenieee128"},
+#line 159 "ldbl_to_ieee128.gperf"
+ {"significandl", "__significandieee128"},
+#line 110 "ldbl_to_ieee128.gperf"
+ {"j0l", "__j0ieee128"},
+#line 207 "ldbl_to_ieee128.gperf"
+ {"vswprintf", "__vswprintfieee128"},
+#line 128 "ldbl_to_ieee128.gperf"
+ {"nearbyintl", "__nearbyintieee128"},
+#line 177 "ldbl_to_ieee128.gperf"
+ {"syslog", "__syslogieee128"},
+#line 67 "ldbl_to_ieee128.gperf"
+ {"dprintf", "__dprintfieee128"},
+#line 208 "ldbl_to_ieee128.gperf"
+ {"vswprintf_chk", "__vswprintf_chkieee128"},
+#line 191 "ldbl_to_ieee128.gperf"
+ {"verr", "__verrieee128"},
+#line 178 "ldbl_to_ieee128.gperf"
+ {"syslog_chk", "__syslog_chkieee128"},
+#line 102 "ldbl_to_ieee128.gperf"
+ {"fscanf", "__fscanfieee128"},
+#line 193 "ldbl_to_ieee128.gperf"
+ {"vfprintf", "__vfprintfieee128"},
+#line 215 "ldbl_to_ieee128.gperf"
+ {"vwprintf_chk", "__vwprintf_chkieee128"},
+#line 94 "ldbl_to_ieee128.gperf"
+ {"fminl", "__fminieee128"},
+#line 140 "ldbl_to_ieee128.gperf"
+ {"printf", "__printfieee128"},
+#line 84 "ldbl_to_ieee128.gperf"
+ {"f64addl", "__f64addieee128"},
+#line 226 "ldbl_to_ieee128.gperf"
+ {"ynl", "__ynieee128"},
+#line 141 "ldbl_to_ieee128.gperf"
+ {"printf_chk", "__printf_chkieee128"},
+#line 148 "ldbl_to_ieee128.gperf"
+ {"remainderl", "__remainderieee128"},
+#line 95 "ldbl_to_ieee128.gperf"
+ {"fminmagl", "__fminmagieee128"},
+#line 40 "ldbl_to_ieee128.gperf"
+ {"cargl", "__cargieee128"},
+#line 85 "ldbl_to_ieee128.gperf"
+ {"f64divl", "__f64divieee128"},
+#line 225 "ldbl_to_ieee128.gperf"
+ {"y1l", "__y1ieee128"},
+#line 73 "ldbl_to_ieee128.gperf"
+ {"error", "__errorieee128"},
+#line 103 "ldbl_to_ieee128.gperf"
+ {"fwprintf", "__fwprintfieee128"},
+#line 194 "ldbl_to_ieee128.gperf"
+ {"vfprintf_chk", "__vfprintf_chkieee128"},
+#line 126 "ldbl_to_ieee128.gperf"
+ {"modfl", "__modfieee128"},
+#line 50 "ldbl_to_ieee128.gperf"
+ {"cimagl", "__cimagieee128"},
+#line 68 "ldbl_to_ieee128.gperf"
+ {"dprintf_chk", "__dprintf_chkieee128"},
+#line 100 "ldbl_to_ieee128.gperf"
+ {"fromfpl", "__fromfpieee128"},
+#line 101 "ldbl_to_ieee128.gperf"
+ {"fromfpxl", "__fromfpxieee128"},
+#line 158 "ldbl_to_ieee128.gperf"
+ {"setpayloadsigl", "__setpayloadsigieee128"},
+#line 106 "ldbl_to_ieee128.gperf"
+ {"gammal", "__lgammaieee128"},
+#line 181 "ldbl_to_ieee128.gperf"
+ {"tgammal", "__tgammaieee128"},
+#line 157 "ldbl_to_ieee128.gperf"
+ {"setpayloadl", "__setpayloadieee128"},
+#line 74 "ldbl_to_ieee128.gperf"
+ {"error_at_line", "__error_at_lineieee128"},
+#line 114 "ldbl_to_ieee128.gperf"
+ {"lgammal", "__lgammaieee128"},
+#line 80 "ldbl_to_ieee128.gperf"
+ {"f32addl", "__f32addieee128"},
+#line 115 "ldbl_to_ieee128.gperf"
+ {"lgammal_r", "__lgammaieee128_r"},
+#line 54 "ldbl_to_ieee128.gperf"
+ {"copysignl", "__copysignieee128"},
+#line 69 "ldbl_to_ieee128.gperf"
+ {"dreml", "__remainderieee128"},
+#line 104 "ldbl_to_ieee128.gperf"
+ {"fwprintf_chk", "__fwprintf_chkieee128"},
+#line 189 "ldbl_to_ieee128.gperf"
+ {"vdprintf", "__vdprintfieee128"},
+#line 196 "ldbl_to_ieee128.gperf"
+ {"vfwprintf", "__vfwprintfieee128"},
+#line 96 "ldbl_to_ieee128.gperf"
+ {"fmodl", "__fmodieee128"},
+#line 81 "ldbl_to_ieee128.gperf"
+ {"f32divl", "__f32divieee128"},
+#line 197 "ldbl_to_ieee128.gperf"
+ {"vfwprintf_chk", "__vfwprintf_chkieee128"},
+#line 145 "ldbl_to_ieee128.gperf"
+ {"qfcvtl", "__qfcvtieee128"},
+#line 146 "ldbl_to_ieee128.gperf"
+ {"qfcvtl_r", "__qfcvtieee128_r"},
+#line 75 "ldbl_to_ieee128.gperf"
+ {"errx", "__errxieee128"},
+#line 48 "ldbl_to_ieee128.gperf"
+ {"ceill", "__ceilieee128"},
+#line 224 "ldbl_to_ieee128.gperf"
+ {"y0l", "__y0ieee128"},
+#line 52 "ldbl_to_ieee128.gperf"
+ {"clogl", "__clogieee128"},
+#line 116 "ldbl_to_ieee128.gperf"
+ {"llogbl", "__llogbieee128"},
+#line 108 "ldbl_to_ieee128.gperf"
+ {"hypotl", "__hypotieee128"},
+#line 109 "ldbl_to_ieee128.gperf"
+ {"ilogbl", "__ilogbieee128"},
+#line 192 "ldbl_to_ieee128.gperf"
+ {"verrx", "__verrxieee128"},
+#line 51 "ldbl_to_ieee128.gperf"
+ {"clog10l", "__clog10ieee128"},
+#line 190 "ldbl_to_ieee128.gperf"
+ {"vdprintf_chk", "__vdprintf_chkieee128"},
+#line 149 "ldbl_to_ieee128.gperf"
+ {"remquol", "__remquoieee128"},
+#line 78 "ldbl_to_ieee128.gperf"
+ {"expl", "__expieee128"},
+#line 77 "ldbl_to_ieee128.gperf"
+ {"exp2l", "__exp2ieee128"},
+#line 99 "ldbl_to_ieee128.gperf"
+ {"frexpl", "__frexpieee128"},
+#line 89 "ldbl_to_ieee128.gperf"
+ {"fdiml", "__fdimieee128"},
+#line 79 "ldbl_to_ieee128.gperf"
+ {"expm1l", "__expm1ieee128"},
+#line 113 "ldbl_to_ieee128.gperf"
+ {"ldexpl", "__ldexpieee128"},
+#line 65 "ldbl_to_ieee128.gperf"
+ {"dlsym", "__dlsymieee128"},
+#line 131 "ldbl_to_ieee128.gperf"
+ {"nexttoward", "__nexttoward_to_ieee128"},
+#line 143 "ldbl_to_ieee128.gperf"
+ {"qecvtl", "__qecvtieee128"},
+#line 144 "ldbl_to_ieee128.gperf"
+ {"qecvtl_r", "__qecvtieee128_r"},
+#line 129 "ldbl_to_ieee128.gperf"
+ {"nextafterl", "__nextafterieee128"},
+#line 133 "ldbl_to_ieee128.gperf"
+ {"nexttowardl", "__nexttowardieee128"},
+#line 142 "ldbl_to_ieee128.gperf"
+ {"printf_size", "__printf_sizeieee128"},
+#line 66 "ldbl_to_ieee128.gperf"
+ {"dlvsym", "__dlvsymieee128"},
+#line 134 "ldbl_to_ieee128.gperf"
+ {"nextupl", "__nextupieee128"},
+#line 76 "ldbl_to_ieee128.gperf"
+ {"exp10l", "__exp10ieee128"},
+#line 49 "ldbl_to_ieee128.gperf"
+ {"cexpl", "__cexpieee128"},
+#line 71 "ldbl_to_ieee128.gperf"
+ {"erfl", "__erfieee128"},
+#line 70 "ldbl_to_ieee128.gperf"
+ {"erfcl", "__erfcieee128"},
+#line 147 "ldbl_to_ieee128.gperf"
+ {"qgcvtl", "__qgcvtieee128"},
+#line 132 "ldbl_to_ieee128.gperf"
+ {"nexttowardf", "__nexttowardf_to_ieee128"},
+#line 107 "ldbl_to_ieee128.gperf"
+ {"getpayloadl", "__getpayloadieee128"},
+#line 130 "ldbl_to_ieee128.gperf"
+ {"nextdownl", "__nextdownieee128"}
+ };
+
+ if (len <= MAX_WORD_LENGTH && len >= MIN_WORD_LENGTH)
+ {
+ register unsigned int key = __ldbl_hash (str, len);
+
+ if (key <= MAX_HASH_VALUE && key >= MIN_HASH_VALUE)
+ {
+ register const struct ldbl_ieee128 *resword;
+
+ if (key < 197)
+ {
+ if (key < 77)
+ {
+ if (key < 45)
+ {
+ switch (key - 6)
+ {
+ case 0:
+ resword = &wordlist[0];
+ goto compare;
+ case 2:
+ resword = &wordlist[1];
+ goto compare;
+ case 8:
+ resword = &wordlist[2];
+ goto compare;
+ case 9:
+ resword = &wordlist[3];
+ goto compare;
+ case 10:
+ resword = &wordlist[4];
+ goto compare;
+ case 11:
+ resword = &wordlist[5];
+ goto compare;
+ case 12:
+ resword = &wordlist[6];
+ goto compare;
+ case 13:
+ resword = &wordlist[7];
+ goto compare;
+ case 14:
+ resword = &wordlist[8];
+ goto compare;
+ case 19:
+ resword = &wordlist[9];
+ goto compare;
+ case 20:
+ resword = &wordlist[10];
+ goto compare;
+ case 21:
+ resword = &wordlist[11];
+ goto compare;
+ case 23:
+ resword = &wordlist[12];
+ goto compare;
+ case 24:
+ resword = &wordlist[13];
+ goto compare;
+ case 26:
+ resword = &wordlist[14];
+ goto compare;
+ case 28:
+ resword = &wordlist[15];
+ goto compare;
+ case 33:
+ resword = &wordlist[16];
+ goto compare;
+ case 35:
+ resword = &wordlist[17];
+ goto compare;
+ case 36:
+ resword = &wordlist[18];
+ goto compare;
+ case 37:
+ resword = &wordlist[19];
+ goto compare;
+ }
+ }
+ else
+ {
+ switch (key - 45)
+ {
+ case 0:
+ resword = &wordlist[20];
+ goto compare;
+ case 1:
+ resword = &wordlist[21];
+ goto compare;
+ case 5:
+ resword = &wordlist[22];
+ goto compare;
+ case 6:
+ resword = &wordlist[23];
+ goto compare;
+ case 9:
+ resword = &wordlist[24];
+ goto compare;
+ case 10:
+ resword = &wordlist[25];
+ goto compare;
+ case 11:
+ resword = &wordlist[26];
+ goto compare;
+ case 12:
+ resword = &wordlist[27];
+ goto compare;
+ case 13:
+ resword = &wordlist[28];
+ goto compare;
+ case 15:
+ resword = &wordlist[29];
+ goto compare;
+ case 17:
+ resword = &wordlist[30];
+ goto compare;
+ case 20:
+ resword = &wordlist[31];
+ goto compare;
+ case 23:
+ resword = &wordlist[32];
+ goto compare;
+ case 24:
+ resword = &wordlist[33];
+ goto compare;
+ case 25:
+ resword = &wordlist[34];
+ goto compare;
+ case 26:
+ resword = &wordlist[35];
+ goto compare;
+ case 27:
+ resword = &wordlist[36];
+ goto compare;
+ case 28:
+ resword = &wordlist[37];
+ goto compare;
+ case 29:
+ resword = &wordlist[38];
+ goto compare;
+ case 30:
+ resword = &wordlist[39];
+ goto compare;
+ }
+ }
+ }
+ else
+ {
+ if (key < 131)
+ {
+ switch (key - 77)
+ {
+ case 0:
+ resword = &wordlist[40];
+ goto compare;
+ case 3:
+ resword = &wordlist[41];
+ goto compare;
+ case 4:
+ resword = &wordlist[42];
+ goto compare;
+ case 5:
+ resword = &wordlist[43];
+ goto compare;
+ case 8:
+ resword = &wordlist[44];
+ goto compare;
+ case 9:
+ resword = &wordlist[45];
+ goto compare;
+ case 13:
+ resword = &wordlist[46];
+ goto compare;
+ case 17:
+ resword = &wordlist[47];
+ goto compare;
+ case 18:
+ resword = &wordlist[48];
+ goto compare;
+ case 19:
+ resword = &wordlist[49];
+ goto compare;
+ case 20:
+ resword = &wordlist[50];
+ goto compare;
+ case 23:
+ resword = &wordlist[51];
+ goto compare;
+ case 24:
+ resword = &wordlist[52];
+ goto compare;
+ case 29:
+ resword = &wordlist[53];
+ goto compare;
+ case 30:
+ resword = &wordlist[54];
+ goto compare;
+ case 32:
+ resword = &wordlist[55];
+ goto compare;
+ case 35:
+ resword = &wordlist[56];
+ goto compare;
+ case 37:
+ resword = &wordlist[57];
+ goto compare;
+ case 40:
+ resword = &wordlist[58];
+ goto compare;
+ case 49:
+ resword = &wordlist[59];
+ goto compare;
+ }
+ }
+ else
+ {
+ if (key < 162)
+ {
+ switch (key - 131)
+ {
+ case 0:
+ resword = &wordlist[60];
+ goto compare;
+ case 2:
+ resword = &wordlist[61];
+ goto compare;
+ case 4:
+ resword = &wordlist[62];
+ goto compare;
+ case 5:
+ resword = &wordlist[63];
+ goto compare;
+ case 7:
+ resword = &wordlist[64];
+ goto compare;
+ case 8:
+ resword = &wordlist[65];
+ goto compare;
+ case 11:
+ resword = &wordlist[66];
+ goto compare;
+ case 12:
+ resword = &wordlist[67];
+ goto compare;
+ case 13:
+ resword = &wordlist[68];
+ goto compare;
+ case 15:
+ resword = &wordlist[69];
+ goto compare;
+ case 16:
+ resword = &wordlist[70];
+ goto compare;
+ case 17:
+ resword = &wordlist[71];
+ goto compare;
+ case 19:
+ resword = &wordlist[72];
+ goto compare;
+ case 20:
+ resword = &wordlist[73];
+ goto compare;
+ case 21:
+ resword = &wordlist[74];
+ goto compare;
+ case 22:
+ resword = &wordlist[75];
+ goto compare;
+ case 23:
+ resword = &wordlist[76];
+ goto compare;
+ case 25:
+ resword = &wordlist[77];
+ goto compare;
+ case 27:
+ resword = &wordlist[78];
+ goto compare;
+ case 29:
+ resword = &wordlist[79];
+ goto compare;
+ case 30:
+ resword = &wordlist[80];
+ goto compare;
+ }
+ }
+ else
+ {
+ switch (key - 162)
+ {
+ case 0:
+ resword = &wordlist[81];
+ goto compare;
+ case 1:
+ resword = &wordlist[82];
+ goto compare;
+ case 3:
+ resword = &wordlist[83];
+ goto compare;
+ case 4:
+ resword = &wordlist[84];
+ goto compare;
+ case 6:
+ resword = &wordlist[85];
+ goto compare;
+ case 9:
+ resword = &wordlist[86];
+ goto compare;
+ case 10:
+ resword = &wordlist[87];
+ goto compare;
+ case 11:
+ resword = &wordlist[88];
+ goto compare;
+ case 13:
+ resword = &wordlist[89];
+ goto compare;
+ case 15:
+ resword = &wordlist[90];
+ goto compare;
+ case 17:
+ resword = &wordlist[91];
+ goto compare;
+ case 18:
+ resword = &wordlist[92];
+ goto compare;
+ case 19:
+ resword = &wordlist[93];
+ goto compare;
+ case 20:
+ resword = &wordlist[94];
+ goto compare;
+ case 21:
+ resword = &wordlist[95];
+ goto compare;
+ case 23:
+ resword = &wordlist[96];
+ goto compare;
+ case 24:
+ resword = &wordlist[97];
+ goto compare;
+ case 29:
+ resword = &wordlist[98];
+ goto compare;
+ case 30:
+ resword = &wordlist[99];
+ goto compare;
+ case 34:
+ resword = &wordlist[100];
+ goto compare;
+ }
+ }
+ }
+ }
+ }
+ else
+ {
+ if (key < 278)
+ {
+ if (key < 243)
+ {
+ switch (key - 197)
+ {
+ case 0:
+ resword = &wordlist[101];
+ goto compare;
+ case 4:
+ resword = &wordlist[102];
+ goto compare;
+ case 5:
+ resword = &wordlist[103];
+ goto compare;
+ case 6:
+ resword = &wordlist[104];
+ goto compare;
+ case 9:
+ resword = &wordlist[105];
+ goto compare;
+ case 10:
+ resword = &wordlist[106];
+ goto compare;
+ case 14:
+ resword = &wordlist[107];
+ goto compare;
+ case 16:
+ resword = &wordlist[108];
+ goto compare;
+ case 23:
+ resword = &wordlist[109];
+ goto compare;
+ case 24:
+ resword = &wordlist[110];
+ goto compare;
+ case 25:
+ resword = &wordlist[111];
+ goto compare;
+ case 26:
+ resword = &wordlist[112];
+ goto compare;
+ case 29:
+ resword = &wordlist[113];
+ goto compare;
+ case 31:
+ resword = &wordlist[114];
+ goto compare;
+ case 35:
+ resword = &wordlist[115];
+ goto compare;
+ case 36:
+ resword = &wordlist[116];
+ goto compare;
+ case 39:
+ resword = &wordlist[117];
+ goto compare;
+ case 40:
+ resword = &wordlist[118];
+ goto compare;
+ case 43:
+ resword = &wordlist[119];
+ goto compare;
+ case 45:
+ resword = &wordlist[120];
+ goto compare;
+ }
+ }
+ else
+ {
+ switch (key - 243)
+ {
+ case 0:
+ resword = &wordlist[121];
+ goto compare;
+ case 1:
+ resword = &wordlist[122];
+ goto compare;
+ case 2:
+ resword = &wordlist[123];
+ goto compare;
+ case 3:
+ resword = &wordlist[124];
+ goto compare;
+ case 4:
+ resword = &wordlist[125];
+ goto compare;
+ case 5:
+ resword = &wordlist[126];
+ goto compare;
+ case 6:
+ resword = &wordlist[127];
+ goto compare;
+ case 7:
+ resword = &wordlist[128];
+ goto compare;
+ case 8:
+ resword = &wordlist[129];
+ goto compare;
+ case 10:
+ resword = &wordlist[130];
+ goto compare;
+ case 14:
+ resword = &wordlist[131];
+ goto compare;
+ case 17:
+ resword = &wordlist[132];
+ goto compare;
+ case 18:
+ resword = &wordlist[133];
+ goto compare;
+ case 19:
+ resword = &wordlist[134];
+ goto compare;
+ case 20:
+ resword = &wordlist[135];
+ goto compare;
+ case 22:
+ resword = &wordlist[136];
+ goto compare;
+ case 27:
+ resword = &wordlist[137];
+ goto compare;
+ case 30:
+ resword = &wordlist[138];
+ goto compare;
+ case 31:
+ resword = &wordlist[139];
+ goto compare;
+ case 34:
+ resword = &wordlist[140];
+ goto compare;
+ }
+ }
+ }
+ else
+ {
+ if (key < 323)
+ {
+ switch (key - 278)
+ {
+ case 0:
+ resword = &wordlist[141];
+ goto compare;
+ case 2:
+ resword = &wordlist[142];
+ goto compare;
+ case 5:
+ resword = &wordlist[143];
+ goto compare;
+ case 9:
+ resword = &wordlist[144];
+ goto compare;
+ case 12:
+ resword = &wordlist[145];
+ goto compare;
+ case 17:
+ resword = &wordlist[146];
+ goto compare;
+ case 18:
+ resword = &wordlist[147];
+ goto compare;
+ case 19:
+ resword = &wordlist[148];
+ goto compare;
+ case 20:
+ resword = &wordlist[149];
+ goto compare;
+ case 21:
+ resword = &wordlist[150];
+ goto compare;
+ case 22:
+ resword = &wordlist[151];
+ goto compare;
+ case 23:
+ resword = &wordlist[152];
+ goto compare;
+ case 28:
+ resword = &wordlist[153];
+ goto compare;
+ case 30:
+ resword = &wordlist[154];
+ goto compare;
+ case 33:
+ resword = &wordlist[155];
+ goto compare;
+ case 34:
+ resword = &wordlist[156];
+ goto compare;
+ case 35:
+ resword = &wordlist[157];
+ goto compare;
+ case 36:
+ resword = &wordlist[158];
+ goto compare;
+ case 37:
+ resword = &wordlist[159];
+ goto compare;
+ case 39:
+ resword = &wordlist[160];
+ goto compare;
+ }
+ }
+ else
+ {
+ if (key < 400)
+ {
+ switch (key - 323)
+ {
+ case 0:
+ resword = &wordlist[161];
+ goto compare;
+ case 1:
+ resword = &wordlist[162];
+ goto compare;
+ case 2:
+ resword = &wordlist[163];
+ goto compare;
+ case 4:
+ resword = &wordlist[164];
+ goto compare;
+ case 5:
+ resword = &wordlist[165];
+ goto compare;
+ case 8:
+ resword = &wordlist[166];
+ goto compare;
+ case 10:
+ resword = &wordlist[167];
+ goto compare;
+ case 11:
+ resword = &wordlist[168];
+ goto compare;
+ case 12:
+ resword = &wordlist[169];
+ goto compare;
+ case 15:
+ resword = &wordlist[170];
+ goto compare;
+ case 16:
+ resword = &wordlist[171];
+ goto compare;
+ case 17:
+ resword = &wordlist[172];
+ goto compare;
+ case 18:
+ resword = &wordlist[173];
+ goto compare;
+ case 27:
+ resword = &wordlist[174];
+ goto compare;
+ case 32:
+ resword = &wordlist[175];
+ goto compare;
+ case 33:
+ resword = &wordlist[176];
+ goto compare;
+ case 34:
+ resword = &wordlist[177];
+ goto compare;
+ case 39:
+ resword = &wordlist[178];
+ goto compare;
+ case 46:
+ resword = &wordlist[179];
+ goto compare;
+ case 52:
+ resword = &wordlist[180];
+ goto compare;
+ case 58:
+ resword = &wordlist[181];
+ goto compare;
+ }
+ }
+ else
+ {
+ switch (key - 400)
+ {
+ case 0:
+ resword = &wordlist[182];
+ goto compare;
+ case 6:
+ resword = &wordlist[183];
+ goto compare;
+ case 11:
+ resword = &wordlist[184];
+ goto compare;
+ case 15:
+ resword = &wordlist[185];
+ goto compare;
+ case 25:
+ resword = &wordlist[186];
+ goto compare;
+ case 26:
+ resword = &wordlist[187];
+ goto compare;
+ case 28:
+ resword = &wordlist[188];
+ goto compare;
+ case 30:
+ resword = &wordlist[189];
+ goto compare;
+ case 36:
+ resword = &wordlist[190];
+ goto compare;
+ case 41:
+ resword = &wordlist[191];
+ goto compare;
+ case 46:
+ resword = &wordlist[192];
+ goto compare;
+ case 67:
+ resword = &wordlist[193];
+ goto compare;
+ case 71:
+ resword = &wordlist[194];
+ goto compare;
+ case 80:
+ resword = &wordlist[195];
+ goto compare;
+ case 93:
+ resword = &wordlist[196];
+ goto compare;
+ case 94:
+ resword = &wordlist[197];
+ goto compare;
+ case 105:
+ resword = &wordlist[198];
+ goto compare;
+ case 106:
+ resword = &wordlist[199];
+ goto compare;
+ case 160:
+ resword = &wordlist[200];
+ goto compare;
+ case 174:
+ resword = &wordlist[201];
+ goto compare;
+ }
+ }
+ }
+ }
+ }
+ return 0;
+ compare:
+ {
+ register const char *s = resword->ldbl_name;
+
+ if (*str == *s && !strcmp (str + 1, s + 1))
+ return resword;
+ }
+ }
+ }
+ return 0;
+}
new file mode 100644
@@ -0,0 +1 @@
+#include <test-ieee128-dlfcn.c>
new file mode 100644
@@ -0,0 +1,41 @@
+/* Test IEEE128 ldbl wrappers for dl*sym work.
+ Copyright (C) 2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <https://www.gnu.org/licenses/>. */
+
+#include <dlfcn.h>
+#include <stdio.h>
+#include <string.h>
+
+static int
+do_test (void)
+{
+ void *sym = dlsym (RTLD_DEFAULT, "printf");
+ Dl_info info;
+ int is_printfieee128;
+
+ dladdr (sym, &info);
+ is_printfieee128 = strcmp (info.dli_sname, "__printfieee128");
+ printf ("dladdr (RTLD_DEFAULT, \"printf\") -> %s\n", info.dli_sname);
+
+#if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1
+ return is_printfieee128;
+#else
+ return !is_printfieee128;
+#endif
+}
+
+#include <support/test-driver.c>
new file mode 100755
@@ -0,0 +1,121 @@
+#!/usr/bin/python3
+# Produce gperf hash table input for dlsym mangling
+# Copyright (C) 2020 Free Software Foundation, Inc.
+# This file is part of the GNU C Library.
+#
+# The GNU C Library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
+#
+# The GNU C Library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with the GNU C Library; if not, see
+# <https://www.gnu.org/licenses/>.
+
+import re
+import argparse
+
+hash_header = """\
+%{
+
+/* Hash table lookup for ldbl == ieee128 symbols.
+ This is generated by unmange_ieee128_syms.py
+ Copyright (C) 2020 Free Software Foundation, Inc.
+ This file is part of the GNU C Library.
+
+ The GNU C Library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ The GNU C Library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, see
+ <http://www.gnu.org/licenses/>. */
+
+%}
+struct ldbl_ieee128 { const char *ldbl_name; const char *ieee128_name; };
+%%
+"""
+
+"""These symbols map many to one. These are added unconditionally."""
+static_mangles = {
+ "dreml": "__remainderieee128",
+ "gammal": "__lgammaieee128"
+}
+
+"""Non-standard manglings we must handle case by case."""
+weird_unmangles = {
+ "nexttoward_to_ieee128": "nexttoward",
+ "nexttowardf_to_ieee128": "nexttowardf"
+}
+
+def unmangle_libc(func):
+ """libc (and libdl) symbols which are otherwise unsuffixed by ieee128."""
+ return re.sub("ieee128", "", func);
+
+def unmangle_libm(func):
+ """Math symbols which transform via trivial suffice replacement."""
+ return re.sub("ieee128", "l", func);
+
+def is_libc_sym(func):
+ """Symbols in libc append the ieee128 suffix without replacing one."""
+ return re.match("(.*printf.*)|(.*scanf.*)|(.*err.*)|(.*sys.*)|(.*warn.*)" +
+ "|(.*strfmon.*)|(.*argp.*)|(.*dlv?sym.*)", func)
+
+def blacklist(func):
+ """Symbols which should not be un-mangled."""
+ return re.match(".*isoc99.*", func)
+
+def main():
+ """
+ Read the local Versions symbol, and unmangle any
+ any IEEE128 redirect symbols.
+ """
+
+ parser = argparse.ArgumentParser(
+ description='Generate mangling gperf input ldbl redirects with dlsym/.')
+ parser.add_argument('--input', metavar='VERSIONS_FILE', required=True,
+ help='Versions file to parse')
+ parser.add_argument('--output', metavar='GPERF_FILE', required=True,
+ help='Output file to place hash')
+ args = parser.parse_args()
+
+ syms = []
+ mangles = static_mangles
+
+ # Slurp up all symbols. We don't really care
+ # which library they belong to. Strip the
+ # leading __ from the name too.
+ with open(args.input, 'r') as ver_file:
+ for line in ver_file:
+ m = re.match(r"[\t ]+__(.*);", line)
+ if m:
+ syms.append(m.group(1))
+
+ for s in syms:
+ if blacklist(s):
+ continue
+ elif s in weird_unmangles:
+ mangles[weird_unmangles[s]] = "__" + s
+ elif is_libc_sym(s):
+ mangles[unmangle_libc(s)] = "__" + s
+ else:
+ mangles[unmangle_libm(s)] = "__" + s
+
+ with open(args.output, 'w') as output_file:
+ output_file.write(hash_header)
+ for m in sorted(mangles.keys()):
+ output_file.write("%s, \"%s\"\n" % (m, mangles[m]))
+
+if __name__ == '__main__':
+ main()