【发布时间】: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 版本是多少?
.reloc是 valid 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