LLVM-CXXFILT(1)
π LLVM-CXXFILT(1) β bestie's guide to the LLVM symbol name demangler π
ok so real talk, this is the llvm-cxxfilt page from the LLVM manual set, and it's genuinely one of the most useful little tools ever. let's get into it π
β¨ NAME β¨
llvm-cxxfilt β the LLVM symbol name demangler, aka the thing that turns cursed mangled goo back into readable C++ π«Ά
πΈ SYNOPSIS πΈ
llvm-cxxfilt [options] [mangled names...]
π¦ DESCRIPTION π¦
okay so llvm-cxxfilt is a symbol demangler, and here's the slay part: you can literally use it as a drop-in replacement for the GNU c++filt tool. iconic behavior honestly π
give it a series of symbol names and it prints their demangled form on the standard output stream. and if a name can't be demangled? no stress, no drama β it just gets printed as is. it's giving "no thoughts, just pass through" π
and if you don't pass any names on the command-line at all, it reads names interactively from the standard input stream. but wait β when it's reading from standard input, there's a whole little algorithm going on: each input line gets split on characters that are not part of valid Itanium name manglings, i.e. characters that are not alphanumeric, ., $, or _. and the separators between names get copied to the output as is, so your formatting stays intact. the way it just preserves your vibes ππ
π₯ EXAMPLE π₯
like, look at this, it works exactly like you'd hope:
$ 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 came out the other side completely untouched? and all those *** separators stayed put? that's the whole point bestie, it ate and left no crumbs π
π§ OPTIONS π§
--format=<value>,-sβ which mangling scheme to assume. valid values areauto(the default β it auto-detects the style for you, very main character of it) andgnu(assume GNU/Itanium style). pick your fighter π«--help,-hβ prints a summary of the command line options. classic, reliable, always there for you π«Ά--no-params,-pβ do not demangle function parameters or return types. so you get the bare name and that's it βοΈ--no-strip-underscore,-nβ do not strip a leading underscore. heads up: this is the default for all platforms, so it's already doing this unless you say otherwise π--quoteβ adds""around demangled names. and no double-dipping: it does not quote names that are already quoted π¬--strip-underscore,-_β strips a single leading underscore (if there is one) from each input name before demangling. note the option itself is literally an underscore, yes really π--types,-tβ attempts to demangle names as type names as well as symbol names. equal opportunity demangling π--versionβ displays the version of thellvm-cxxfiltexecutable. for the girlies who need to know exactly what they're running β@<FILE>β reads command-line options from the response file<FILE>. cute little options-in-a-file situation π
π EXIT STATUS π
llvm-cxxfilt returns 0 unless it encounters a usage error β in which case you get a non-zero exit code. lowkey fair tbh. don't misuse the tool and it won't be shady back β¨
π SEE ALSO π
llvm-nm(1)<llvm-nm.html>
go read that one next, iykyk π
π«Ά Author π«Ά
Maintained by the LLVM Team (https://llvm.org/). we stan a whole team keeping this thing alive π
π Copyright π
2003-2026, LLVM Project
and that's the page!! ngl this one is a little legend β page 23, dated 2026-10-20, and it's the LLVM-CXXFILT(1) manual page through and through. go demangle something cursed, bestie, you've got this πΈπ¦π
π¦ where this page comes from
- arch rolling: llvm 23.1.4-1 Β· Apache-2.0 WITH LLVM-exception
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms