【问题标题】:Configuring GCC for the SPARC architecture为 SPARC 体系结构配置 GCC
【发布时间】:2015-01-27 01:43:55
【问题描述】:

我一直在尝试编译一个 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 的独特之处都是“错误”。

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

gcc -march=sparc expr.s -o expr

这仍然会引发错误,这使我相信我当前的配置未针对 SPARC 进行设置。

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

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

谢谢

【问题讨论】:

    标签: gcc assembly sparc


    【解决方案1】:

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

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

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

    【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 2013-03-08
      • 2011-01-19
      • 2012-03-18
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多