-S 將編譯程序產生的彙編語言列表寫入文件,與-asm不同,該編譯選項並不進行編譯輸出目標文件
none、vfp、vfpv1、vfpv2、fpa、softvfp+vfp、softvfp+vfpv2、softvfp和softfpa
-gt+p 該選項與-g一起使用,該選項啓動生成預處理程序宏定義的調試表條目
Option
|
Desc
|
-Onumber
|
指定優化級別。優化級別可爲:
-o0 關閉所有優化,除去一些簡單的源轉換。如果使用-g生成調試表,此爲默認優化級別。它給出最佳可能調試視圖和優化的最低級別
-o1 關閉嚴重影響調試視圖的優化。如果和-g一起使用,該選項給出良好合適代碼密度的滿意調試試圖
-o2 生成充分優化代碼。如果與-g一起使用,調試視圖可能不令人滿意,因爲目標代碼和源代碼的映射有時不清晰。
|
-ospace
|
指示編譯程序執行優化,以可能延長執行時間爲代價減少映像大小。例如,由外部函數而非內聯代碼執行大的結構副本。若代碼大小比性能更重要,則使用該選項,這是默認設置
|
-otime
|
指示編譯程序執行優化,以可能增大映像大小爲代價縮短執行時間。不能同時使用-ospace和-otime。
|
-Ono_inline
|
禁止使用函數的內聯。該選項可幫助調試內聯函數
|
-Oinline
|
啓用編譯內聯函數程序。此時inline叫限定符;而C中的__inline,C和C++中的_forceinline和inline則叫關鍵字。
|
-Ono_autoline
|
禁用自動內聯,這是-o1和-o0的默認設置
|
-Oautoinline
|
啓用自動內聯,-o2默認打開自動內聯
|
-split_ldm
|
指示編譯程序在所需要位置將LDM和STM指令分裂爲兩個或更多的LDM或STM指令,以減少傳送寄存器的最大數量
|
控制代碼和數據段
|
|
-zo
|
該選項爲源文件中的每個函數生成一個ELF段。使用與生成段的函數相同的名稱命名輸出段。例如
int f(int x) {return x + 1;}
|
|
使用-zo編譯給出:
AREA ||i.f||, CODE, READONLY
f PROC
ADD r0, r0, #1
MOV pc, lr
該選項減少了函數之間共享地址、數據和字符串文字的可能性。可以通過armlink –remove允許鏈接程序時刪除不用的函數。
配合該選項,可以使用分散加載描述文件將一些函數放在快速存儲器中,其餘函數放在慢速存儲器中
|
-littleend
|
該選項使用小端存儲器生成用於ARM處理器的代碼。在小端存儲器中,字的最低位字節具有最低地址。這是默認設置
|
-bigend
|
該選項使用大端存儲器生成ARM處理器代碼。
|
Setting alignment options
|
|
-memaccess option
|
向編譯程序指定目標系統中的存儲器稍微具有受限制的或擴展的能力
|
-fy
|
強制所有枚舉類型爲整型存儲。不要常用該選項,因與ISO不兼容
|
-zc
|
使char類型帶有符號。該選項不要常用,ISO兼容源不要求該選項
|
Pragma name
|
Default
|
Reference
|
arm section
|
Off
|
Pragmas controlling code generation
|
check_printf_formats
|
Off
|
Pragmas controlling printf and scanf argument checking
|
check_scanf_formats
|
Off
|
Pragmas controlling printf and scanf argument checking
|
check_stack
|
On
|
Pragmas controlling code generation
|
debug
|
On
|
Pragmas controlling debugging
|
import
|
|
code generation
|
Ospace
|
|
optimization
|
Otime
|
|
optimization
|
Onum
|
|
optimization
|
softfp_linkage
|
Off
|
code generation
|
- check_printf_formats
- check_scanf_formats
- debug 該編譯指示可打開或關閉調試表生成, 如果指定#pragma no_debug,則不會爲隨後的聲明和函數生成調試信息表條目,直到下一個#pragma debug出現。
- Pragmas controlling optimization
- Pragmas controlling code generation
- check_stack 如果已經使用了#pragma no_check_stack和-apcs/swst命令行選項禁止棧檢查,則該編譯指示可使的檢查是否違反了棧限制的函數入口代碼的重新生成。
- once 同#ifndef …#endif效果相類似,用於頭文件。但一般推薦使用#ifndef…#define。
- softfp_linkage 該編譯指示指定了至下一個#pragma no_softfp_linkage之間的所有函數聲明描述了使用軟件浮點鏈接的函數。__softfp關鍵字與該編譯指示的效果相同
- import(symbol_name) 該編譯指示生成對symbol_name的導入引用。同如下彙編語言相同:IMPORT symbol_name。符號名作爲外部符號放在映像的符號表中。
- arm section section_sort_list This pragma specifies the code or data section name that used for subsequent function or objects.This include definitions of anonymous objects the compiler creates for initializations.該編譯指示可指定代碼或數據段的名稱用於隨後的函數或對象。包括編譯程序爲初始化而創建的匿名對象的定義。該選項對一下情況沒有影響:
int y1[100]; // in .bss (default)
int const z1[3] = {1,2,3}; // in .constdata (default)
#pragma arm section rwdata = "foo", rodata = "bar"
int x2 = 5; // in foo (data part of region)
int y2[100]; // in .bss
int const z2[3] ={1,2,3}; // in bar
char *s2 = "abc"; // s2 in foo, "abc" in bar
#pragma arm section rodata
int x3 = 5; // in foo
int y3[100]; // in .bss
int const z3[3] ={1,2,3}; // in .constdata
char *s3 = "abc"; // s3 in foo, "abc" in .constdata
#pragma arm section code = "foo"
int add1(int x) // in foo (code part of region)
{
return x+1;
}
#pragma arm section code