Nios II Gen2 プロセッサー・リファレンス・ガイド

ID 683836
日付 10/28/2016
Public
ドキュメント目次

7.8. 再配置

Nios II オブジェクト・ファイルでは、各再配置可能なアドレス参照に再配置型があります。再配置型は、再配置アドレスを計算する方法を指定します。ビットマスクは、命令内でアドレスがどこにあるかを指定します。
表 87.  Nios II の再配置計算
名称 オーバーフロー

check

46
再配置アドレス

R

ビットマスク

M

ビットシフト

B

R_NIOS2_NONE 0 N/A なし N/A N/A
R_NIOS2_S16 1 チェックあり S + A 0x003FFFC0 6
R_NIOS2_U16 2 チェックあり S + A 0x003FFFC0 6
R_NIOS2_PCREL16 3 チェックあり ((S + A) – 4) – PC 0x003FFFC0 6
R_NIOS2_CALL2647 4 チェックあり (S + A) >> 2 0xFFFFFFC0 6
R_NIOS2_CALL26_NOAT 41 チェックなし (S + A) >> 2 0xFFFFFFC0 6
R_NIOS2_IMM5 5 チェックあり (S + A) & 0x1F 0x000007C0 6
R_NIOS2_CACHE_OPX 6 チェックあり (S + A) & 0x1F 0x07C00000 22
R_NIOS2_IMM6 7 チェックあり (S + A) & 0x3F 0x00000FC0 6
R_NIOS2_IMM8 8 チェックあり (S + A) & 0xFF 0x00003FC0 6
R_NIOS2_HI16 9 チェックなし ((S + A) >> 16) & 0xFFFF 0x003FFFC0 6
R_NIOS2_LO16 10 チェックなし (S + A) & 0xFFFF 0x003FFFC0 6
R_NIOS2_HIADJ16 11 チェックなし Adj(S+A) 0x003FFFC0 6
R_NIOS2_BFD_RELOC_32 12 チェックなし S + A 0xFFFFFFFF 0
R_NIOS2_BFD_RELOC_16 13 チェックあり (S + A) & 0xFFFF 0x0000FFFF 0
R_NIOS2_BFD_RELOC_8 14 チェックあり (S + A) & 0xFF 0x000000FF 0
R_NIOS2_GPREL 15 チェックなし (S + A – GP) & 0xFFFF 0x003FFFC0 6
R_NIOS2_GNU_VTINHERIT 16 N/A なし N/A N/A
R_NIOS2_GNU_VTENTRY 17 N/A なし N/A N/A
R_NIOS2_UJMP 18 チェックなし ((S + A) >> 16) & 0xFFFF,

(S + A + 4) & 0xFFFF

0x003FFFC0 6
R_NIOS2_CJMP 19 チェックなし ((S + A) >> 16) & 0xFFFF,

(S + A + 4) & 0xFFFF

0x003FFFC0 6
R_NIOS2_CALLR 20 チェックなし ((S + A) >> 16) & 0xFFFF)

(S + A + 4) & 0xFFFF

0x003FFFC0 6
R_NIOS2_ALIGN 21 N/A なし N/A N/A
R_NIOS2_GOT16 2248 チェックあり G 0x003FFFC0 6
R_NIOS2_CALL16 2348 チェックあり G 0x003FFFC0 6
R_NIOS2_GOTOFF_LO 2448 チェックなし (S + A – GOT) & 0xFFFF 0x003FFFC0 6
R_NIOS2_GOTOFF_HA 2548 チェックなし Adj (S + A – GOT) 0x003FFFC0 6
R_NIOS2_PCREL_LO 2648 チェックなし (S + A – PC) & 0xFFFF 0x003FFFC0 6
R_NIOS2_PCREL_HA 2748 チェックなし Adj (S + A – PC) 0x003FFFC0 6
R_NIOS2_TLS_GD16 2848 チェックあり Thread-Local Storage セクションを参照 0x003FFFC0 6
R_NIOS2_TLS_LDM16 2948 チェックあり Thread-Local Storage セクションを参照 0x003FFFC0 6
R_NIOS2_TLS_LDO16 3048 チェックあり Thread-Local Storage セクションを参照 0x003FFFC0 6
R_NIOS2_TLS_IE16 3148 チェックあり Thread-Local Storage セクションを参照 0x003FFFC0 6
R_NIOS2_TLS_LE16 3248 チェックあり Thread-Local Storage セクションを参照 0x003FFFC0 6
R_NIOS2_TLS_DTPMOD 3348 チェックなし Thread-Local Storage セクションを参照 0xFFFFFFFF 0
R_NIOS2_TLS_DTPREL 3448 チェックなし Thread-Local Storage セクションを参照 0xFFFFFFFF 0
R_NIOS2_TLS_TPREL 3548 チェックなし Thread-Local Storage セクションを参照 0xFFFFFFFF 0
R_NIOS2_COPY 3648 チェックなし Copy Relocation セクションを参照 N/A N/A
R_NIOS2_GLOB_DAT 3748 チェックなし S 0xFFFFFFFF 0
R_NIOS2_JUMP_SLOT 3848 チェックなし Jump Slot Relocation セクションを参照 0xFFFFFFFF 0
R_NIOS2_RELATIVE 3948 チェックなし BA+A 0xFFFFFFFF 0
R_NIOS2_GOTOFF 4048 チェックなし S+A 0xFFFFFFFF 0
R_NIOS2_GOT_LO 4248 チェックなし G & 0xFFFF 0x003FFFC0 6
R_NIOS2_GOT_HA 4348 チェックなし Adj(G) 0x003FFFC0 6
R_NIOS2_CALL_LO 4448 チェックなし G & 0xFFFF 0x003FFFC0 6
R_NIOS2_CALL_HA 4548 チェックなし Adj(G) 0x003FFFC0 6

上の表の規定は、次の表現を使用しています。

  • S: シンボルアドレス
  • A: 加数
  • PC: プログラムカウンター
  • GP: グローバルポインター
  • Adj(X): (((X >> 16) & 0xFFFF) + ((X >> 15) & 0x1)) & 0xFFFF
  • BA: 共有ライブラリーがロードされるベースアドレス
  • GOT: グローバル・オフセット・テーブル (GOT) ポインターの値 (Linux のみ )
  • G: シンボル S の GOT スロットの GOT 内へのオフセット (Linux のみ )

上の表の情報を使用し、次のようにどの Nios II 命令も符号なし 32 ビット整数として操作し、再配置することができます。

Xr = (( R << B ) & M | ( X & ~M ));

ここでの各表記は次のとおりです。

  • R : 上の表で計算された再配置アドレス
  • B : ビットシフト
  • M : ビットマスク
  • X : 元の命令
  • Xr : 再配置された命令
46 オーバーフロー・チェックが行われない再配置型の場合、再配置アドレスは命令に合わせて切り捨てられます。
47 リンカーはオーバーフローを解決する過程でレジスター AT を壊すことが許可されています。
48 再配置サポートは Linux システムで提供されています。