【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 段名 的情况是正常的,主要原因在于 链接脚本或段合并

相关推荐
代码游侠5 天前
STM32开发——基础外设
linux·运维·arm开发·stm32·单片机·嵌入式硬件·学习
代码游侠5 天前
Linux驱动复习——驱动
linux·运维·arm开发·笔记·学习
古译汉书6 天前
【IoT死磕系列】Day 6:工业控制底层大动脉—CAN总线
linux·网络·arm开发·单片机·物联网·tcp/ip
姜太公钓鲸2336 天前
STM32是ST公司基于ARM Cortex-M内核开发的32位微控制器。上述文字中的内核是什么意思?作用是什么?
arm开发·stm32·嵌入式硬件
日更嵌入式的打工仔6 天前
FIQ 与 IRQ
arm开发·笔记
The️7 天前
STM32-FreeRTOS操作系统-软件定时器
arm开发·stm32·单片机·嵌入式硬件·mcu·c#
szxinmai主板定制专家7 天前
RK3588 8个USB工控解决方案,适用于机器视觉,工业互联等
arm开发·人工智能·fpga开发
我在人间贩卖青春7 天前
ARM编程模型
arm开发·arm工作模式
安全二次方security²7 天前
【CVE-2025-0647】ARM CPU漏洞安全通告
arm开发·安全·cve-2025-0647·tlbi·cpp rctx 指令·c1-ultra·虚拟化漏洞
道亦无名8 天前
armBitRevIndexTable1024
arm开发