MSP430上的ELF重定位类型

时间:2016-01-27 16:36:02

标签: microcontroller elf msp430 electronics relocation

我必须使用可重定位的ELF文件并使用红帽编译器(而非TI)修复MSP430-F5529中的地址。但是,我不明白如何重新安置,因为我没有使用符号。

Here是类型及其详细信息。

让我们以此为例。

  • 名称:R_MSP430X_ABS20_ADR_DST
  • 签名:未签名
  • ContainerSize:32
  • 栏位:[0,4] + [16,16]

以下生成了ASM:

0C60 0000 : MOVA R12, &0x00000

如果我们在Wikipedia中搜索MOVA操作码,我们会看到操作码的结构如下:

Offset : [7] [6] [5] [4] [3] [2] [1] [0]

Hex Value : [0] [dst] [6] [src] [src] [src] [src] [src]

我们现在知道dst C 代表 R12 ,最后20位代表要替换的地址(最后4位加上另外16位 - 最后4位) 0 - 。)

我知道需要了解如何解释[0,4]+[16,16]。看起来[0,4]引用前2个字节的最后4位(006 0 0000),但它是如何工作的?我该如何阅读[16,16]

以下是有人理解的PDF解释的引用。

  

使用元组[CS,O,FS]指定字段,其中CS是   容器大小,O是从容器的LSB到字段的LSB的起始偏移量,   和FS是该领域的大小。所有值均以位为单位。符号[x,y] + [z,w]表示   重定位占用不连续的位范围,应该连接起来形成字段。

感谢。

1 个答案:

答案 0 :(得分:2)

您的“偏移”值是错误的。

“ContainerSize:32”表示您必须将指令视为单个小端32位值。 作为32位值,它将写为00000C60。 这四个字节依次为600C0000。 这些位如下:

31302928272625242322212019181716151413121110 9 8 7 6 5 4 3 2 1 0
 a a a a a a a a a a a a a a a a 0 0 0 0 s s s s 0 1 1 0 a a a a