在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生成的常量?