首页 > 解决方案 > 用 clang / llvm 抑制部分 '.ARM.exidx'

问题描述

我正在尝试使用clang. (代码和链接器脚本可以与 gcc 一起正常工作。)

我的问题是,无论是否需要,它clang似乎都会发出一个部分。.ARM.exidx

由于对于我的代码,gcc 没有发出一个.ARM.exidx部分,因此我的链接器脚本没有为它指定一个区域。然而,如此错误消息所示,clang 似乎发出了它:

ld.lld: error: no memory region specified for section '.ARM.exidx'
clang: error: ld.lld command failed with exit code 1 (use -v to see invocation)

有什么方法可以避免在不需要时生成此部分?

我尝试了这些选项-fno-unwind-tables-fno-exceptions但似乎是一个已知错误,它们无法按预期工作。请参阅这些拉取请求:D31139D31140


我目前正在使用链接器脚本中的以下部分定义来解决此问题:

    /DISCARD/ :
    {
        *(.ARM.exidx)
    }

这似乎有点脆弱,因为如果由于代码的任何更改,该部分将丢失,稍后需要该部分。

标签: armclangllvmcortex-mbare-metal

解决方案


推荐阅读