首页 > 解决方案 > __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.

任何帮助是极大的赞赏!

标签: cgccriscvbare-metalstack-pointer

解决方案


推荐阅读