Page MenuHomeFreeBSD

libc: Do not refer to _DefaultRuneLocale in ctype inlines.
ClosedPublic

Authored by jilles on Apr 11 2017, 9:48 PM.
Tags
None
Referenced Files
Unknown Object (File)
Thu, Apr 25, 4:44 PM
Unknown Object (File)
Apr 9 2024, 11:58 AM
Unknown Object (File)
Apr 4 2024, 12:46 PM
Unknown Object (File)
Apr 2 2024, 9:00 AM
Unknown Object (File)
Mar 31 2024, 4:19 AM
Unknown Object (File)
Mar 30 2024, 4:21 AM
Unknown Object (File)
Mar 30 2024, 3:41 AM
Unknown Object (File)
Mar 11 2024, 5:52 AM

Details

Summary

Referring to _DefaultRuneLocale causes this >4KB structure to be copied to
all executables that use <ctype.h> inlines (except PIE executables).

This only affects the case where thread local storage is available.

Reading the lib/libc/locale code, it seems like _CurrentRuneLocale cannot be
NULL (since the non-TLS __getCurrentRuneLocale() and other places use struct
xlocale_ctype.runes without checking), so the check can be removed entirely.
If this reading is incorrect, it seems best to add a check to the assignment
of _CurrentRuneLocale in lib/libc/locale/setrunelocale.c.

Test Plan

installworld in a VM and kyua test of bin, usr.bin and lib/libc.

Diff Detail

Event Timeline

Found some other bugs while reading this code too!

This revision is now accepted and ready to land.Sep 22 2017, 9:30 AM

This probably means that we no longer need to expose _DefaultRuneLocale in the header.

This probably means that we no longer need to expose _DefaultRuneLocale in the header.

libc++ (contrib/libc++/src/locale.cpp) uses _DefaultRuneLocale, so it should remain available for now.

The __isctype inline in include/_ctype.h also refers to _DefaultRuneLocale, but it is not used.

This revision was automatically updated to reflect the committed changes.