ARM Thumb模式重定位

时间:2016-07-27 20:49:30

标签: assembly arm gnu cortex-m thumb

Cortex M3-Vector表使用gnu-as

看起来像这样
.long STACK_START
.long _reset
.long 0x0 //Reserved   
.long _hard_fault
...

问题是符号地址必须设置底部位,因为它们指向拇指代码。 Gnu-as将_reset转换为链接器的重定位以适应,并且链接器不添加底部位,同样我也不能执行类似(_reset | 1)的操作。

我可以将_reset设置为固定位置并对该矢量进行“硬编码”,但我正在努力避免这种情况。

也许有办法阻止gnu-as将_reset转换为重定位,所以我可以将它用作常量值。

允许_reset:标签与向量表位于同一个编译单元中。

举例说明:

 .long  STACK_START
 .long _reset
 ...

 _reset:
     b _reset

汇总为:

00000000 <vectors>:
   0:   20001000    andcs   r1, r0, r0
   4:   000000c0    andeq   r0, r0, r0, asr #1
    ...

000000c0 <_reset>:
  c0:   e7fe        b.n c0 <_reset>
  c2:   bf00        nop

我希望将000000c0汇总为000000c1

0 个答案:

没有答案