【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 -Bllvm-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 = 0readelf 也可能直接没有 .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 段名 的情况是正常的,主要原因在于 链接脚本或段合并

相关推荐
byte轻骑兵21 小时前
ARM 嵌入式处理器内核与架构深度剖析(3): ARM嵌入式处理器的架构组成
arm开发
Jing_jing_X21 小时前
CPU 架构:x86、x64、ARM 到底是什么?为什么程序不能通用?
arm开发·架构·cpu
芙蓉王真的好121 小时前
安全无篡改:Windows 10 22H2/LTSC/ARM 官方原版镜像下载渠道与使用教程
arm开发·windows·安全
切糕师学AI1 天前
ARM 架构中的复位(Reset)与复位流程
arm开发·单片机·嵌入式·复位
VekiSon1 天前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
MickyCode1 天前
嵌入式开发调试之Traceback
arm开发·stm32·单片机·mcu
wwwlyj1233211 天前
ARM CMSIS-DSP Q格式
arm开发
s_daqing1 天前
arm的ubuntu启动node
linux·arm开发·ubuntu
CQ_YM2 天前
ARM之I2C
arm开发·单片机·嵌入式硬件·嵌入式
BigALiang2 天前
再探ARMimxu6ll
arm开发