複雑なアセンブラ式の処理

テクニカル・ノート 28162

アーキテクチャ:

ARM, RH850, RISC-V, RL78, RX, SH, STM8

コンポーネント:

assembler

更新日:

2020/05/25 11:25

はじめに

本テクニカルノートでは、以下の診断メッセージの1つをトリガする複雑なアセンブラ式を処理する方法について説明します:

Error[472]: Expression is too complex
Error[109]: Expression is too complex

: エラーメッセージは、ソースの後の行を指します。 つまり、サポートされていない式は、エラーメッセージが指している行より上のどこかにあります。

解説

背景

Elfオブジェクト形式には以下制限があります。:

アセンブラ式は、リンク時に解決される1つのシンボルのみを参照できます。

つまり、リンク時に2つのシンボルが解決される場合は、式でこの2つのシンボルを使用することはできません。

この例は、リンク時に解決される2つのシンボルを含む1つの式があるため、アセンブルできません。.

Stack_Size EQU 0x00000800 ;; fixed value
Stack_Mem DS8 Stack_Size
Heap_Size EQU 0x00001000 ;; fixed value
Heap_Mem DS8 Heap_Size

set_up
LDR R2, = (Heap_Mem + Stack_Mem)
 

提案

ソースをいくつかのアセンブラステートメントとして書き換えてください:

set_up
LDR R0, = Heap_Mem
LDR R1, = Stack_Mem
ADD R2,R0,R1
 

まとめ

ELF出力形式で表現するには複雑すぎるアセンブラ式が記述されることがあります。

回避策として、そのアセンブラ式をいくつかの式に書き換えてください。

 

全ての製品名は、それぞれの所有者の商標または登録商標です

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。