问题:之前的版本没有类似的warning, 升级KEIL到最新版本5.34后编译会有warning,
C:xx\startup_xxx.S(94): warning: Reset_Handler changed binding to STB_WEAK
原因:这是由于KEIL MDK-ARM升级后对于改变binding会触发warning,在以后的版本中会触发error。
我们可以看到报warning的.S文件中有下列汇编声明:
.globl Reset_Handler
.weak Reset_Handler
从ARM得到的信息是他们在5.34做了改进,背景如下:
GNU as let .weak override .globl since binutils-gdb
5ca547dc2399a0a5d9f20626d4bf5547c3ccfddd (1996) while MC lets the last
directive win (PR38921).
This caused an issue to Linux's powerpc port which has been fixed by
http://git.kernel.org/linus/968339fad422a58312f67718691b717dac45c399
Binding overriding is error-prone. This patch disallows a changed binding.
(https://sourceware.org/pipermail/binutils/2020-March/000299.html )
Our behavior regarding .globl x; .weak x matches GNU as. Such usage is
still suspicious but we issue a warning for now. We may upgrade it to an
error in the future.
解决方法:
将.globl Reset_Handler这一行声明去掉。
延展: 关于Symbol binding
参阅 https://www.keil.com/support/man/docs/armclang_ref/armclang_ref_drn1510589975221.htm