Looks like our maplower is badly broken, here is a part of the dump of both (notice that maplower contains lowercase chars, which it should have capital ones, and mappings doesn't exist):
printf("magic=%s encoding=%s\n", _CurrentRuneLocale->__magic,
_CurrentRuneLocale->__encoding);
rr = &_CurrentRuneLocale->__maplower_ext;
base = rr->__ranges;
printf("maplower: ranges=%d\n", rr->__nranges);
for (lim = 0; lim != rr->__nranges; lim++) {
re = base + lim;
printf("range=%d rangelen=%d chars=%lc-%lc -> maps=%lc-%lc\n",
(int)lim, (int)(re->__max - re->__min + 1),
re->__min, re->__max, re->__map,
re->__map + re->__max - re->__min);
}
printf("\n");
rr = &_CurrentRuneLocale->__mapupper_ext;
base = rr->__ranges;
printf("mapupper: ranges=%d\n", rr->__nranges);
for (lim = 0; lim != rr->__nranges; lim++) {
re = base + lim;
printf("range=%d rangelen=%d chars=%lc-%lc -> maps=%lc-%lc\n",
(int)lim, (int)(re->__max - re->__min + 1),
re->__min, re->__max, re->__map,
re->__map + re->__max - re->__min);
}
printf("\n");
added to lib/libc/port/locale/towlower.c
Illumos:
magic=RuneMagiUTF-8 encoding=UTF-8
maplower: ranges=393
range=0 rangelen=1 chars=ā-ā -> maps=^@-^@
range=1 rangelen=1 chars=ă-ă -> maps=^@-^@
range=2 rangelen=1 chars=ą-ą -> maps=^@-^@
range=3 rangelen=1 chars=ć-ć -> maps=^@-^@
range=4 rangelen=1 chars=ĉ-ĉ -> maps=^@-^@
range=5 rangelen=1 chars=ċ-ċ -> maps=^@-^@
range=6 rangelen=1 chars=č-č -> maps=^@-^@
range=7 rangelen=1 chars=ď-ď -> maps=^@-^@
range=8 rangelen=1 chars=đ-đ -> maps=^@-^@
range=9 rangelen=1 chars=ē-ē -> maps=^@-^@
range=10 rangelen=1 chars=ĕ-ĕ -> maps=^@-^@
...
mapupper: ranges=351
range=0 rangelen=1 chars=ā-ā -> maps=Ā-Ā
range=1 rangelen=1 chars=ă-ă -> maps=Ă-Ă
range=2 rangelen=1 chars=ą-ą -> maps=Ą-Ą
range=3 rangelen=1 chars=ć-ć -> maps=Ć-Ć
range=4 rangelen=1 chars=ĉ-ĉ -> maps=Ĉ-Ĉ
range=5 rangelen=1 chars=ċ-ċ -> maps=Ċ-Ċ
range=6 rangelen=1 chars=č-č -> maps=Č-Č
range=7 rangelen=1 chars=ď-ď -> maps=Ď-Ď
range=8 rangelen=1 chars=đ-đ -> maps=Đ-Đ
range=9 rangelen=1 chars=ē-ē -> maps=Ē-Ē
range=10 rangelen=1 chars=ĕ-ĕ -> maps=Ĕ-Ĕ
...
FreeBSD (useful, as our code is mostly identical for this stuff):
magic=RuneMagiUTF-8 encoding=UTF-8
maplower: ranges=410
range=0 rangelen=1 chars=Ā-Ā -> maps=ā-ā
range=1 rangelen=1 chars=Ă-Ă -> maps=ă-ă
range=2 rangelen=1 chars=Ą-Ą -> maps=ą-ą
range=3 rangelen=1 chars=Ć-Ć -> maps=ć-ć
range=4 rangelen=1 chars=Ĉ-Ĉ -> maps=ĉ-ĉ
range=5 rangelen=1 chars=Ċ-Ċ -> maps=ċ-ċ
range=6 rangelen=1 chars=Č-Č -> maps=č-č
range=7 rangelen=1 chars=Ď-Ď -> maps=ď-ď
range=8 rangelen=1 chars=Đ-Đ -> maps=đ-đ
range=9 rangelen=1 chars=Ē-Ē -> maps=ē-ē
range=10 rangelen=1 chars=Ĕ-Ĕ -> maps=ĕ-ĕ
...
mapupper: ranges=418
range=0 rangelen=1 chars=ā-ā -> maps=Ā-Ā
range=1 rangelen=1 chars=ă-ă -> maps=Ă-Ă
range=2 rangelen=1 chars=ą-ą -> maps=Ą-Ą
range=3 rangelen=1 chars=ć-ć -> maps=Ć-Ć
range=4 rangelen=1 chars=ĉ-ĉ -> maps=Ĉ-Ĉ
range=5 rangelen=1 chars=ċ-ċ -> maps=Ċ-Ċ
range=6 rangelen=1 chars=č-č -> maps=Č-Č
range=7 rangelen=1 chars=ď-ď -> maps=Ď-Ď
range=8 rangelen=1 chars=đ-đ -> maps=Đ-Đ
range=9 rangelen=1 chars=ē-ē -> maps=Ē-Ē
range=10 rangelen=1 chars=ĕ-ĕ -> maps=Ĕ-Ĕ
...