llvm-cxxmap - mangled 名称重映射工具

概要

llvm-cxxmap [选项] 符号文件 1 符号文件 2

描述

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

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

<symbol-1> <symbol-2>

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

选项

-remapping-file=file, -r=file

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

-output=file, -o=file

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

-Wambiguous

如果 符号文件 2 中存在多个等效(但不同)的符号,则发出警告。

-Wincomplete

如果 符号文件 1 包含一个在 符号文件 2 中没有等效符号的符号,则发出警告。

重映射文件

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

fragmentkind fragment1 fragment2

其中 fragmentkindnametypeencoding 之一,分别表示以下 mangled 名称片段是 <名称>、<类型> 还是 <编码>。空行和以 # 开头的行将被忽略。

未经 mangled 的 C 名称可以表示为一个 encoding,它是一个(长度前缀)<源名称>

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

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

例如,要指定 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 mangled 方案的 C++ mangled 名称。这涵盖了 Clang 支持的所有 C++ 目标,除了 Windows 目标。