UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 20068

11.1 EDK - 「ERROR: relocation truncated to fit: R_PPC_REL24 myFunction」というエラー メッセージが表示される

説明

キーワード : R_PPC, link, powerpc-eabi-ld, リンク

26 ビット以上のアドレス空間で分割されている関数を含む PowerPC アプリケーションをリンクしようとすると、次のようなエラー メッセージが表示されます。

"Error: relocation truncated to fit: R_PPC_REL24 <myFunction>"

ソリューション

GCC コンパイラで新しい関数に分岐する際に使用されるデフォルトのアセンブリ コマンドは bl です。 このコマンドでは、現在のアドレスに対して 26 ビットまでのオフセットが許容されます。関数がその関数を呼び出す関数から 26 ビット以上離れている場合は、C コードの関数に longcall という属性を配置して、コンパイラで関数を呼び出すのに長い分岐が必要であることを指定します。これは、関数宣言で次のように指定します。

void myFunction(void) __attribute__ ((longcall));

ソリューション 2
次のオプションを余分のコンパイラ オプションに追加すると、すべての関数がロング ジャンプを実行するようにできます。

-mlongcall

ソリューション 3
関数を関数ポインタとして呼び出すこともできます。このようにすると、コンパイラにより遠くにあるものとして処理されます。

例 :

void myFunction(void) {/*your code here*/};

int main()
{
void (*f2)(void);
f2 = myFunction;
f2();
}

ソリューション 4
最後に、関数は絶対アドレスを付けてポインタとして呼び出すこともできます (例 : ブートローダーからコードの開始アドレスまでのジャンプ)。

例 :

int main()
{
void (*f2)(void);
f2 = (void *) 0x00001000;
f2();
}



AR# 20068
日付 12/15/2012
ステータス アクティブ
種類 一般
このページをブックマークに追加