1

我正在使用 GNUARM C 编译器构建遗留代码并尝试解析函数的所有隐式声明。

我遇到了一些 ARM 特定的函数,但找不到包含这些函数声明的头文件:

get_pc 
get_cpsr 
get_sp

我在网上搜索过,只找到了包含这些函数的源代码,没有任何非标准的包含文件。

我也会满足于函数声明。

由于我还将代码移植到 Cygwin / Windows 平台,Cygwin GNU GCC 的等效声明是什么?

谢谢。

4

2 回答 2

3

如果您真的需要这些功能,只需自己编写,asm 比内联 asm 更容易:

.globl get_pc
get_pc:
    mov r0,pc
    bx lr

.globl get_sp
get_sp:
    mov r0,sp
    bx lr

.globl get_cpsr
get_cpsr:
    mrs r0,cpsr
    bx lr

至少对于手臂。如果您要移植到 x86 并且需要等价物,那么我不得不想知道这些东西的代码需要什么。特别是 cpsr,您可能不得不更改任何使用结果作为跨处理器供应商/系列的状态寄存器的代码,几乎永远不会匹配。x86 等效项的工作量仍应大致相同,进行谷歌搜索和读取结果所需的时间比仅编写代码(如果您知道处理器)要长。

根据您的应用程序正在做什么,最好只注释掉调用这些函数和/或使用返回值的任何代码。我可以想象为什么会使用这些项目的几个原因,但它可能会涉及特定于体系结构的东西,这比仅仅移植一些寄存器读取功能更复杂。所以user786653问的是关键问题。这些功能是如何使用的?不是我在哪里可以找到它们,而是它们是如何使用的以及你为什么认为你需要它们。

于 2011-11-04T19:02:58.997 回答
2

你确定这些是功能吗?我对 ARM 不是很熟悉,但对我来说这些听起来像是编译器内在函数。如果您要迁移到 GCC,最好用内联汇编替换那些。

于 2011-11-03T18:43:34.263 回答