llvm-cxxmap - mangled 名称重映射工具¶
概要¶
llvm-cxxmap [选项] 符号文件 1 符号文件 2
描述¶
llvm-cxxmap 工具基于描述应被视为等效的名称组件的文件,执行 C++ mangled 名称的模糊匹配。
符号文件应包含 C++ mangled 名称列表(每行一个)。空行和以 #
开头的行将被忽略。输出是以等效符号对的形式组成的列表,每行一个,格式如下:
<symbol-1> <symbol-2>
其中 <symbol-1>
来自 符号文件 1,<symbol-2>
来自 符号文件 2。两个符号相同的映射将被省略。
选项¶
- -output=file, -o=file¶
指定一个文件,用于写入匹配的名称列表。如果未指定,则列表将写入标准输出。
- -Wambiguous¶
如果 符号文件 2 中存在多个等效(但不同)的符号,则发出警告。
- -Wincomplete¶
如果 符号文件 1 包含一个在 符号文件 2 中没有等效符号的符号,则发出警告。
重映射文件¶
重映射文件是一个文本文件,其中包含以下形式的行:
fragmentkind fragment1 fragment2
其中 fragmentkind
为 name
、type
或 encoding
之一,分别表示以下 mangled 名称片段是 <名称>、<类型> 还是 <编码>。空行和以 #
开头的行将被忽略。
未经 mangled 的 C 名称可以表示为一个 encoding
,它是一个(长度前缀)<源名称>
# C function "void foo_bar()" is remapped to C++ function "void foo::bar()".
encoding 7foo_bar _Z3foo3barv
为了方便起见,内置的 <替换>(如 St
和 Ss
)被接受为 <名称>(即使在技术上它们不是 <名称>)。
例如,要指定 absl::string_view
和 std::string_view
应被视为等效,可以使用以下重映射文件:
# absl::string_view is considered equivalent to std::string_view
type N4absl11string_viewE St17basic_string_viewIcSt11char_traitsIcEE
# std:: might be std::__1:: in libc++ or std::__cxx11:: in libstdc++
name St St3__1
name St St7__cxx11
注意
符号重映射目前仅支持遵循 Itanium C++ ABI mangled 方案的 C++ mangled 名称。这涵盖了 Clang 支持的所有 C++ 目标,除了 Windows 目标。