llvm-cxxmap - 符号修饰名重映射工具

概要

llvm-cxxmap [选项] symbol-file-1 symbol-file-2

描述

llvm-cxxmap 工具基于一个描述应被视为等效的名称组件的文件,执行 C++ 符号修饰名的模糊匹配。

符号文件应包含 C++ 符号修饰名列表(每行一个)。空行和以 # 开头的行将被忽略。输出是一个等效符号对的列表,每行一对,格式如下

<symbol-1> <symbol-2>

其中 <symbol-1> 是来自 symbol-file-1 的符号,<symbol-2> 是来自 symbol-file-2 的符号。两个符号相同的映射将被省略。

选项

-remapping-file=文件, -r=文件

指定一个文件,其中包含用于确定两个符号是否等效的等效规则列表。必需。参见 重映射文件

-output=文件, -o=文件

指定一个文件,用于写入匹配名称的列表。如果未指定,列表将写入标准输出。

-Wambiguous

如果 symbol-file-2 中存在多个等效(但不同的)符号,则生成警告。

-Wincomplete

如果 symbol-file-1 包含在 symbol-file-2 中没有等效符号的符号,则生成警告。

重映射文件

重映射文件是一个文本文件,包含以下形式的行

fragmentkind fragment1 fragment2

其中 fragmentkindnametypeencoding 之一,指示以下符号修饰名片段分别是 <name>、<type> 或 <encoding>。空行和以 # 开头的行将被忽略。

未修饰的 C 名称可以表示为 encoding,它是一个(长度前缀的) <source-name>

# C function "void foo_bar()" is remapped to C++ function "void foo::bar()".
encoding 7foo_bar _Z3foo3barv

为了方便起见,内置的 <substitution>,例如 StSs,被接受为 <name>(即使它们在技术上不是 <name>)。

例如,要指定应将 absl::string_viewstd::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 修饰方案的 C++ 符号修饰名。这涵盖了 Clang 支持的所有 C++ 目标,Windows 目标除外。