【问题标题】:Initializing stack pointer初始化堆栈指针
【发布时间】:2015-05-04 07:22:11
【问题描述】:

我目前正在尝试将 GCC 工具链用于 RISC-V,但遇到了一些问题。

看起来堆栈指针没有正确初始化。我知道我应该自己初始化它,但我不知道在哪里。我正在使用使用正确内存地址更改的默认链接描述文件,并且在此脚本中设置了一个常量 _gp。该常量在默认启动代码中用于初始化 gp 寄存器。

不幸的是,这并没有设置 sp 寄存器。如何在不使用自己的启动代码的情况下设置堆栈指针?

【问题讨论】:

    标签: riscv


    【解决方案1】:

    这是在github:

    上回答的

    执行环境(例如操作系统内核)在跳转到程序的入口点之前应该已经初始化了 sp。如果您处于具有不同约束的嵌入式域中,则需要使用不同的 crt0 来设置这种东西。 gp 是指向小数据部分的 ABI 全局指针。操作系统不会初始化它,因为它是二进制文件的属性,而不是执行环境(与堆栈不同)

    【讨论】:

    • 哈哈,我必须承认。这是正确的答案。我在 github aswel 上问了这个问题,因为我觉得这可能是一个错误。
    • 在这种情况下重复发布没有问题,但我们会链接答案,以便其他人可以找到结果而不是未回答的问题。
    猜你喜欢
    • 2017-09-24
    • 2021-11-28
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多