LLVM-CXXFILT(1)
π llvm-cxxfilt β bestie's guide to un-mangling names
okay so. this is a page from the LLVM manual collection, section 1, and it's about a lil tool called llvm-cxxfilt. the symbol name demangler. yes queen, we're decoding the cursed glyph soup today. β¨
π NAME π
llvm-cxxfilt β the LLVM symbol name demangler. it takes names that look like a cat walked across the keyboard and turns them back into human words. iykyk π
πΈ SYNOPSIS πΈ
llvm-cxxfilt [options] [mangled names...]
π¦ DESCRIPTION π¦
so llvm-cxxfilt is a symbol demangler, and the whole point is that you can use it as a drop-in replacement for the GNU c++filt tool. it takes a series of symbol names and prints their demangled form on the standard output stream. that's it, that's the job. π
and if a name can't be demangled? it just prints it as-is. no drama, no error, no nothing. it simply vibes. π«Ά
if you don't specify any names on the command-line, then names get read interactively from the standard input stream instead. and here's the tea when you're reading from stdin: every input line gets split on characters that are not part of valid Itanium name manglings β meaning characters that are not alphanumeric, not '.', not '$', and not '_'. and the separators between names? those get copied to the output exactly as-is. lowkey elegant. β¨
π EXAMPLE π
like, look at her go:
$ llvm-cxxfilt _Z3foov _Z3bari not_mangled
foo()
bar(int)
not_mangled
$ cat input.txt
| _Z3foov *** _Z3bari *** not_mangled |
$ llvm-cxxfilt < input.txt
| foo() *** bar(int) *** not_mangled |
see how not_mangled just walked through untouched? and the *** separators stayed put? that's the vibe check passing. β
β¨ OPTIONS β¨
here's every single flag, no skips, no skimming, we do not gatekeep here:
--format=<value>,-sβ the mangling scheme to assume. valid values areauto(which is the default, and it auto-detects the style) andgnu(which assumes GNU/Itanium style). pick your fighter. π₯--help,-hβ prints a summary of the command line options. bestie behavior fr fr.--no-params,-pβ do not demangle function parameters or return types. just the name, none of the extra. π--no-strip-underscore,-nβ do not strip a leading underscore. and heads up: this is the default for all platforms except Mach-O based hosts. so it's the opposite of the next one.--quoteβ adds" "around demangled names. and it does not quote names that are already quoted, because that would be chaotic. π--strip-underscore,-_β strips a single leading underscore, if there is one, from each input name before demangling. and this one is on by default on Mach-O based platforms. βοΈ--types,-tβ attempts to demangle names as type names as well as symbol names. ambitious. we love her.--versionβ displays the version of thellvm-cxxfiltexecutable. the "who even am i" option. π@<FILE>β reads command-line options from response file<FILE>. yes, a file full of flags. iconic.
π EXIT STATUS π
llvm-cxxfilt returns 0 unless it hits a usage error β and in that case, a non-zero exit code gets returned. so if the number is big, something went sideways. π
π₯ SEE ALSO π₯
llvm-nm(1)β go read that one too, bestie. π
π AUTHOR π
maintained by the LLVM Team (https://llvm.org/). they're the ones keeping this whole thing alive. π«‘
π§ COPYRIGHT π§
2003-2025, LLVM Project β yes, that's two decades plus of demangling. periodt.
okay so that's the whole page!! this came out of the LLVM project, and this particular page is dated 2025-09-03. mwah, go demangle something cursed, bestie πβ¨πΈ
π¦ where this page comes from
- fedora 43: llvm20 20.1.8-2.fc43 Β· Apache-2.0 WITH LLVM-exception OR NCSA
- fedora 43: llvm20 20.1.8-2.fc43 Β· Apache-2.0 WITH LLVM-exception OR NCSA
- fedora 44: llvm20 20.1.8-2.fc44 Β· Apache-2.0 WITH LLVM-exception OR NCSA
- fedora 44: llvm20 20.1.8-2.fc44 Β· Apache-2.0 WITH LLVM-exception OR NCSA
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms