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

相关推荐
奋斗tree2 小时前
EulerOS 2.0 等保三级版(ARM 架构)是什么?
arm开发·架构
senijusene3 小时前
i.MX6ULL 裸机 ECSPI 驱动开发详解:
arm开发·驱动开发·嵌入式硬件
Arenaschi21 小时前
国产麒麟X86结构和arm架构的区别
arm开发
EnglishJun1 天前
ARM嵌入式学习(二十一)--- Platform总线结合dts、gpio子系统、中断和错误处理
arm开发·学习
AI服务老曹1 天前
异构计算时代的安防底座:基于 x86/ARM 双架构与多芯片适配的 AI 视频云平台架构解析
arm开发·人工智能·架构
落樱弥城1 天前
Arm Mali GPU架构
arm开发·架构
The Mr.Nobody1 天前
基于STM32F407的 TFTP Server
arm开发·stm32·嵌入式硬件
飞凌嵌入式1 天前
如何用JishuShell在RK3588核心板上快速部署OpenClaw?
arm开发·人工智能·嵌入式硬件·openclaw
ai产品老杨1 天前
异构计算时代的安防底座:基于 x86/ARM 双架构与多芯片适配的 AI 视频云平台架构解析
arm开发·人工智能·架构
ai产品老杨2 天前
异构计算时代的视频底座:基于 ZLMediaKit 与 Spring Boot 的 X86/ARM 跨平台架构解析
arm开发·spring boot·音视频