-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