Arm Objdump在贴上标签后停止拆解

Arm Objdump在贴上标签后停止拆解,arm,label,objdump,linaro,Arm,Label,Objdump,Linaro,我正在用汇编和C语言设计一个AArch64应用程序,使用Linaro工具链,并经常使用objdump查看我自己的反汇编二进制文件。 但是,objdump不解码文件的一部分,而是将其视为数据。它总是发生在源中的第二个标签之后 例如,此代码: .global _Reset _Reset: BL get_cpuid CBNZ x0, inf_loop LDR x0, =page_table_base LDR x1, =0x0000000000000601 STR

我正在用汇编和C语言设计一个AArch64应用程序,使用Linaro工具链,并经常使用objdump查看我自己的反汇编二进制文件。 但是,objdump不解码文件的一部分,而是将其视为数据。它总是发生在源中的第二个标签之后

例如,此代码:

.global _Reset

_Reset:

BL get_cpuid
CBNZ x0, inf_loop

LDR     x0, =page_table_base      
LDR     x1, =0x0000000000000601 
STR     x1, [x0, #0x00]
test:
LDR     x1, =0x0060000040000601
STR     x1, [x0, #0x08]
...
分解成

Disassembly of section .startup:

0000000000000000 <_Reset>:
       0: 94000024  bl  90 <get_cpuid>
       4: b50004c0  cbnz  x0, 9c <inf_loop>
       8: 58000880  ldr x0, 118 <TXTN+0x3>
       c: 580008a1  ldr x1, 120 <TXTN+0xb>
      10: f9000001  str x1, [x0]

0000000000000014 <test>:
      14: 580008a1  .word 0x580008a1
      18: f9000401  .word 0xf9000401
...
节的反汇编。启动:
0000000000000000 :
0:94000024 bl 90
4:b50004c0 cbnz x0,9c
8:58000880 ldr x0,118
c:580008a1 ldr x1,120
10:F90000001 str x1[x0]
0000000000000014 :
14:580008a1.字0x580008a1
18:f9000401.字0xf9000401
...

为什么会发生这种情况?

您可以尝试添加一个
.ltorg
。它看起来像是AArch64的
objdump
中的一个bug,AArch64相对较新。我猜工具链中有一个bug,在这种情况下很难回答。谢谢你天真的噪音
.ltorg
帮助处理代码的某些部分,如果我将其放在每个标签之前,但对其他部分不做任何处理。关于工具链中的一个错误,你是对的-在你回答之后,我检查了Linaro bug tracker,发现了这样一个问题:你可以总结错误帖子,并将其作为回答中的参考(即,人们需要binutils 2.25或该错误参考中的补丁;使用crosstool ng相当容易应用)。