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

相关推荐
磨十三1 天前
MCU 时钟系统全解析:主时钟、PLL、分频与外设时钟门控
arm开发·单片机·嵌入式硬件
磨十三1 天前
ARM Cortex-M 系列 MCU:内核、指令、异常与中断解析
arm开发·单片机·嵌入式硬件
Leinwin1 天前
微软发布全新一代 Arm 架构云原生处理器 Cobalt 200
arm开发·microsoft·架构
卖芒果的潇洒农民1 天前
Work ARM CPU
arm开发
虚伪的空想家2 天前
arm架构服务器使用kvm创建虚机报错,romfile “efi-virtio.rom“ is empty
linux·运维·服务器·javascript·arm开发·云原生·kvm
明月清了个风2 天前
工作笔记-----EEPROM偶发性读取错误
arm开发·笔记·单片机·嵌入式硬件
大侠课堂2 天前
单片机经典面试题50道
arm开发·单片机·嵌入式硬件·mongodb
wa的一声哭了2 天前
并行计算 PCAM方法学
linux·运维·服务器·arm开发·python·spring·django
小疆智控2 天前
工业电能无忧:ModbusTCP转EthernetIP精准护航电能质量
arm开发
大侠课堂3 天前
ARM Linux内核异常排查指南
linux·arm开发