根据我的发现,.fini用于在main
返回后销毁静态存储持续时间对象。在典型的裸机应用程序中,main
不会返回。有没有理由不简单地从链接描述文件中删除这些符号?
答案 0 :(得分:4)
在典型的裸机应用程序中,main不会返回。
main()
确实可以返回到启动代码,该代码可以在应用程序退出后自定义以执行某些操作,例如,重启,切断电源或启动固件更新。在这种情况下,可能需要静态析构函数。
有没有理由不从链接描述文件中删除这些符号?
如果main()
永远不会返回且永远不会调用exit()
,那么当然你可以删除这些符号,但是库启动会错过它们,你必须提供一个函数覆盖遍历__fini_array
的库函数。
如果您使用的是newlib
,则可以使用--enable-lite-exit
重新编译它,以省略所有fini
内容。