1. .ltorg
2. DECLARE_GLOBAL_DATA_PTR
1. .ltorg
LTORGLTORG 指令指示彙編器立即彙編當前文字池。
(in gcc is .ltorg the literal pools origin)
語法LTORG
用法彙編器在每個代碼節末尾彙編當前文字池。代碼節的結束位置由後續節開始處的 AREA 指令確定,或由彙編代碼的結束位置確定。
這些缺省文字池有時會超出某些 LDR、VLDR 和 WLDR 偽指令的範圍。使用 LTORG 可確保在指定範圍內彙編文字池。有關偽指令的詳細信息,請參閱:
LDR偽指令
VLDR偽指令
無線MMX加載和存儲指令
大型程序可能需要多個文字池。將 LTORG 指令放在無條件跳轉或子例程返回指令之後,以使處理器不會試圖將常數作為指令來執行。
彙編器對文字池中的數據進行字對齊。
示例 AREA Example, CODE, READONLY
start BL func1
func1 ; function body
; code
LDR r1,=0x55555555 ; => LDR R1, [pc, #offset to Literal Pool 1]
; code
MOV pc,lr ; end function
LTORG ; Literal Pool 1 contains literal &55555555.
data SPACE 4200 ; Clears 4200 bytes of memory,
; starting at current location.
END ; Default literal pool is empty.
2. DECLARE_GLOBAL_DATA_PTR
DECLARE_GLOBAL_DATA_PTR 只是一个定义的宏,这个宏定义了一个gd_t全局数据结构的指针,这个指针存放在指定的寄存器中(386体系结构没有放到指定寄存器中)。
例如mips体系结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("k0")
例如ppc体系结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r29")
例如ARM体系结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("r9")
例如386体系结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd = global_data
例如M68K体系结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("d7")
例如nios结构中,DECLARE_GLOBAL_DATA_PTR定义如下:
#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("%g7")