c - __libc_init_array 在设置堆栈指针之前使用堆栈指针进行写入
问题描述
问题:当我使用 GCC 为裸机 RISC-V 环境编译 C 程序时,该函数__libc_init_array
在设置堆栈指针之前使用堆栈指针写入内存。堆栈指针设置在还初始化寄存器的汇编文件中。
如果使用该参数,则该__libc_init_array
函数不包含在创建的二进制文件中-nostartfiles
,但这会导致某些程序停止工作(我不知道究竟是什么问题,但我想避免修改程序)。
据我了解,导致问题的函数初始化了一些内存,并且当时有一种方法可以使用__attribute__
eg执行代码void __attribute__ ((constructor)) premain()
。这不是我尝试过的确切功能,但我现在找不到其他功能。尽管如此,在__libc_init_array
.
似乎有一种方法可以设置初始化优先级,但这仅适用于 C++,例如Some_Class A __attribute__ ((init_priority (2000)));
我也使用参数-pedantic
和-ffreestanding
.
任何帮助是极大的赞赏!
解决方案
推荐阅读
- java - 使用 Java api 查找索引是否存在的弹性搜索
- javascript - Jquery UI Draggable溢出问题
- java - 每个连接的 Java asyncHttpClient 新线程
- java - Java 流无干扰和副作用
- c++ - 在 C++ 中更改跟踪器的 fps
- github - 没有批准按钮的 GitHub ssh 密钥审核
- c# - 可以删除条形图中系列之间的空格吗?
- stata - 根据唯一 ID 将大型数据集拆分为较小的组
- html - 将多个 Flexbox 行的高度设置为始终在浏览器窗口中显示
- cucumber - 如何在 cucumber-js 中测试结果是多行字符串?