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)
Tue, Apr 9, 11:58 AM
Unknown Object (File)
Thu, Apr 4, 12:46 PM
Unknown Object (File)
Tue, Apr 2, 9:00 AM
Unknown Object (File)
Sun, Mar 31, 4:19 AM
Unknown Object (File)
Sat, Mar 30, 4:21 AM
Unknown Object (File)
Sat, Mar 30, 3:41 AM
Unknown Object (File)
Mar 11 2024, 5:52 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

Repository
rS FreeBSD src repository - subversion
Lint
Lint Not Applicable
Unit
Tests Not Applicable

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.