【ARM 嵌入式 编译系列 10.9.1 -- llvm-size -B 与 llvm-readelf -S 区别】

文章目录

  • Overview
    • [1. 两个工具作用不同](#1. 两个工具作用不同)
    • [2. 为什么会出现 size 有 data,而 readelf 没有 .data](#2. 为什么会出现 size 有 data,而 readelf 没有 .data)
    • [3. 怎么验证](#3. 怎么验证)
    • 总结

Overview

在 使用 llvm-size -B 和 llvm-readelf -S 分别对 elf 文件进行作用,但是一个输出是有data 段的数据的,一个输出却显示没有data 段数据,这里主要是记录下 为什么 llvm-size -B 能看到 .data 段大小,而 llvm-readelf -S 可能显示没有 .data 段。

1. 两个工具作用不同

  • llvm-size -B

    统计 ELF 中的段大小,显示结果是 合并统计值:

    • .text 段归到 text 列

    • .data 段归到 data 列

    • .bss 段归到 bss 列

它不管段是否真的叫 .data,只要是 可写+初始化的段 ,都会合并到 data 列里。

  • llvm-readelf -S
    打印 ELF 文件段表 (Section Header Table) ,直接显示 ELF 里定义的段名字。
    如果 ELF 里没有显式的 .data 段(比如优化、链接脚本合并到了别的段),那么 llvm-readelf -S 就不会显示 .data。

2. 为什么会出现 size 有 data,而 readelf 没有 .data

可能有几种情况:

  1. 链接脚本把 .data 合并到了别的段

    例如链接脚本里写了:

    ld 复制代码
    .mydata : {
        *(.data)
        *(.sdata)
    }

    那么 .data 就不再单独存在,而是放进 .mydata 段里。
    llvm-size 依旧会把它算到 data 区域,而 llvm-readelf -S 就不会看到 .data 了。

  2. 编译优化没生成 .data

    如果你的代码里没有 已初始化的全局/静态变量 ,那么 .data 段可能不会生成。
    llvm-size 此时显示 data = 0,readelf 也可能直接没有 .data 段。

  3. 不同工具对"data"的定义不同
    llvm-size 并不是单纯看段名叫 .data,而是看它是否是 分配在内存里且可写的已初始化段 。所以即便 ELF 段名是 .fw_data_table 或 .sdata,也会被统计到 data 里。

3. 怎么验证

你可以这样对比:

bash 复制代码
llvm-size -B demo.elf
llvm-readelf -S demo.elf | grep -E '\.data|\.sdata|\.mydata|\.rodata'

再用:

bash 复制代码
llvm-nm -S demo.elf | grep ' D '

这里 D 表示符号在 data 段。

总结

  • llvm-size -B → 逻辑分类(text/data/bss 总览)

  • llvm-readelf -S → 实际段名(受链接脚本影响)

  • 所以出现 一个有 data,一个没有 .data 段名 的情况是正常的,主要原因在于 链接脚本或段合并。

相关推荐
myy-learn1 天前
ARM-I2C 驱动优化与 LM75 温度传感器读取实践
arm开发·单片机·嵌入式硬件
kkkkkkkkkk_Z1 天前
新手自学嵌入式 | 学习日记:ARM内核启动代码、时钟系统(PLL/Prescaler/PFD)与IMX6ULL时钟配置
arm开发·学习
Tronlong创龙1 天前
IoTGateway可以让网关开发速度快一倍?
arm开发·嵌入式开发·硬件开发·工业控制·工业开发板
陌上花开缓缓归以2 天前
系统启动失败纪要
arm开发
我是场2 天前
我的NPI项目之-Touch的EE特性
android·arm开发
陌上花开缓缓归以3 天前
arm linux ddr 内存布局
linux·arm开发
女神下凡3 天前
芯参谋(43):DDR4_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范
晚枫歌F3 天前
DPDK原理以及解析tcp/udp协议包
arm开发
szxinmai主板定制专家3 天前
基于 ARM+FPGA 雕刻机控制系统的设计
arm开发·人工智能·fpga开发·rk3576·半导体设备
女神下凡4 天前
芯参谋(41):DDR2_电路设计指南
arm开发·单片机·嵌入式硬件·设计规范