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 可以是 sysvposixdarwinbsdjust-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)