我正在使用 GNUARM C 编译器构建遗留代码并尝试解析函数的所有隐式声明。
我遇到了一些 ARM 特定的函数,但找不到包含这些函数声明的头文件:
get_pc
get_cpsr
get_sp
我在网上搜索过,只找到了包含这些函数的源代码,没有任何非标准的包含文件。
我也会满足于函数声明。
由于我还将代码移植到 Cygwin / Windows 平台,Cygwin GNU GCC 的等效声明是什么?
谢谢。
如果您真的需要这些功能,只需自己编写,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问的是关键问题。这些功能是如何使用的?不是我在哪里可以找到它们,而是它们是如何使用的以及你为什么认为你需要它们。
你确定这些是功能吗?我对 ARM 不是很熟悉,但对我来说这些听起来像是编译器内在函数。如果您要迁移到 GCC,最好用内联汇编替换那些。