This is an archive of the discontinued LLVM Phabricator instance.

Limit dyld image suffixes guessed by guessLibraryShortName()
ClosedPublic

Authored by mtrent on Jan 20 2019, 10:47 AM.

Details

Summary

guessLibraryShortName() separates a full Mach-O dylib install name path
into a short name and a dyld image suffix. The short name is the name
of the dylib without its path or extension. The dyld image suffix is a
string used by dyld to load variants of dylibs if available at runtime;
for example, "when binding this process, load 'debug' variants of all
required dylibs." dyld knows exactly what the image suffix is, but
by convention diagnostic tools such as llvm-nm attempt to guess suffix
names by looking at the install name path.

These dyld image suffixes are separated from the short name by a '_'
character. Because the '_' character is commonly used to separate words
in filenames guessLibraryShortName() cannot reliably separate a dylib's
short name from an arbitrary image suffix; imagine if both the short
name and the suffix contains an '_' character! To better deal with this
ambiguity, guessLibraryShortName() will recognize only "_debug" and
"_profile" as valid Suffix values. Calling code needs to be tolerant of
guessLibraryShortName() guessing incorrectly.

The previous implementation of guessLibraryShortName() did not allow
'_' characters to appear in short names. When present, the short name
would be truncated, e.g., "libcompiler_rt" => "libcompiler". This
change allows "libcompiler_rt" and "libcompiler_rt_debug" to both be
recognized as "libcompiler_rt".

rdar://47412244

Diff Detail

Repository
rL LLVM

Event Timeline

mtrent created this revision.Jan 20 2019, 10:47 AM
pete accepted this revision.Jan 22 2019, 9:51 AM

LGTM

This revision is now accepted and ready to land.Jan 22 2019, 9:51 AM
This revision was automatically updated to reflect the committed changes.