为 SPARC 架构配置 GCC

Configuring GCC for the SPARC architecture

我一直在尝试编译 SPARC 程序。只是直接从书中摘录的一个简单的:SPARC Architecture, Assembly Language Programming, and C: Second Edition。但是,我收到一个错误,让我相信 SPARC 尚未在我的计算机上正确配置。这是在 Windows 机器上。

.global main
main:
    save    %sp,    96,    %sp
    mov     9,      %l0
    sub     %l0,    1,     %o0
    sub     %l0,    7,     %o1
    call    .mul        
    nop
    sub     %l0,    11,    %o1
    call    .div    
    mov     %o0,    %l1        

    mov     1,      %g1
    ta      0

我通过 Cygwin 1.7.5 安装了 GCC 4.9.2。

我在尝试通过 GCC 进行编译时遇到以下错误

C:\Users\Matt\Desktop>gcc expr.s -o expr
expr.s: Assembler messages:
expr.s: Warning: end of file not at end of a line; newline inserted
expr.s:3: Error: no such instruction: `save %sp,96,%sp'
expr.s:4: Error: bad register name `%l0'
expr.s:5: Error: bad register name `%l0'
expr.s:6: Error: bad register name `%l0'
expr.s:9: Error: bad register name `%l0'
expr.s:11: Error: bad register name `%o0'
expr.s:13: Error: bad register name `%g1'
expr.s:14: Error: no such instruction: `ta 0'

这突出了 SPARC 与不同架构相比的几乎所有独特之处,作为 'error'。

所以,我尝试专门为程序设置架构:

gcc -march=sparc expr.s -o expr

这仍然会引发错误,这让我相信我当前的配置不是为 SPARC 设置的。

我用来设置 GCC 的过程是:here

唯一的区别是我没有为语言指定 c,c++,而是使用了 all

谢谢

你是对的,你的 gcc 没有为 SPARC 设置。如果您是 运行 Windows,则您 运行 所在的计算机具有 SPARC 以外的 ISA(很可能是 x86)。您的 ISA 是硬件接口,无法通过软件升级更改。

要编译 SPARC 程序,您需要将 gcc 重建为 SPARC 交叉编译器(主机和目标 ISA 不同)。从源代码构建时,这是通过 -target= 标志完成的。为 linux 构建交叉编译器类似于 cygwin link.

构建交叉编译器后,要执行它,您将需要一种模拟 SPARC 处理器的方法。使用 qemu 这样的系统就可以了。

Here's a small tutorial 为 Sparc V8 目标编译简单程序,运行 在 Qemu 上编译它们。本教程包括获取交叉编译器的步骤(假设您正在使用 Linux)