LLVM-TLI-CHECKER(1)

πŸ’… LLVM-TLI-CHECKER(1) β€” the LLVM manual, bestie edition ✨

okay so picture this: it's llvm-tli-checker, and it's literally the vibe check between what TargetLibraryInfo thinks is out there and what your library files actually ship. πŸŽ€ That's the whole manual name folded in right there β€” we're in the LLVM fam, and this page is your group chat briefing. 🫢


✨ NAME ✨

llvm-tli-checker β€” the TargetLibraryInfo vs library checker, aka the little snitch that catches TLI when it's lying πŸ’€


🌸 SYNOPSIS 🌸

llvm-tli-checker [options] [library-file...]

πŸ¦‹ DESCRIPTION πŸ¦‹

okay so here's the tea πŸ“: llvm-tli-checker takes TargetLibraryInfo's opinion about whether library functions are available and compares it against the actual set of functions exported by the library files you specified. Then it reports, very loudly, any disagreements between TLI's opinion and whether the function is actually there. No cap. πŸ‘‘

This is lowkey a vendor thing β€” it's primarily useful for vendors to make sure the TLI for their target is correct, so the compiler doesn't "optimize" some code sequence into a library call that is genuinely not actually available. Imagine the compiler manifesting a function that doesn't exist. Not on our watch. 😭


πŸ”₯ EXAMPLE πŸ”₯

$ llvm-tli-checker --triple x86_64-scei-ps4 example.so
TLI knows 466 symbols, 235 available for 'x86_64-scei-ps4'

Looking for symbols in 'example.so'
Found 235 global function symbols in 'example.so'
Found a grand total of 235 library symbols
<< TLI yes SDK no:  '_ZdaPv' aka operator delete[](void*)
>> TLI no  SDK yes: '_ZdaPvj' aka operator delete[](void*, unsigned int)
<< Total TLI yes SDK no:  1
>> Total TLI no  SDK yes: 1
== Total TLI yes SDK yes: 234
FAIL: LLVM TLI doesn't match SDK libraries.

it's giving receipts. the << lines are TLI saying "yes bestie it's available" while the SDK says nope, and the >> lines are the reverse. iconic little arrows, honestly. 🧚


πŸ’… OPTIONS πŸ’…

  • --dump-tli β€” prints "available"/"not available" for each library function, according to TargetLibraryInfo's information for the specified triple, and then it exits. heads up: this option does not read any input files. it just dumps and dips. πŸ™ˆ
  • --help, -h β€” prints a summary of command line options and exits. the classic. πŸ’–
  • --libdir=<directory> β€” a base directory that gets prepended to each library file path. this is handy (highkey) when there are a number of library files all in the same directory, or when a list of input filenames are kept in a response file. πŸŽ€
  • --report=<level> β€” the amount of information to report. <level> can be summary, discrepancy, or full. a summary report gives only the count of matching and mis-matching symbols; discrepancy lists the mis-matching symbols; and full lists all symbols known to TLI, matching or mis-matching. the default is discrepancy. pick your fighter ✨
  • --separate β€” reads and reports a summary for each library file separately. this can be useful to identify library files that don't contribute anything that TLI knows about. implies --report=summary (can be overridden). so it's a default, not a cage πŸ’€
  • --triple=<triple> β€” the triple to use for initializing TargetLibraryInfo. manifest your target 🌈
  • @<FILE> β€” read command-line options and/or library names from response file <FILE>. say less, the file speaks for you 🫢

⭐ EXIT STATUS ⭐

llvm-tli-checker returns 0 even if there are mismatches. yes, even then. it's very chill about that. 😌 it returns a non-zero exit code if there is an unrecognized option, or if no input files are provided. so it only gets mad about vibes it can't parse or an empty hand-off. πŸ‘‘


🌟 Author 🌟

Maintained by the LLVM Team (https://llvm.org/).

2003-2026, LLVM Project


and that's the whole page, bestie β€” shoutout to the source/version 15 and the date 2026-09-09 from the LLVM-TLI-CHECKER(1) footer, signing off with a periodt. πŸ’œπŸ¦‹βœ¨

πŸ“¦ where this page comes from