2013-04-02 109 views
0

的同事,和我遇到了這個奇怪的錯誤今天使用LD以下版本:GNU ld鏈接器錯誤「unknown relocation type 30」是什麼意思?

$ mb-ld --version 
GNU ld (GNU Binutils) 2.21.53.20110813 
Copyright 2011 Free Software Foundation, Inc. 

這是GNU工具鏈與分佈賽靈思ISE 14.4嵌入式開發套件的一部分的MicroBlaze架構支持的一部分(EDK )工具。我的構建平臺是針對x86_64的紅帽企業Linux服務器版本5.9。

更一般地,一些其他的問題浮現在腦海中:

  1. 是否有所有GNU LD搬遷類型的主列表?
  2. 如果不是,那麼是否有方法來詢問我的特定版本的LD以確定重定位類型的含義?

回答

2
1. Is there a master list of all GNU ld relocation types? 

不,它是基於硬件架構

2. If not, then is there a way to interrogate my specific version of LD to determine what a relocation type means? 

均田,你可以找到類型爲您的硬件。 Microblaze是一個軟cpu,但它模仿了PowerPC的架構。在「PowerPC的重定位類型」快速谷歌後,我發現http://math-atlas.sourceforge.net/devel/assembly/elfspec_ppc.pdf(表4-8),我們有以下重定位類型

Table 4-8 Relocation Types 
Name      Value Field  Calculation 
R_PPC_NONE     0  none  none 
R_PPC_ADDR32    1  word32  S + A 
R_PPC_ADDR24    2  low24*  (S + A) >> 2 
R_PPC_ADDR16    3  half16* S + A 
R_PPC_ADDR16_LO   4  half16  #lo(S + A) 
R_PPC_ADDR16_HI   5  half16  #hi(S + A) 
R_PPC_ADDR16_HA   6  half16  #ha(S + A) 
R_PPC_ADDR14    7  low14*  (S + A) >> 2 
R_PPC_ADDR14_BRTAKEN  8  low14*  (S + A) >> 2 
R_PPC_ADDR14_BRNTAKEN  9  low14*  (S + A) >> 2 
R_PPC_REL24    10 low24*  (S + A - P) >> 2 
R_PPC_REL14    11 low14*  (S + A - P) >> 2 
R_PPC_REL14_BRTAKEN  12 low14*  (S + A - P) >> 2 
R_PPC_REL14_BRNTAKEN  13 low14*  (S + A - P) >> 2 
R_PPC_GOT16    14 half16* G + A 
R_PPC_GOT16_LO    15 half16  #lo(G + A) 
R_PPC_GOT16_HI    16 half16  #hi(G + A) 
R_PPC_GOT16_HA    17 half16  #ha(G + A) 
R_PPC_PLTREL24    18 low24*  (L + A - P) >> 2 
R_PPC_COPY     19 none  none 
R_PPC_GLOB_DAT    20 word32  S + A 
R_PPC_JMP_SLOT    21 none  see below 
R_PPC_RELATIVE    22 word32  B + A 
R_PPC_LOCAL24PC   23 low24*  see below 
R_PPC_UADDR32    24 word32  S + A 
R_PPC_UADDR16    25 half16* S + A 
R_PPC_REL32    26 word32  S + A - P 
R_PPC_PLT32    27 word32  L + A 

我的猜測是,這些將成爲的MicroBlaze(可能與R_MB代替R_PPC相同在名字裏)。當然,應該有一個官方文件能夠告訴你到底發生了什麼,我還沒有找到它。

+1

我無法在Xilinx工具,Xilinx網站或某些常規因特網搜索中找到此特定於MicroBlaze或PowerPC的重定位類型30定義。但是,這個答案表明這些信息通常保存在哪裏(在特定於體系結構的補充或一般的頭文件中),並導致我爲這種位置類型提供了一些額外的錯誤報告。 – deaks

-1

使用帶選項-r的objdump.exe爲輸出中的每個符號查找重定位類型。我不知道類型是在哪裏記錄的。

+0

您可以改進格式並提供一些鏈接來備份您的答案。 – mathielo