如何对齐缓存行GCC ldr pc-relative

时间:2017-07-05 14:43:04

标签: gcc arm

在ARM中,GCC使用PC相对负载通常用于将常量加载到寄存器中。这个想法是你相对于加载常量的指令存储常量。例如。以下指令可用于从地址PC + 8 +偏移

加载常量
ldr r0, [pc, #offset]

结果,.text段交错指令和数据。后者通常存储在函数代码的末尾。 E.g。

00010860 <call_weak_fn>:
10860:       e59f3014        ldr     r3, [pc, #20]   ; 1087c <call_weak_fn+0x1c>
10864:       e59f2014        ldr     r2, [pc, #20]   ; 10880 <call_weak_fn+0x20>
10868:       e08f3003        add     r3, pc, r3
1086c:       e7932002        ldr     r2, [r3, r2]
10870:       e3520000        cmp     r2, #0
10874:       012fff1e        bxeq    lr
10878:       e1a00000        nop                     ; (mov r0, r0)
1087c:       00089790        muleq   r8, r0, r7
10880:       00000074        andeq   r0, r0, r4, ror r0

对于一个研究项目,我想确保代码和常量永远不会驻留在同一个缓存行上(即块64字节对齐)。 是否可以对齐GCC生成的常量?

0 个答案:

没有答案