llvm-nm - 列出 LLVM bitcode 和目标文件的符号表¶
概要¶
llvm-nm [选项] [文件名…]
描述¶
llvm-nm 实用程序列出 LLVM bitcode 文件、目标文件和归档文件中的符号名称。每个符号都与其来源的一些简单信息一起列出。如果未指定文件名,则使用 a.out 作为输入。如果使用 - 作为文件名,llvm-nm 将从其标准输入流中读取文件。
llvm-nm 的默认输出格式是传统的 BSD nm 输出格式。每个这样的输出记录都包含一个(可选的)8 位十六进制地址,后跟一个类型代码字符,再后跟一个名称,用于每个符号。每行打印一个记录;字段用空格分隔。当地址被省略时,它会被 8 个空格替换。
支持的类型代码字符如下。如果为同一含义列出了大小写字符,则小写字符表示本地符号,而大写字符表示全局(外部)符号
a, A
绝对符号。
b, B
未初始化数据 (bss) 对象。
C
公共符号。多个定义链接在一起形成一个定义。
d, D
可写数据对象。
i, I
COFF: .idata 符号或具有 IMAGE_SCN_LNK_INFO 设置的节中的符号。
n
ELF: 来自非分配节的本地符号。
COFF: 调试符号。
N
ELF: 调试节符号,或来自非分配节的全局符号。
s, S
COFF: 节符号。
Mach-O: 绝对符号或来自除 __TEXT_EXEC __text, __TEXT __text, __DATA __data 或 __DATA __bss 之外的节的符号。
r, R
只读数据对象。
t, T
代码(文本)对象。
u
ELF: GNU 唯一符号。
U
命名对象在此文件中未定义。
v
ELF: 未定义的弱对象。如果未定义该对象,则不是链接失败。
V
ELF: 定义的弱对象符号。仅当链接中不存在常规定义时,才会使用此定义。如果存在多个弱定义且没有常规定义,则将使用其中一个弱定义。
w
未定义的弱符号,而不是 ELF 对象符号。如果未定义该符号,则不是链接失败。
W
定义的弱符号,而不是 ELF 对象符号。仅当链接中不存在常规定义时,才会使用此定义。如果存在多个弱定义且没有常规定义,则将使用其中一个弱定义。
-
Mach-O: N_STAB 符号。
?
无法识别的东西。
由于 LLVM bitcode 文件通常包含在链接到可执行映像或动态编译“即时”之前不被认为具有地址的对象,因此 llvm-nm 不会为 LLVM bitcode 文件中的任何符号打印地址,即使是 bitcode 文件中定义的符号也是如此。
选项¶
- -B¶
使用 BSD 输出格式。
--format=bsd
的别名。
- -X¶
指定 llvm-nm 应检查的命令行或归档文件中的 XCOFF 目标文件、ELF 目标文件或 IR 目标文件输入的类型。模式必须是以下之一
- 32
仅处理 32 位目标文件。
- 64
仅处理 64 位目标文件。
- 32_64
同时处理 32 位和 64 位目标文件。
- any
处理所有支持的目标文件。
在 AIX OS 上,默认设置为仅处理 32 位目标文件并忽略 64 位对象。可以通过设置 OBJECT_MODE 环境变量来更改此设置。例如,OBJECT_MODE=64 会导致 llvm-nm 处理 64 位对象并忽略 32 位对象。-X 标志会覆盖 OBJECT_MODE 变量。
在其他操作系统上,默认设置为处理所有目标文件:不支持 OBJECT_MODE 环境变量。
- --debug-syms, -a¶
显示所有符号,即使是通常被抑制的符号。
- --defined-only, -U¶
仅打印此文件中定义的符号。
- --demangle, -C¶
反修饰符号名称。
- --dynamic, -D¶
显示动态符号而不是普通符号。
- --export-symbols¶
打印排序后的符号及其可见性(如果适用),并删除重复项。
- --extern-only, -g¶
仅打印定义为外部的符号;即,可以从其他文件访问的符号。
- --format=<format>, -f¶
选择输出格式;format 可以是 sysv、posix、darwin、bsd 或 just-symbols。默认值为 bsd。
- --help, -h¶
打印命令行选项及其含义的摘要。
- -j¶
仅打印符号名称。
–format=just-symbols
的别名。
- --line-numbers, -l¶
使用调试信息打印符号定义所在的文件名和行号。未定义符号会打印其首次重定位的位置。
- -m¶
使用 Darwin 格式。
--format=darwin
的别名。
- --no-demangle¶
不反修饰符号名称。这是默认设置。
- --no-llvm-bc¶
禁用 LLVM bitcode 读取器。
- --no-sort, -p¶
按遇到的顺序显示符号。
- --no-weak, -W¶
不打印弱符号。
- --numeric-sort, -n, -v¶
按地址对符号进行排序。
- --portability, -P¶
使用 POSIX.2 输出格式。
--format=posix
的别名。
- --print-armap¶
除了符号之外,还打印归档符号表。
- --print-file-name, -A, -o¶
在每个符号前面加上它来自的文件名。
- --print-size, -S¶
显示符号大小以及地址(不适用于 Mach-O)。
- --quiet¶
抑制“无符号”诊断信息。
- --radix=<RADIX>, -t¶
指定符号地址的基数。接受的值为 d(十进制)、x(十六进制)和 o(八进制)。
- --reverse-sort, -r¶
以相反的顺序对符号进行排序。
- --size-sort¶
按大小对符号进行排序。
- --special-syms¶
不从输出中过滤特殊符号。
- --undefined-only, -u¶
仅打印未定义的符号。
- --version, -V¶
显示 llvm-nm 可执行文件的版本,然后退出。不与其他命令堆叠。
- @<FILE>¶
从响应文件 <FILE> 读取命令行选项。
MACH-O 特定选项¶
- --add-dyldinfo¶
从 dyldinfo 添加符号,如果它们尚未在符号表中。这是默认设置。
- --add-inlinedinfo¶
从内联库添加符号,仅限 TBD 文件输入。
- --arch=<arch1[,arch2,...]>¶
转储指定架构的符号。
- --dyldinfo-only¶
仅转储来自 dyldinfo 的符号。
- --no-dyldinfo¶
不从 dyldinfo 添加任何符号。
- -s <segment> <section>¶
仅转储来自此段和节名称的符号。
- -x¶
以十六进制打印符号条目。
XCOFF 特定选项¶
- --no-rsrc¶
从导出符号列表中排除资源文件符号 (
__rsrc
)。
BUG¶
llvm-nm 不支持 GNU nm 的完整参数集。
退出状态¶
llvm-nm 以零退出代码退出。
另请参阅¶
llvm-ar(1), llvm-objdump(1), llvm-readelf(1), llvm-readobj(1)