【问题标题】:Equivalent to a mips pseudo code相当于一个 mips 伪代码
【发布时间】:2014-11-28 12:51:04
【问题描述】:

由于我无法控制的原因,我坚持使用旧的 mips 工具链。编译一些汇编代码时,我收到错误 Error: unknown pseudo-op: .reloc
我想知道我可以用什么代替它来编译我的代码。

我见过像GNU assembler for MIPS: how to emit sync_* instructions?translate mips pseudo instruction into machine code 这样的具体例子。为了学习钓鱼,而不是得到一条鱼,我也想知道如何自己翻译这个。有帮助的查找参考吗?

有问题的汇编代码是:

    asm ( \
        ".text" "\n" \
        ".align 2" "\n" \
        ".set noreorder" "\n" \
        ".set nomacro" "\n" \
        ".set nomips16" "\n" \
        ".globl " SYMBOL_STRING(cti_##op) "\n" \
        ".ent " SYMBOL_STRING(cti_##op) "\n" \
        SYMBOL_STRING(cti_##op) ":" "\n" \
        ".set macro" "\n" \
        ".cpload $25" "\n" \
        "sw    $31," STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "($29)" "\n" \
        "la    $25," SYMBOL_STRING(JITStubThunked_##op) "\n" \
        ".set nomacro" "\n" \
        ".reloc 1f,R_MIPS_JALR," SYMBOL_STRING(JITStubThunked_##op) "\n" \
        "1: jalr $25" "\n" \
        "nop" "\n" \
        "lw    $31," STRINGIZE_VALUE_OF(THUNK_RETURN_ADDRESS_OFFSET) "($29)" "\n" \
        "jr    $31" "\n" \
        "nop" "\n" \
        ".set reorder" "\n" \
        ".set macro" "\n" \
        ".end " SYMBOL_STRING(cti_##op) "\n" \
        ); 

可以在网上看到https://qt.gitorious.org/qt/qtwebkit/source/0930236a6e8bef5c2b90f1522a06acf9dee9c15d:Source/JavaScriptCore/jit/JITStubs.cpp起跑线1267

【问题讨论】:

  • 显示触发错误的汇编源代码的 sn-p 可能会有所帮助。
  • 你的 binutils 版本是多少? .relocvalid directive at least from version 2.20 以后的。
  • @Jester 我被一个旧的 mips 工具链困住了。它的版本是 2.18
  • 根据online manual,2.18也应该有.reloc。奇怪。
  • @Jester 对不起,我犯了一个错误。它是 2.16 mips-linux-ar --version GNU ar 2.16.91.0.7 20060317

标签: gcc assembly mips


【解决方案1】:

.reloc 伪操作指示汇编器在二进制输出中发出重定位。我不确定细节。

相信意图是jalr 指令应该跳转到名为JITStubThunked_<something> 的子例程。请注意寄存器$25 是如何加载一个稍后由jalr 使用的地址。

如果您的上下文不需要重定位(我不知道您的工具链支持哪些对象格式等),您可以尝试完全省略 .reloc 行。如果地址合适,您可以尝试将la+jalr 替换为单个jal " SYMBOL_STRING(JITStubThunked_##op) "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多