日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍

發布時間:2023/12/10 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉自:ARM 之七 主流編譯器(armcc、iar、gcc for arm、LLVM(clang))詳細介紹_itexp-CSDN博客_armcc

必備

??在講解各編譯器之前,必須先了解一下以下文件。這些文件在編譯器目錄下或者編譯生成目標平臺的可執行程序時經常見到。此外,還需要注意區分 Windows 平臺 和 Linux 平臺的文件。

  • .o 文件:?指的是 object 文件,俗稱目標文件。在 Linux 下擴展名縮寫為 .o,在 windows 下通常為 .obj 文件。
  • .a 文件:?指的是 archive 文件,俗稱靜態庫文件。在 Linux 下擴展名縮寫為 .a,在 windows 下通常為 .lib 文件。
  • .so 文件:?指的是 shared object 文件,用于動態連接的。在 Linux 下擴展名縮寫為 .so,在 windows 下通常為 .dll 文件。

.o 文件是鏈接文件,.a 是靜態庫文件,需要 .o 文件生成,作為一個庫為外部程序提供函數接口。詳細的可以看一下博文?ARM 之一 鏡像文件(Image)/可執行文件/ELF文件/對象文件 詳解。

??在交叉編譯工具鏈目錄中,有大量的 .o 和 .a 文件。這些文件在我們編譯目標平臺時會被用到!為什么在Windows下面的編譯工具鏈中會有這么多的 .o 和 .a 文件呢?這是因為編譯工具鏈是在 Linux 系統 中編譯生成的!?。看下圖:

如果有親自編譯過交叉編譯工具鏈,那么就一定會見到 build、host 和 target 這幾個參數:

  • –build=編譯該軟件(就是指的交叉編譯工具鏈本身)所使用的平臺
  • –host=該軟件(就是指的交叉編譯工具鏈本身)將運行的平臺
  • –target=該軟件(就是指的交叉編譯工具鏈本身)所要處理的目標平臺。即交叉編譯工具鏈編譯出來的程序運行的平臺

比較

目前,針對于 ARM 平臺的主流編譯器主要有以下三者:

比較ARMCCIARGCC for ARMLLVM(clang)
命令行工具隨IDE發布,也獨立提供僅隨其IDE發布,不獨立提供獨立提供只有命令行工具
開發商ARMIARARM、Linaro、MentorLLVM
支持的平臺Windows、LinuxWindowsWindows、Linux、Mac(部分)Windows、Linux、Mac
配套 IDEKeil MDK、ARM Development Studio 5、ADSIAR EMBEDDED WORKBENCH FOR ARM除以上兩者外的其他支持ARM的IDE,例如:eclipse、Visual Studio除以上兩者外的其他支持ARM的IDE,例如:eclipse、Visual Studio
官網https://developer.arm.com/tools-and-software/embedded/arm-compiler/downloadshttps://www.iar.com/iar-embedded-workbench/1. https://launchpad.net/gcc-arm-embedded
2. https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
https://llvm.org/

ARM

??ARM 官網上除了提供了配套 IDE(參考博文《ARM 之 各集成開發環境(IDE)說明(Keil、RVDS、ADS、DS-5、MDK)》) 以外,每次都會提供編譯器的獨立下載。用戶可以單獨安裝編譯器,編譯器采用命令行形式使用。
??也就是說,ARM 的 IDE 和編譯器是相互獨立的,使用者可以為同一個 IDE 配置不同版本的編譯器!目前,ARM 官方提供兩個版本的編譯器,如下圖所示:

??其中,Arm Compiler 6 被 ARM 稱為是 Arm Compiler 5 的替代者!相比于 Arm Compiler 5 的使用的?Edison Design Group?編譯器前端,Arm Compiler 6 將編譯器前端換為了基于 LLVM 的 Clang!

在 ARM 官網的介紹中,有如下一段話
General update releases on the last branch, version 5.06, ended in H2 2017 with 5.06u6. After this, further support and maintenance will be available through Arm Compiler Long Term Maintenance releases with maintenance continuing until at least summer 2020. Arm Compiler 5.06 for Certification and Arm Compiler 5.06 Long Term Maintenance releases will each be supported by an Arm Compiler Qualification Kit.
大意就是,Arm Compiler 5 以后就要退出舞臺了!在 ARM 內核的支持上,Arm Compiler 6 也要比 Arm Compiler 5 完善的多!
目前,ARM 官方的 IDE 都會包含這兩個版本的編譯器。例如,在 Keil MDK 的安裝目錄下面會有如下兩個目錄,分別對應了 Arm Compiler 5 和 Arm Compiler 6

上面說了,以上編譯器 ARM 也提供獨立下載安裝,具體見上文的官網地址即可!我本身安裝了多個版本的 ARM編譯器,如下:

  • Edison Design Group?是一家公司,靠賣產品給賣編譯器的公司生存,它賣的是前端,包括 C++、Java 和 Fortran 前端,全世界幾乎所有商用編譯器,都會用這家公司的前端。最重要的,這家公司只有 5 個人。
    這五個人依次是:Mike Miller, Daveed Vandevoorde, Steve Adamczyk, John Spicer, Mike Herricl。Daveed Vandevoorde 寫過兩本書《C++ Templates》和《C++ Solutions》,Mike Miller是C++專家,實現部分C++的功能。Mike Herrick在Bell實驗室呆了19年。Steve Adamczyk 和 John Spicer 是 EDG 的創建者。
  • 在最早期,ARM 的編譯器也是隨 IDE 發布的,如 ADS 時代!
  • armcc.exe

    ??ARM 指令和 Thumb? 指令編譯器。 用來編譯 C 和 C++代碼。它支持內聯和嵌入式匯編程序,還包括高級 SIMD 矢量化編譯器。
    ??編譯器支持將符合以下標準的 C 和 C ++ 源代碼編譯為 ARM 和 Thumb? 代碼:

    • ISO Standard C:1990 source.
    • ISO Standard C:1999 source.
    • ISO Standard C++:2003 source.
    • ISO Standard C++:2011 source.

    armcc?符合 Base Standard Application Binary Interface for the ARM Architectur(ARM體系結構的基本標準應用程序二進制接口,BSABI):

    • 生成 ELF 格式的對象文件。 參考博文《ARM 之 鏡像文件(Image)/可執行文件/ELF文件/對象文件 詳解》。
    • 生成基于 Debug With Arbitrary Record Format Debugging Standard Version 3 (DWARF 3) 的調試信息 并且包含對于 DWARF 2 debug tables 的支持。
    • 使用 Edison Design Group (EDG) 編譯器前端!
    D:\ARM\ARM_Compiler_5.06u4>armcc Product: ARM Compiler 5.06 Component: ARM Compiler 5.06 update 4 (build 422) Tool: armcc [4d3604]Usage: armcc [options] file1 file2 ... filen Main options:--arm Generate ARM code 創建 ARM 代碼 --thumb Generate Thumb code 創建 Thumb 代碼 --c90 Switch to C mode (default for .c files) 切換到C模式 (默認是 .c 文件) --cpp Switch to C++ mode (default for .cpp files) 切換到C++模式 (默認 .cpp 文件) -O0 Minimum optimization 最小優化級別 -O1 Restricted optimization for debugging 受限的調試級別優化 -O2 High optimization 高優化 -O3 Maximum optimization 最大優化 -Ospace Optimize for codesize 對代碼大小進行優化 -Otime Optimize for maximum performance 優化最大優化級別的運行時間 --cpu <cpu> Select CPU to generate code for 選擇CPU --cpu list Output a list of all the selectable CPUs 輸出所有被選中的CPU列表 -o <file> Name the final output file of the compilation 最終輸出文件的名字 -c Compile only, do not link 只進行編譯,不鏈接 --asm Output assembly code as well as object code 輸出匯編以及obj文件 -S Output assembly code instead of object code 只輸出匯編文件 --interleave Interleave source with disassembly (use with --asm or -S) 交叉反匯編 (use with --asm or -S) -E Preprocess the C source code only 僅僅預處理C代碼 -D<symbol> Define <symbol> on entry to the compiler 定義 <symbol> 符號并且傳入編譯過程 -g Generate tables for high-level debugging 為高級別調試創建表 -I<directory> Include <directory> on the #include search path 在編譯的時候包含 <directory> 作為頭文件搜索目錄

    其默認的頭文件搜索路徑如下圖所示:

    armasm.exe

    ?? ARM 和 Thumb 匯編器。用來匯編 ARM 和 Thumb 匯編語言源文件。

    D:\ARM\ARM_Compiler_5.06u4>armasm Product: ARM Compiler 5.06 Component: ARM Compiler 5.06 update 4 (build 422) Tool: armasm [4d35cf] For Educational purposes only Software supplied by: ARM LimitedUsage: armasm [options] sourcefileOptions: --list listingfile Write a listing file (see manual for options) 生成列表文件-o outputfile Name the final output file 命名最終輸出文件名 --depend dependfile Save 'make' source file dependencies 保留 'make' 源文件依賴 --errors errorsfile Put stderr diagnostics to errorsfile 把標準錯誤判斷放入errorsfile-I dir[,dir] Add dirs to source file search path 添加源文件的搜索目錄 --pd --predefine directive Pre-execute a SET{L,A,S} directive 預執行 SET{L,A,S} 指令 --maxcache <n> Maximum cache size (default 8MB) 最大閃存空間 (default 8MB) --no_esc Ignore C-style (\c) escape sequences 忽略C風格(\ c)轉義序列 --no_warn Turn off Warning messages 關閉警告信息-g Output debugging tables 輸出調試表 --apcs /<quals> Make pre-definitions to match thechosen procedure-call standard 進行預定義以匹配選擇的程序調用標準 --checkreglist Warn about out of order LDM/STM register lists 警告LDM/STM寄存器列表出現故障 --help Print this information 打印幫助信息 --li Little-endian ARM 小端模式的 ARM --bi Big-endian ARM 大端模式的 ARM-M Write source file dependency lists to stdout 將源文件依賴關系列表寫入stdout --MD Write source file dependency lists to inputfile.d 將源文件依賴關系列表寫入inputfile.d --keep Keep local labels in symbol table of object file 將本地標簽保存在目標文件的符號表中 --regnames none Do not predefine register names 不預定義寄存器名稱 --split_ldm Fault long LDM/STM --unsafe Downgrade certain errors to warnings 將某些錯誤降級為警告 --via <file> Read further arguments from <file> 從<file>中讀取更多參數 --cpu <target-cpu> Set the target ARM core type 設置目標ARM核心類型 --cpu list Output a list of all the selectable CPUs 輸出所有可選CPU的列表 --fpu <target-arch> Set target FP architecture version 設置目標FP架構版本 --fpu list Output a list of all selectable FP architectures 輸出所有可選FP架構的列表 --thumb Assemble Thumb instructions 匯編 Thumb 指令 --arm Assemble ARM instructions 匯編 ARM 指令

    armlink.exe

    ??The linker. This combines the contents of one or more object files with selected parts of one ormore object libraries to produce an executable program.A 64-bit version of armlink is also provided that can access the greater amount of memoryavailable on 64-bit machines. It supports all the features that are supported by the 32-bit versionof armlink in this release. 連接器。用于將一個或多個目標文件的內容與一個或多個對象庫的選定部分組合在一起,以生成可執行程序。還提供了 64 位版本的?armlink,可以訪問 64 位計算機上可用的更大內存量。它支持此版本中 32 位版本的 armlink 支持的所有功能。
    ??If you are using ARM Compiler as a standalone product, then the 32-bit version is used bydefault. 如果您使用 ARM 編譯器作為獨立產品,則默認使用 32 位版本。
    ??For ARM Compiler in DS-5, the linker version depends on the host platform. 32-bit tools havethe 32-bit linker and 64-bit tools have the 64-bit linker. You do not get both versions.For the Microcontroller Developer Kit (MDK), only the 32-bit linker is provided. 對于 DS-5 中的 ARM 編譯器,鏈接器版本取決于主機平臺。 32 位工具具有32位鏈接器,64 位工具具有 64 位鏈接器。 您沒有獲得這兩個版本。對于微控制器開發工具包(MDK),僅提供 32 位鏈接器。

    D:\ARM\ARM_Compiler_5.06u4>armlink Product: ARM Compiler 5.06 Component: ARM Compiler 5.06 update 4 (build 422) Tool: armlink [4d35d2] For Educational purposes only Software supplied by: ARM LimitedUsage: armlink option-list input-file-list whereoption-list is a list of case-insensitive options. 不區分大小寫的選項列表。input-file-list is a list of input object and library files. 輸入對象或者庫文件列表。General options (abbreviations shown capitalised):--help Print this summary. 顯示幫助信息。--output file Specify the name of the output file. 指定輸出文件名。--via file Read further arguments from file.Options for specifying memory map information:--partial Generate a partially linked object. 創建一個被分散鏈接的對象文件。--scatter file Create the memory map as described in file. 按文件(分散加載文件)中的描述創建內存映射。--ro-base n Set exec addr of region containing RO sections. 設置執行地址空間域,包含RO段(只讀數據段)。--rw-base n Set exec addr of region containing RW/ZI sections. 設置執行地址空間域,包含RW/ZI段。Options for controlling image contents:--bestdebug Add debug information giving best debug view to image. 添加調試信息,為鏡像提供最佳調試視圖。--datacompressor offDo not compress RW data sections. 不要壓縮RW數據段。--no_debug Do not add debug information to image. 不添加調試信息。--entry Specify entry sections and entry point. 指定輸入段與輸入點。--libpath Specify path to find system libraries from. 指定系統庫文件路徑。--userlibpath Specify path to find user libraries from. 指定用戶庫文件路徑。--no_locals Do not add local symbols to image symbol table. 不要添加局部標號到image的標號列表。--no_remove Do not remove unused sections from image. 不要移除image的未使用段。Options for controlling image related information:--callgraph Create a static callgraph of functions. 創建一個函數靜態調用圖。--feedback file Generate feedback that can be used by the compiler in file.--info topic List misc. information about image.Available topics: (separate multiple topics with comma)common List common sections eliminated from the image.debug List eliminated input debug sections.sizes List code and data sizes for objects in image.totals List total sizes of all objects in image.veneers List veneers that have been generated.unused List sections eliminated from the image.--map Display memory map of image. 顯示image內存映射。--symbols List symbols in image. 列出image符號。--xref List all cross-references between input sections. 列出輸入的段之間所有的交叉引用.最終輸出會放在.map文件里面。

    armar.exe

    The librarian. This enables sets of ELF object files to be collected together and maintained inarchives or libraries. You can pass such a library or archive to the linker in place of several ELFfiles. You can also use the archive for distribution to a third party for further applicationdevelopment. 庫文件管理工具。 這使得 ELF 對象文件集可以一起收集并維護在原始文件或庫中。 您可以將此類庫或存檔傳遞給鏈接器以代替多個ELF文件。 您還可以使用存檔分發給第三方以進行進一步的應用程序開發。

    D:\ARM\ARM_Compiler_5.06u4>armar Product: ARM Compiler 5.06 Component: ARM Compiler 5.06 update 4 (build 422) Tool: armar [4d35c8]Archive creation and maintenance toolCommand format:armar options archive [ file_list ]Wildcards '?' and '*' may be used in file_listOptions:--r Insert files in <file_list>, replace existing members of the same name. 在 <file_list> 中插入文件, 替換掉已經存在的同名成員。-d Delete the members in <file_list>. 從 <file_list> 中刪除成員。-x Extract members in <file_list> placing in files of the same name. 從 <file_list> 中提取同名的成員。-m Move files in <file_list>. 在 <file_list> 中移動文件。-p Print files to stdout. 打印文件到標準輸出設備。-a pos Insert/move files after file named <pos>. 插入/刪除 <pos> 后面的文件。-b pos Insert/move files before file named <pos>. 插入/刪除 <pos> 前面的文件。-u Update older files only, used with -r. 只更新舊的文件, 與 -r 一起使用。-n Do not add a symbol table to an object archive. 不要向 object 文件中添加符號表。-s Force regeneration of archive symbol table. 強制重新生成文檔符號表。-t Print table of contents of archive. 打印文檔的內容表。 --zs Show the symbol table. 顯示符號表。 --zt Summarize the archive contents (sizes + entries). 匯總文檔內容 (大小和輸入)。-c Suppress warning when a new archive is created. 當一個新文檔被創建的時候不顯示警告。-C Do not overwrite existing files when extracting. 提取的時候不要覆蓋一個已經存在的文件。-T Truncate file names to system maximum length. 截取系統最大長度文件名。-v Give verbose output. 提供詳細輸出。 --create Force creation of a new archive. 強制創建一個新文檔。 --via file Take additional arguments from via file. 從 via 文件中獲取額外參數。 --sizes List the size of each member and the library total. 列出所有成員大小與庫的總大小。 --entries List sections containing ENTRY points. 列出包括入口點的部分。 --vsn Print the current Armar Version. 打印最新的armar版本。 --help Print this message. 打印幫助信息。Examples:-armar -r mylib.a obj1 obj2 obj3...armar -x mylib.a ?sort*armar -d mylib.a hash.oarmar -tv ansilib.a

    fromelf.exe

    The image conversion utility. This can also generate textual information about the input image,such as its disassembly and its code and data size.鏡像轉換實用程序。 這還可以生成有關輸入圖像的文本信息,例如其反匯編及其代碼和數據大小。

    D:\ARM\ARM_Compiler_5.06u4>fromelf Product: ARM Compiler 5.06 Component: ARM Compiler 5.06 update 4 (build 422) Tool: fromelf [4d35cb]ARM image conversion utility. ARM 鏡像轉換工具 fromelf [options] input_fileOptions:--help display this help screen 顯示幫助信息--vsn display version information 顯示版本信息--output file the output file. (defaults to stdout for -text format) 輸出文件名. (默認輸出 -text 格式)--nodebug do not put debug areas in the output image 不要輸出調試信息到映像文件中--nolinkview do not put sections in the output image 不要輸出段信息到映像文件中Binary Output Formats:--bin Plain Binary 普通二進制--m32 Motorola 32 bit Hex 摩托羅拉32位Hex碼--i32 Intel 32 bit Hex 英特爾32位Hex碼--vhx Byte Oriented Hex format 定向字節的 Hex 格式--base addr Optionally set base address for m32,i32 為 m32,i32設置基地址(可選的)Output Formats Requiring Debug Information 輸出格式要求的調試信息--fieldoffsets Assembly Language Description of Structures/Classes. Structures/Classes的匯編描述--expandarrays Arrays inside and outside structures are expanded. 展開內部和外部結構的數組Other Output Formats:--elf ELF ELF格式--text Text Information 文本信息Flags for Text Information 文本信息的標志-v verbose 詳細信息-a print data addresses (For images built with debug) 打印數據的地址信息 (得到的.axf映像文件)-c disassemble code 匯編碼-d print contents of data section 打印數據的段內容-e print exception tables 打印異常表-g print debug tables 打印調試表-r print relocation information 打印重定位信息-s print symbol table 打印符號表-t print string table 打印字符表-y print dynamic segment contents 打印動態段內容-z print code and data size information 打印代碼與數據的大小信息

    IAR

    ??相比于 ARM 對于編譯器的靈活安裝,IAR 的編譯器則只跟隨其 IDE 發布,編譯器不獨立提供。IAR 安裝后,目錄就是下面這個樣子了:

    這里我們重點關注一下arm目錄下的相關內容。其中內容有很多,這里主要介紹一下編譯器相關的那些,首先看下圖

    ??我們可以手動提取其編譯器,來作為命令行工具使用。但是對于 IAR 還是不建議這么用,個人感覺 IAR 在設計時,估計沒考慮過讓用戶使用命令行模式來獨立使用編譯套件,因為其編譯套件和其他好多東西都放在了一個目錄中,不像ARM 將編譯套件獨立存放。但是,IAR 的編譯套件是支持命令行使用的?,在其介紹文檔中有這么一句話:The compiler, assembler, and linker can also be run from a command line environment,if you want to use them as external tools in an already established project environment.?官方的介紹文檔主要就是《 IAR C/C++ Development Guide Compiling and Linking》。

  • IAR 我用的比較少,主要內容來自于官方文檔。管方文檔更加詳細,如有疑問直接去官方文檔查看即可!官方文檔目錄為?IAR安裝目錄\arm\doc。具體如下:
  • 《 IAR C/C++ Development Guide Compiling and Linking》,文檔名為 EWARM_DevelopmentGuide.ENU.pdf
  • 《IAR Assembler Reference Guide》,文檔名為 EWARM_AssemblerReference.ENU.pdf
  • 《C-STAT? Static Analysis Guide》,文檔名為 EW_MisraC1998Reference.ENU.pdf
  • 還可以直接從 IAR 的 IDE 的菜單進入:菜單 -> help
  • iasmarm.exe

    ??這個是 IAR 的匯編語言的編譯器。官方文檔是這么介紹的:The IAR Assembler for Arm is a powerful relocating macro assembler with a versatile set of directives and expression operators. The assembler features a built-in C language preprocessor and supports conditional assembly.?大意就是: IAR Assembler for Arm 是一個功能強大的重定位宏匯編程序,具有多種指令和表達式運算符。 匯編程序具有內置的 C 語言預處理程序,并支持條件匯編。該工具官方有個獨立的說明文檔《IAR Assembler Reference Guide》,里面有該工具的詳細使用說明。

    E:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\bin>iasmarmIAR Assembler V8.32.3.193/W32 for ARMCopyright 1999-2019 IAR Systems AB.Usage: iasmarm {<options>} <sourcefile> {<options>} Sourcefile: source file with default extension: .msa, , .asm, or .sEnvironment: IASMARM Options (specified order is of no importance): -B Print debug info for assembler macros -c{DEAOM} Listing optionsD: Disable listing, E: Disable macro expansionA: List only assembled part O: List several lines of codeM: List Macro definition -DSYMB Equivalent to: #define SYMB 1 -DSYMB=xx Equivalent to: #define SYMB xx -e Use big-endian byte order -Enumber Allow <number> errors -f file Extend command line with <file> <.xcl> -g No system include -G Open standard input as source -i List #included files -Ipath Add #include search path -j Enable alternative register names, operators and mnemonics -l file Generate a list on: <file> <.lst> -Lpath Generate a list on: <path> \ <source> <.lst> -Mab Change asm.macro argument quote chars,where a is start-of-quote and b is end-of-quote char.default is a == < and b == >. -N No header in listing -o file Put object on: <file> <.o> -Opath Put object on: <path> \ <source> <.o> -pnn Page listing with 'nn' lines/page (10-150) -r Enable debugger output in object -S Silent operation of assembler -s{+|-} Set case sensitivity for user symbols-s and -s+ enables sensitivity, -s- disables it. -tn Set tab spacing between 2 and 9 (default 8) -USYMB Equivalent to: #undef SYMB -ws To make warnings generate exit code 1 -wstring Disable warningsstring: <+|-,><+|-range><,+|-range>...range: low_warning_nr<-high_warning_nr>example: -w turns all warnings off-w-,+10-12,+20 turns all but 10,11,12 and 20 off-x{DI2} Generate cross-reference listD: Show all #defines, I: Show Internal table2: Dual line space listing --aarch64 Generate code for AArch64, same as --cpu_mode A64--abi {lp64|ilp32}Specify ABI for AArch64: ilp32 or lp64. --arm Generate code in arm mode, same as --cpu_mode arm--cmseTarget secure mode in CMSE (ARMv8-M security extensions) --cpu core Specify target coreValid options are core names such as Cortex-M3and architecture names such as 7MDefault is Cortex-M3 --cpu_mode {arm|a|thumb|t}Select default mode for CODE directive, ARM is default--endian {little|l|big|b}Specify target byte order --fpu {VFPv1|VFPv2|VFPv3{_D16}{_FP16}|VFP9-S|none}Specify target FPU coprocessor supportDefault is none, which selects the softwarefloating-point library. --legacy {legacyOption}Generate object files compatible witholder toolchains. Valid options are:RVCT3.0 --no_dwarf3_cfiSuppress Dwarf 3 Call Frame Information instructions --no_it_verificationDo not verify that the instructions followingan IT instruction has the correct condition set--no_literal_poolUse MOV32 for LDR Rd,=expr (requires ARMv7-M) --no_path_in_file_macrosStrip path from __FILE__ macros --source_encoding {locale|utf8} Encoding to use for source files with no BOM --suppress_vfe_headerDo not generate VFE header info--system_include_directory <path>Set system header directory --thumb Generate code in thumb mode, same as --cpu_mode thumb--version Output version info and exit

    iccarm.exe

    ??這個是 IAR 的 C/C++ 編譯器。官方文檔是這么介紹的:The IAR C/C++ Compiler for Arm is a state-of-the-art compiler that offers the standard features of the C and C++ languages, plus extensions designed to take advantage of the Arm-specific facilities.大意就是: IAR C / C ++ Compiler for Arm是一個最先進的編譯器,提供 C 和 C++ 語言的標準功能,以及旨在利用 Arm 特定功能的擴展。
    ??默認使用的頭文件目錄.\arm\inc\<vendor>

    E:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\bin>iccarmIAR ANSI C/C++ Compiler V8.32.3.193/W32 for ARMCopyright 1999-2019 IAR Systems AB.PC-locked license - IAR Embedded Workbench for ARMAvailable command line options: --aapcs {std|vfp}Specify calling convention. --aeabi Generate aeabi compliant code --align_sp_on_irqGenerate code to align SP on entry to __irq functions --arm Generate code in arm mode, same as --cpu_mode arm --c++ C++ --c89 Use C89 standard --char_is_signed'Plain' char is treated as signed char --char_is_unsigned'plain' char is treated as unsigned char --cmse Enable CMSE secure object generation --cpu core Specify target coreValid options are core names such as Cortex-M3and architecture names such as 7MCortex-M3 is default --cpu_mode {arm|a|thumb|t}Select default mode for functions, arm is default -D symbol[=value]Define macro (same as #define symbol [value]) --debug -r Insert debug info in object file --dependencies=[i|m|n][s][lw][b] file|directory|+List file dependenciesi Include filename only (default)m Makefile style (multiple rules)n Makefile style (one rule)s Don't include system file dependenciesl Use locale encoding instead of UTF-8w Use little endian UTF-16 instead of UTF-8b Use a Byte Order Mark in UTF-8 output(+: output same as -o, only with .d extension) --deprecated_feature_warnings [+|-]feature,[+|-]feature,...Enable (+) or disable (-) warnings about deprecated features:attribute_syntax Warn about attribute syntax thatwill changepreprocessor_extensions Warn about use of migrationpreprocessor extensionssegment_pragmas Warn about use of #pragma constseg/dataseg/memory --diagnostics_tables file|directoryDump diagnostic message tables to file --diag_error tag,tag,...Treat the list of tags as error diagnostics --diag_remark tag,tag,...Treat the list of tags as remark diagnostics --diag_suppress tag,tag,...Suppress the list of tags as diagnostics --diag_warning tag,tag,...Treat the list of tags as warning diagnostics --discard_unused_publicsDiscard unused public functions and variables --dlib_config name|pathSpecify DLib library configuration --do_explicit_zero_opt_in_named_sectionsAllow zero init optimization for variables in namedsections/segments -e Enable IAR C/C++ language extensions --enable_hardware_workaround waid[,waid[...]]Generate hardware workaround for specified problem --enable_restrictEnable the restrict keyword --endian {little|l|big|b}Select byte order, little-endian is default --enum_is_int Force the size of all enumeration types to be at least 4 bytes --error_limit limitStop after this many errors (0 = no limit) -f file Read command line options from file --f file Read command line options from file and report dependency --fpu {VFPv2|VFPv3{_D16}{_FP16}|VFPv4{_sp}|VFP9-S|none}Specify target FPU coprocessor supportDefault is none, which selects the softwarefloating-point library. --generate_entries_without_boundsGenerate functions for use from non-instrumented code --guard_calls Use a guard call for a function static initialization --header_contextAdds include file context to diagnostics -I directory Add #include search directory --ignore_uninstrumented_pointersDisable checking of accesses via pointers from uninstrumentedfunctions -l[c|C|D|E|a|A|b|B][N][H] file|directoryOutput list filec C source listingC with assembly codeD with pure assembly codeE with non-sequential assembly codea Assembler fileA with C sourceb Basic assembler fileB with C sourceN Do not include diagnosticsH Include header file source lines --lock_regs registersPrevent compiler from using specified registers (R4-R11). --macro_positions_in_diagnosticsUse positions inside macros in diagnostics --make_all_definitions_weakMake all variable and function definitions weak --max_cost_constexpr_call limitMaximum cost (number of calls/number of loop iterations) whenevaluating a top-level constexpr call --max_depth_constexpr_call limitMaximum depth of recursion when evaluating a top-levelconstexpr call --mfc Enable multiple file compilation --misrac1998[=arg,arg,...]Enable MISRA-C 1998 diagnosticsall Enable all rulesrequired Enable all required rulesi Enable rule ii-j Enable rule i through j~i Disable rule i~i-j Disable rule i through j --misrac2004[=arg,arg,...]Enable MISRA-C 2004 diagnosticsall Enable all rulesrequired Enable all required rulesX Enable rule or chapterX-Y Enable range~X Disable rule or chapter~X-Y Disable rangewhere X and Y is one of:i All rules in chapter ii.j Rule i.j --misrac_verboseEnable verbose MISRA C messages --nonportable_path_warningsEnable warning for non-matching case in paths --no_alignment_reductionDisable alignment reduction of simple thumb functions --no_bom Don't use a Byte Order Mark in Unicode output --no_call_frame_infoSuppress output of call frame information --no_clustering Disable static clustering for static and global variables --no_code_motionDisable code motion --no_const_alignTurn off the alignment optimization for constants --no_cse Disable common sub-expression elimination --no_exceptions Disable C++ exception support --no_fragments Do not generate section fragments --no_inline Disable function inlining --no_literal_poolGenerate code that does not issue read request to .text --no_loop_align Disable alignment of labels in loops (Thumb2) --no_mem_idioms Disable idiom recognition for memcpy/memset/memclr --no_path_in_file_macrosStrip path from __FILE__ and __BASE_FILE__ macros --no_rtti Disable C++ runtime type information support --no_rw_dynamic_initDon't allow C-object to be initialized at runtime --no_scheduling Disable instruction scheduling --no_size_constraintsRemove limits for code expansion --no_static_destructionDo not emit code to destroy C++ static variables --no_system_includeDo not search in the default system header directory --no_tbaa Disable type based alias analysis --no_typedefs_in_diagnosticsDo not use typedefs when printing types --no_unaligned_accessDon't generate unaligned accesses --no_uniform_attribute_syntaxUse old meaning for IAR type attributes before initial type --no_unroll Disable loop unrolling --no_var_align Turn off the alignment optimization for variables --no_warnings Disable generation of warnings --no_wrap_diagnosticsDon't wrap long lines in diagnostic messages -O[n|l|m|h|hs|hz]Select level of optimization:n No optimizationsl Low optimizations (default)m Medium optimizationsh High optimizationshz High optimizations, tuned for small code sizehs High optimizations, tuned for high speed(-O without argument) The same setting as -Oh --only_stdout Use stdout only (no console output on stderr) --output file|path -o file|path Specify object file --pending_instantiations limitMaximum number of instantiations of a given template inprogress at a time (0 -> no limit) --predef_macros file|directoryOutput predefined macros --preinclude filenameInclude file before normal source --preprocess=[c][n][s] file|directoryPreprocessor outputc Include commentsn Preprocess onlys Suppress #line directives --public_equ symbol[=value]Define public assembler symbol (EQU) --relaxed_fp Enable floating point optimizations that may affect the result --remarks Enable generation of remarks --require_prototypesRequire prototypes for all called or public functions --ropi Generate read-only position independent code --runtime_checking check,check,...Instrument code to do runtime checks for the selected problems:bounds Check pointer boundsbounds_no_checks Track pointer bounds, but emit no checksdiv_by_zero Check division by zeroimplicit_integer_conversionCheck only implicit integer conversioninteger_conversion Check any integer conversionsigned_overflow Check for signed integer overflowsigned_shift Check for overflow in signed shiftswitch Check for unhandled cases in switchstatementsunsigned_overflow Check for unsigned integer overflowunsigned_shift Check for overflow in unsigned shift --rwpi Generate read-write position independent code --rwpi_near Generate read-write position independent code --section section-name=new section-nameRename section --silent Silent operation --source_encoding {locale|utf8}Encoding to use for source files with no BOM --stack_protectionInsert stack smash protection --strict Strict C/C++ standard language rules --system_include_dir directorySet system header directory --text_out encodingEncoding to use for text output filesutf8 UTF-8utf16le Little-endian UTF-16utf16be Big-endian UTF-16locale Locale specific encoding --thumb Generate code in thumb mode, same as --cpu_mode thumb --uniform_attribute_syntaxSame syntax for IAR type attributes as for const/volatile --use_c++_inlineUse C++ inline semantics in C mode --use_paths_as_writtenUse paths as written in debug information(normally absolute paths are used) --use_unix_directory_separatorsUse forward slashes in paths in debug information --utf8_text_in Non-source text input files with no BOM use UTF-8 encoding --vectorize Perform autovectorization --version Output version information and exit --vla Allow variable length arrays --warnings_affect_exit_codeWarnings affect exit code --warnings_are_errorsAll warnings are errors --warn_about_c_style_castsWarn about uses of C-style casts in EC++/C++

    IDE中有兩個工具可將應用程序源文件轉換為中間文件目標文件。 IAR C / C ++編譯器和IAR匯編器。 兩者都產生行業標準格式ELF中的可重定位目標文件,包括DWARF調試信息的格式。下圖顯示了編譯過程:

    ilinkarm.exe

    ??這個是 IAR 的連接器。官方文檔是這么介紹的:The IAR ILINK Linker for Arm is a powerful, flexible software tool for use in the development of embedded controller applications. It is equally well suited for linking small, single-file, absolute assembler programs as it is for linking large, relocatable input, multi-module, C/C++, or mixed C/C++ and assembler programs.?大意就是:IAR ILINK Linker for Arm 是一款功能強大,靈活的軟件工具,可用于嵌入式控制器應用程序的開發。 它同樣適用于鏈接小型,單文件,絕對匯編程序,因為它用于鏈接大型可重定位輸入,多模塊,C/C++ 或混合 C/ C++ 和匯編程序。
    ??ilinkarm?使用并生成行業標準的 ELF 和 DWARF 作為對象格式文件。在.\arm\config目錄下,包含了針對各平臺的連接器使用的配置文件。

    E:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\bin>ilinkarmIAR ELF Linker V8.32.3.193/W32 for ARMCopyright 2007-2019 IAR Systems AB.Available command line options: --advanced_heap Use an advanced heap manager. --basic_heap Use a basic heap manager --BE32 Use old type big-endian mode. --BE8 Use byte invariant mode. --bounds_table_size number_of_records[:number_of_buckets]|(number_of_bytes)Specify size of bounds checking tables --call_graph file|directoryProduce an XML call graph file --config file Read linker configuration from file --config_def symbol=valueDefine a config symbol --config_search directoryLook for config files in directory --cpp_init_routine symbolSpecify C++ dynamic init routine name --cpu core Specify target coreValid options are core names such as Cortex-M3and architecture names such as 7Mdefault is extracted from objects --debug_heap Use heap with runtime checks --default_to_complex_rangesMake "complex ranges" the default in initialize directives --define_symbol symbol=valueDefine absolute symbol --dependencies=[i|m|n][s][lw][b] file|directory|+List file dependenciesi Include filename only (default)m Makefile style (multiple rules)n Makefile style (one rule)s Don't include system file dependenciesl Use locale encoding instead of UTF-8w Use little endian UTF-16 instead of UTF-8b Use a Byte Order Mark in UTF-8 output(+: output same as -o, only with .d extension) --diagnostics_tables file|directoryDump diagnostic message tables to file --diag_error tag,tag,...Treat the list of tags as error diagnostics --diag_remark tag,tag,...Treat the list of tags as remark diagnostics --diag_suppress tag,tag,...Suppress the list of tags as diagnostics --diag_warning tag,tag,...Treat the list of tags as warning diagnostics --do_segment_padPad segments to 4 byte alignment --enable_hardware_workaround waid[,waid[...]]Generate hardware workaround for specified problem --enable_stack_usageEnable stack usage analysis --entry symbol Set program entry point --error_limit limitStop after this many errors (0 = no limit) --exception_tables actionGenerate exception tables for modules lacking themnocreate Do not generate entries (default)unwind Generate unwind entriescantunwind Generate nounwind entries --export_builtin_config file|directoryExport the builtin configuration --extra_init routineCall extra init routine if defined -f file Read command line options from file --f file Read command line options from file and report dependency --force_exceptionsAlways include exception code --force_output Produce an output file in spite of errors --fpu {VFPv1|VFPv2|VFPv3{_D16}{_FP16}|VFP9-S|none}Specify target FPU coprocessor supportDefault is extracted from objects. --ignore_uninstrumented_pointersDisable checking of accesses via pointers in memory withno bounds --image_input file[,symbol[,section[,alignment]]]Put image file in section --import_cmse_lib_in fileRead previous version of import library for building non-secure image --import_cmse_lib_out file|directoryProduce import library for building non-secure image --inline Try to inline small functions. --keep symbol Require global symbol --log topic,topic,...Do log output for the selected topicscall_graph Call graph with stack usagecrt_routine_selectionCRT routine implementation selectiondemangle Demangle symbols in log outputfragment_info Supplementary info for --log sectionsinitialization Initialization decisionsinlining Small function inlininglibraries Automatic library selectionmerging Results of --merge_duplicate_sectionsmodules Module selectionredirects Redirected symbolssections Section fragment selectionunused_fragments Unused section fragmentsveneers Veneer statistics --log_file file Specify file for log output --mangled_names_in_messagesInclude mangled symbol names in diagnostics --manual_dynamic_initializationDon't perform dynamic initialization during startup --map file|directoryProduce a linker list file --merge_duplicate_sectionsMerge equivalent read-only sections --misrac1998[=arg,arg,...]Enable MISRA-C 1998 diagnosticsall Enable all rulesrequired Enable all required rulesi Enable rule ii-j Enable rule i through j~i Disable rule i~i-j Disable rule i through j --misrac2004[=arg,arg,...]Enable MISRA-C 2004 diagnosticsall Enable all rulesrequired Enable all required rulesX Enable rule or chapterX-Y Enable range~X Disable rule or chapter~X-Y Disable rangewhere X and Y is one of:i All rules in chapter ii.j Rule i.j --misrac_verboseEnable verbose MISRA C messages --no_bom Don't use a Byte Order Mark in Unicode output --no_dynamic_rtti_eliminationDisable dynamic rtti elimination --no_entry This program has no entry point --no_exceptions Signal an error if exceptions are used --no_fragments Always link entire sections --no_free_heap Use a heap manager with no 'free' --no_inline func,func,...Do not inline any of the specified functions --no_library_searchDisable automatic runtime library search --no_literal_poolDon't generate literal pool in code memory --no_locals Do not include local symbols in output symbol table --no_range_reservationsDo not reserve address ranges for absolute symbols --no_remove Do not remove unused sections --no_vfe Disable Virtual Fuction Elimination --no_warnings Disable generation of warnings --no_wrap_diagnosticsDon't wrap long lines in diagnostic messages --only_stdout Use stdout only (no console output on stderr) --output file -o file Specify output file --pi_veneers Generate position independent veneers. --place_holder symbol[,size[,section[,alignment]]]Reserve a place in ROM for later use --preconfig fileRead before normal linker configuration file --printf_multibytesEnable multibyte support in printf & friends --redirect orig=replacementRedirect symbol refs to replacement symbol --remarks Enable generation of remarks --scanf_multibytesEnable multibyte support in scanf & friends --search directory -L directory Look for object and library files in directory --semihosting[=iar_breakpoint]Link with debug interface.Specify interface to override default. --silent Silent operation --stack_usage_control fileRead stack usage control file --strip Do not include debug information --text_out encodingEncoding to use for text output filesutf8 UTF-8utf16le Little-endian UTF-16utf16be Big-endian UTF-16locale Locale specific encoding --threaded_lib Configure runtime library for use with threads --timezone_lib Enable timezone and daylight savings support --treat_rvct_modules_as_softfplink softfp versions of math function for modulescompiled with RVCT even though they are built withvfp calling-convention --use_full_std_template_namesDon't use short names for standard C++ templates --use_optimized_variants no|auto|small|fastUse optimized variants of DLIB library functionsno Do not use redirects to use optimized variantsauto Use redirects based on attributes in object files(default)small Always use a small variant if availablefast Always use a fast variant if available --utf8_text_in Non-source text input files with no BOM use UTF-8 encoding --version Output version information and exit --vfe=[forced] Perform Virtual Function Eliminationforced Force the use of VFE for all moduleswith VFE information. --warnings_affect_exit_codeWarnings affect exit code --warnings_are_errorsAll warnings are errors --whole_archive archiveLink all modules in archive

    IAR ILINK鏈接器(ilinkarm.exe)用于構建最終應用程序。通常,鏈接器需要以下信息作為輸入:

    • 幾個目標文件,可能還有某些庫
    • 程序開始標簽(默認設置)
    • 鏈接器配置文件,用于描述目標系統內存中代碼和數據的放置

    下圖顯示了鏈接過程:

    IAR ILINK鏈接器生成ELF格式的絕對目標文件,其中包含可執行鏡像。 鏈接后,可以使用生成的絕對可執行映像

    • 加載到IAR C-SPY調試器或任何其他兼容的外部調試器讀取ELF和DWARF。
    • 使用flash / PROM編程器對flash / PROM進行編程。 在此之前可能必須使用ielftool將鏡像中的實際字節轉換為標準的Motorola 32-bit S-record 格式或Intel Hex-32格式。

    iarchive.exe

    ??檔案管理工具,類似于 ARM 的?armar?和 GCC 的?ar。用于創建和操作幾個ELF目標文件的庫(存檔)。庫文件包含多個可重定位的 ELF 對象模塊,每個模塊都可以由鏈接器獨立使用。 與直接指定給鏈接器的對象模塊相比,只有在需要時才包含庫中的每個模塊。

    E:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\bin>iarchiveIAR Archive Tool V10.4.14.1149Copyright 2008-2019 IAR Systems AB.Usage: iarchive [command] archive obj1 ... objNiarchive [command] obj1 ... objN -o archiveiarchive [command] archiveAvailable command line options: --create Create new archive --delete -d Delete module(s) from archive --extract -x Extract module(s) from archive -f file Read command line options from file --f file Read command line options from file and report dependency --no_bom Don't use a Byte Order Mark in Unicode output --output archive -o archive Name of archive file --replace -r Replace or add module(s) to archive --symbols List symbol table of archive --text_out encodingEncoding to use for text output filesutf8 UTF-8utf16le Little-endian UTF-16utf16be Big-endian UTF-16locale Locale specific encoding --toc -t List archive table of content --utf8_text_in Non-source text input files with no BOM use UTF-8 encoding --verbose -V verbose operation --version Output version information and exit --vtoc List archive table of content (verbose)

    使用示例:

  • 使用源對象文件module1.o、module.2.o和module3.o?創建了一個名為mylibrary.a的庫文件:iarchive mylibrary.a module1.o module2.o module3.o
  • 列出 mylibrary.a中的內容:iarchive --toc mylibrary.a
  • This example replaces module3.o in the library with the content in the module3.o file and appends module4.o to mylibrary.a:iarchive --replace mylibrary.a module3.o module4.o
  • ielftool.exe

    ??ARM ELF 文件工具,類似于 ARM 的?fromelf?和 GCC 的?elfedit。對 ELF 可執行映像執行各種轉換(例如,填充,校驗和,格式轉換等)。安裝目錄.\arm \ src\elfutils下提供了 ielftool 源代碼(Microsoft VisualStudio項目)。 如果對如何生成校驗和或格式轉換要求有特定要求,則可以相應地修改源代碼。

    E:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\bin>iarchiveIAR Archive Tool V10.4.14.1149Copyright 2008-2019 IAR Systems AB.Usage: iarchive [command] archive obj1 ... objNiarchive [command] obj1 ... objN -o archiveiarchive [command] archiveAvailable command line options: --create Create new archive --delete -d Delete module(s) from archive --extract -x Extract module(s) from archive -f file Read command line options from file --f file Read command line options from file and report dependency --no_bom Don't use a Byte Order Mark in Unicode output --output archive -o archive Name of archive file --replace -r Replace or add module(s) to archive --symbols List symbol table of archive --text_out encodingEncoding to use for text output filesutf8 UTF-8utf16le Little-endian UTF-16utf16be Big-endian UTF-16locale Locale specific encoding --toc -t List archive table of content --utf8_text_in Non-source text input files with no BOM use UTF-8 encoding --verbose -V verbose operation --version Output version information and exit --vtoc List archive table of content (verbose)E:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\bin>ielftoolIAR ELF Tool V10.4.14.1149 [BUILT at IAR]Copyright 2007-2019 IAR Systems AB.Usage: ielftool input_file output_fileAvailable command line options: --bin Save as raw binary --checksum sym:size,algo[:[1|2][a|m|z][r][R][o][x][i|p][W|L]][,start];range[;range...]Generate checksumsym Checksum symbolsize Length of the symbol in bytesalgo Algorithm: sum, sum8wide, sum32, crc16, crc32crc64iso, crc64ecma or crc=poly1|2 Complement: 1 or 2a|m|z Reverse the bit order for:input bytes only: ainput bytes and final checksum: mfinal checksum only: zo Output the Rocksoft model specificationr Reverse the byte order within each wordR Traverse the range(s) in reverse orderx Toggle the endianess of the checksumi|p Use initial value normally: iPrefix input data with the start value: pW|L Use a checksum unit length of 2 bytes: WUse a checksum unit length of 4 bytes: Lstart Initial checksum value (defaults to 0)range Do checksum of bytes in range --fill [v;]pattern;range[;range...]Specify fillv Virtual fill, do not generate actual filler bytes.This can be used for checksums and parities.pattern Sequence of filler bytesrange Fill range --front_headers Move program and section headers to the front of the ELF file. --ihex Save as 32-bit linear Intel Extended hex --offset [-]offsetAdd (subtract if - is used) offset to all address records.This only works for the output formats: Motorola S-records,Intel Hex, Simple-Code and TI-TXT --parity sym:size,algo:flashbase[:[r][[B|W|L]];range[;range...]Generate parity bitssym Parity symbolsize Length of the symbol in bytesalgo Parity algorithm: odd, evenflashbase Ignore bytes before this addressr Traverse the range(s) in reverse orderB Use a parity unit length of 1 byteW Use a parity unit length of 2 bytesL Use a parity unit length of 4 bytesrange Perform parity on bytes in this range --self_reloc relocator[,jtc]Create self-relocating image with relocatorjtc Number of jump table entries --silent Silent operation --simple Save as Simple-code --simple-ne Save as Simple-code without entry record --srec Save as Motorola S-records --srec-len lengthRestrict the length of S-records --srec-s3only Restrict the type of S-records to S3 (and S7) --strip Remove all section headers and non-program sections --titxt Save as Texas Instruments TI-TXT --verbose Print all performed operations --version Output tool version

    使用示例:

  • This example fills a memory range with 0xFF and then calculates a checksum on the same range:ielftool my_input.out my_output.out --fill 0xFF;0–0xFF --checksum __checksum:4,crc32;0–0xFF
  • ielfdumparm.exe

    ??針對 ARM ELF 格式的文件的 Dumper工具。類似于 GCC 的?objdump,用于創建ELF可重定位或可執行映像內容的文本表示。主要用于以下三個方面:

    • To produce a listing of the general properties of the input file and the ELF segments and ELF sections it contains. This is the default behavior when no command line options are used.生成輸入文件的常規屬性列表以及它包含的ELF段和ELF節。 當沒有使用命令行選項時,這是默認行為。
    • To also include a textual representation of the contents of each ELF section in the input file. To specify this behavior, use the command line option --all .還包括輸入文件中每個ELF部分內容的文本表示。 要指定此行為,請使用命令行選項–all。
    • To produce a textual representation of selected ELF sections from the input file. To specify this behavior, use the command line option --section 從輸入文件生成所選ELF節的文本表示。 要指定此行為,請使用命令行選項–section
    E:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\bin>ielfdumparmIAR ELF Dumper V8.32.3.193 for ARMCopyright 2007-2019 IAR Systems AB.Usage: IElfDump input_file [output_file]Available command line options: -a All sections, except strtab sections --aarch64 Disassemble in Aarch64 mode if mode cannot be deduced by the image. --all Dump all sections --arm Disassemble in Arm mode if mode cannot be deduced by the image. --code Dump only code sections --disasm_data Use disassembly format for data sections -f file Read command line options from file --f file Read command line options from file and report dependency --no_bom Don't use a Byte Order Mark in Unicode output --no_header Do not produce a list header --no_rel_sectionsDo not output associated .rel sections --no_strtab Do not include strtab sections --no_utf8_in Non-IAR input files are by default assumed to use UTF-8encoding unless this option is used. --output file -o file Name of text file to create --range A-B Disassemble only addresses in the specified range(from A to B). --raw Use raw text format --section #|name[,...] -s #|name[,...] Dump only section(s) with given numbers/names --source Include source in disassembled code in executables --text_out encodingEncoding to use for text output filesutf8 UTF-8utf16le Little-endian UTF-16utf16be Big-endian UTF-16locale Locale specific encoding --thumb Disassemble in thumb mode if mode cannot be deduced by the image. --use_full_std_template_namesDon't use short names for standard C++ templates --utf8_text_in Non-source text input files with no BOM use UTF-8 encoding --version Output version information and exit

    iobjmanip.exe

    針對 ARM ELF 格式的 Object 文件的操作工具。用于執行ELF目標文件的低級操作。

    E:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\bin>iobjmanipIAR Object File Manipulator V10.4.14.1149Copyright 2009-2019 IAR Systems AB.Usage: iobjmanip <op1>[,...<opN>] <src> <dest>Available command line options: -f file Read command line options from file --f file Read command line options from file and report dependency --no_bom Don't use a Byte Order Mark in Unicode output --remove_file_pathremove path information from file symbol --remove_section #|nameremove matching section(s) --rename_section (#|name)=namerename matching section(s) --rename_symbol name=namerename matching symbol --strip strip debug information --text_out encodingEncoding to use for text output filesutf8 UTF-8utf16le Little-endian UTF-16utf16be Big-endian UTF-16locale Locale specific encoding --utf8_text_in Non-source text input files with no BOM use UTF-8 encoding --version Output version information and exit

    使用示例:

  • This example renames the section .example in input.o to .example2 and stores the result in output.o:iobjmanip --rename_section .example=.example2 input.o output.o
  • isymexport.exe

    絕對符號導出器。 從ROM映像文件中導出絕對符號,以便在鏈接附加應用程序時使用它們。

    E:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\bin>isymexportIAR Absolute Symbol Exporter V10.4.14.1149Copyright 2008-2019 IAR Systems AB.Usage: ISymExport input_file output_fileAvailable command line options: --edit steering_fileShow/hide/rename symbols --export_locals[=symbol_prefix]Export local variable and function symbols -f file Read command line options from file --f file Read command line options from file and report dependency --generate_vfe_headerGenerate vfe header section --no_bom Don't use a Byte Order Mark in Unicode output --ram_reserve_ranges[=symbol_prefix]Generate symbols to reserve all occupied RAM ranges --reserve_ranges[=symbol_prefix]Generate symbols to reserve all occupied ranges --show_entry_as[=name]Export the entry point of the program as name --text_out encodingEncoding to use for text output filesutf8 UTF-8utf16le Little-endian UTF-16utf16be Big-endian UTF-16locale Locale specific encoding --utf8_text_in Non-source text input files with no BOM use UTF-8 encoding --version Output version information and exit

    iexe2obj.exe

    IAR ELF可重定位對象創建器。從可執行的ELF目標文件創建可重定位的ELF目標文件。

    E:\Program Files (x86)\IAR Systems\Embedded Workbench 8.2\arm\bin>iexe2objIAR ELF Exe to Object Tool V10.4.14.1149Copyright 2008-2019 IAR Systems AB.Usage: IExe2Obj input_file output_fileAvailable command line options: -f file Read command line options from file --f file Read command line options from file and report dependency --hide_symbols Hide all symbols in the image --keep_mode_symbolsKeep mode symbols in the image --no_bom Don't use a Byte Order Mark in Unicode output --prefix prefix Set section/symbol name prefix --text_out encodingEncoding to use for text output filesutf8 UTF-8utf16le Little-endian UTF-16utf16be Big-endian UTF-16locale Locale specific encoding --utf8_text_in Non-source text input files with no BOM use UTF-8 encoding --version Output version information and exit --wrap function Create wrapper for function

    GCC for ARM

    ??GCC 全稱為 GNU Compiler Collection。 GCC 是幾種主要編程語言的編譯器的集成分發。 這些語言目前包括 C,C++,Objective-C,Objective-C ++,Fortran,Ada,Go 和 BRIG(HSAIL)。
    ??GCC 原名為 GNU C 語言編譯器(GNU C Compiler),因為它原本只能處理 C語言。GCC 很快地擴展,變得可處理 C++。后來又擴展能夠支持更多編程語言,如 Fortran、Pascal、Objective-C、Java、Ada、Go 以及各類處理器架構上的匯編語言等,所以改名GNU 編譯器套件(GNU Compiler Collection)。?更名之后,原來的針對于 C 語言的編譯器名字還叫 gcc,針對 C++ 的編譯器叫做 g++ 。
    ??GCC for ARM 則是基于 GCC 開發的,用來編譯生成 ARM 內核可執行文件的編譯套件,俗稱 ARM 交叉編譯套件。?相比于以上兩個巨貴的編譯器,GCC for ARM 因為是基于開源的 GCC 的,因此是免費的。目前主要由三大主流工具商提供,第一是 ARM,第二是 Codesourcery,第三是 Linora。目前我們用的針對 ARM 芯片的集成開發環境(IDE),除了 IAR 和 ARM 自己的 Keil、DS ,大多都是使用 GCC for ARM 的編譯器!

    首先,看看 ARM 交叉編譯工具鏈的命名規則:arch [-vendor] [-os] [-(gnu)eabi] [-gcc]

    • arch: 體系架構,如 ARM,MIPS
    • vendor: 工具鏈提供商,沒有 vendor 時,用 none 代替;
    • os: 目標操作系統,沒有 os 支持時,也用 none 代替
    • eabi: 嵌入式應用二進制接口(Embedded Application Binary Interface)

    如果同時沒有 vendor 和 os 支持,則只用一個 none 代替。例如 arm-none-eabi 中的 none 表示既沒有 vendor 也沒有 os 支持。?前面說過,GCC for ARM 則是基于 GCC 開發的。因此,其和 GCC 一樣是一套命令行工具的集合,理論上可以將它集成到其他任何集成開發環境中,從而不直接使用命令行。GCC for ARM 中的各命令行工具與 GCC 中的各命令行工具都是對應的,功能基本一致,僅僅是名字有些改變!

    Codesourcery Toolchain

    ??Codesourcery推出的產品叫 Sourcery G++ Lite Edition,其中基于 command-line 的編譯器是免費的,在官網上可以下載,而其中包含的 IDE 和 debug 工具是收費的。Codesourcery 公司(目前已經被 Mentor 收購)基于 GCC 推出的 ARM 交叉編譯工具。可用于交叉編譯 ARM MCU 芯片,如 ARM7、ARM9、Cortex-M/R 芯片程序。
    ??目前 CodeSourcery 已經由明導國際 (Mentor Graphics) 收購,所以原本的網站風格已經全部變為 Mentor 樣式,這貨被收之后,不知道怎么下載其編譯工具鏈。。。

    • arm-none-linux-gnueabi-gcc:?用于交叉編譯ARM(32位)系統中所有環節的代碼,包括裸機程序、u-boot、Linux kernel、filesystem和App應用程序。
    • arm-none-elf-gcc:?用于交叉編譯ARM MCU(32位)芯片,如ARM7、ARM9、Cortex-M/R芯片程序。

    Linaro Toolchain

    ???Linaro?是在 2010 年臺北國際計算機展 ( COMPUTEX ) 期間,ARM、Freescale、Samsung ,ST-Ericsson、德州儀器(TI)與 IBM 等 6 家大廠,宣布合資成立的非贏利 Linux 基礎架構軟件研發商。其基于 GCC 推出的 ARM 交叉編譯工具如下圖所示:

    下載地址為:https://www.linaro.org/downloads/ 。從上圖不難看出,Linaro 提供的交叉編譯環境,僅針對于Cortex-A 內核,其他 ARM 內核則需要去 ARM 官網下載!

    • aarch64-linux-gnu:?針對于目標平臺是 Linux 系統,用于交叉編譯 ARMv8 64位目標中的裸機程序、u-boot、Linux kernel、filesystem 和 App 應用程序。
    • arm-linux-gnueabihf:?針對于目標平臺是 Linux 系統,用于交叉編譯ARM(32位)系統中所有環節的代碼,包括裸機程序、u-boot、Linux kernel、filesystem和 App 應用程序。
    • arm-eabi-gcc:?用于編譯 ARM 架構的裸機系統,包括 ARM Linux 的 boot、kernel,不適用編譯 Linux 應用 Application
    • aarch64-elf:?用于編譯 ARM v8 64位 架構的裸機系統,包括 ARM Linux 的 boot、kernel,不適用編譯 Linux 應用 Application

    ??正如官網的說明,官方發布的編譯好二進制可執行編譯器文件,僅在 Linux 系統( Ubuntu LTS)進行了測試。?目前,官方沒有提供其他平臺的可執行程序!

    ARM Toolchain

    ??ARM 除了有自己的專用編譯器之外,還維護了一套基于 GCC 的交叉編譯工具鏈。估計是為了能更有效的占有市場吧!絕大多數第三方的 IDE 都是使用這一套交叉編譯工具鏈。

    arm-none-eabi

    ??用于編譯 ARM 架構的裸機系統(包括 ARM Linux 的 boot、kernel,不適用編譯 Linux 應用 Application),所以不支持那些跟操作系統關系密切的函數,比如 fork,它使用的是 newlib 這個專用于嵌入式系統的 C 庫。
    ??作為維持和增強 GCC 編譯器支持 ARM 架構的持續承諾的一部分,ARM 正在維護一個 GNU 工具鏈,其 GCC 源分支針對嵌入式 ARM 處理器,即 Cortex-R/Cortex-M處理器系列,覆蓋 Cortex-M0 ,Cortex-M3,Cortex-M4,Cortex-M0 +,Cortex-M7,Armv8-M 基線和主線,Cortex-R4,Cortex-R5,Cortex-R7 和 Cortex-R8。
    ??作為其中的一部分,ARM 定期發布來自 ARM 嵌入式分支的預構建和測試二進制文件。 這些改進可以免費集成到第三方工具鏈中,也可以由最終用戶直接下載。整套工具鏈包含以下組件:

    • gcc : gcc-8-branch revision 267074
      svn://gcc.gnu.org/svn/gcc/branches/gcc-8-branch
    • binutils : 2.31 with mainline backports
      git://sourceware.org/git/binutils-gdb.git commit fe554d200d1befdc3bddc9e14f8593ea3446c351
    • newlib and newlib-nano :
      git://sourceware.org/git/newlib-cygwin.git commit df6915f029ac9acd2b479ea898388cbd7dda4974
    • gdb : 8.2 without target sim support
      git://sourceware.org/git/binutils-gdb.git commit fe554d200d1befdc3bddc9e14f8593ea3446c351

    ?? 目前由 ARM 來維護開發。使用 launchpad 來維護該項目源碼。但是根據之前的公告,launchpad 上不發布編譯好的程序和源碼包(“As previously announced all new binary and source packages will not be released on Launchpad henceforth, they can be found on:
    https://developer.arm.com/open-source/gnu-toolchain/gnu-rm.”),只能從 ARM 官網:https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads 進行下載。下面是,版本發布時間線:

    這是目前,我們編寫 ARM 裸機程序時,使用最多的交采編譯工具鏈!?安裝/解壓 之后,目錄如下圖所示:

    編譯器工具中的各工具,與標準的GCC沒有太多區別,主要就是針對的平臺變了。各工具的功能是一樣的!比如:arm-none-eabi-gcc.exe?是C 語言編譯器、arm-none-eabi-g++.exe?是 C++ 編譯器、arm-none-eabi-ld.exe?是連接器、arm-none-eabi-gdb.exe?是調試器等等。

    Cortex-A 專用

    ??以上交叉編譯工具鏈只支持 ARM Cortex-M/R 等系列的核,ARM 官網還提供了針對于 ARM Cortex-A 系列內核的交叉編譯工具鏈,可以從以下地址下載
    https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads。 具體如下所示:

    需要注意的是,上圖中紅框全稱的就是編譯工具鏈的名字。以 gcc-arm-8.3-2019.03-i686-mingw32-arm-eabi 為例,解壓后如下圖所示:

    各命令行工具與標準 GCC 也沒啥區別!
    ??再一個需要注意的是,上圖中的 i686-mingw32 host 指定是運行平臺為 Windows 7 32/64 bits or later;x86_64 host 指定是運行平臺為 Ubuntu 14.04 LTS x86_64 or later or RHEL 6 x86_64。也就是說,僅支持 Windows 和 Linux 平臺!?整套工具包含以下組件:

    再再一個需要注意的是,編譯器的目標平臺。

    • AArch32 bare-metal target:32 位純裸機平臺
    • AArch64 ELF bare-metal target:64 位純裸機平臺
    • AArch64 ELF bare-metal, big-endian target:64 位純裸機平臺(大端模式)
    • AArch64 GNU/Linux target:64 位 Linux 平臺
    • AArch64 GNU/Linux big-endian target:64 位 Linux 平臺(大端模式)
    • AArch32 target with soft float:32 位帶軟件模式浮點運算
    • AArch32 target with hard float:32 位帶硬件模式浮點運算

    參考

  • https://www.veryarm.com/
  • 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的【转】ARM 之七 主流编译器(armcc、iar、gcc for arm、LLVM(clang))详细介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    色吊丝在线永久观看最新版本 | 国产精品区免费视频 | 正在播放国产精品 | 久久午夜鲁丝片 | 黄色资源网站 | 日本韩国中文字幕 | 国产第页| 久久久久久高潮国产精品视 | 久久久亚洲国产精品麻豆综合天堂 | 国产这里只有精品 | av资源在线观看 | 中文字幕在线视频免费播放 | 深爱激情av | 青草视频在线看 | 久热这里有精品 | 国产v亚洲v | 国产精品久久艹 | 国产精品资源在线观看 | 免费人人干 | 亚洲综合丁香 | 97色婷婷| 丁香婷婷综合五月 | 狠狠躁夜夜躁人人爽超碰91 | 日韩在线观看免费 | www.久久色.com | 免费观看视频黄 | 国产亚洲精品福利 | 亚洲精品乱码久久久久久蜜桃动漫 | 免费成人黄色av | 国产精品久久久久一区二区 | 久久久午夜剧场 | 成av在线 | 毛片视频电影 | 91精品国产99久久久久久久 | 久久久噜噜噜久久久 | 99爱视频 | 激情久久五月天 | 人人爽人人看 | 亚洲国产中文在线 | 中文av网站 | 久久久久这里只有精品 | 操操操夜夜操 | 亚洲免费av一区二区 | 日韩精品视频一二三 | 国产高清精品在线观看 | 日本中出在线观看 | 超碰人人草 | 中文在线免费一区三区 | 成年人免费观看国产 | 69亚洲精品 | 免费在线观看午夜视频 | 久久热首页| 在线观看视频你懂的 | 天天干天天操天天做 | 久久精品国产精品亚洲 | 亚洲三级黄 | 日韩黄色免费电影 | 91资源在线免费观看 | 日韩电影中文 | 久久综合久久伊人 | 成人午夜网址 | 99久久精品国产亚洲 | 欧美成人性战久久 | 国产精品不卡av | 99精品热 | 亚洲精品一区中文字幕乱码 | 久久久国产精品麻豆 | 91精品一区在线观看 | 丝袜美腿一区 | 亚洲一区网站 | 香蕉日日 | 欧美精品xx| 久久6精品| 97天堂网| 国产精品久久久久一区二区 | 国产成人性色生活片 | 手机在线欧美 | 久久精品国产免费看久久精品 | 国产福利91精品张津瑜 | 久久久精品 一区二区三区 国产99视频在线观看 | 中文资源在线播放 | 亚洲一一在线 | 国产一区二区在线影院 | 久久精品专区 | 天堂va在线高清一区 | 夜夜爽天天爽 | 最近中文字幕大全 | 欧美性一级观看 | 国产精品久久久久婷婷二区次 | 少妇bbb搡bbbb搡bbbb′ | 成人av影院在线观看 | 日本视频精品 | 成人观看视频 | 91麻豆精品久久久久久 | 中文字幕成人在线观看 | 嫩嫩影院理论片 | 成人av动漫在线 | 精品国产乱码久久久久久三级人 | 日韩激情视频 | 美女网站色免费 | 91视频观看免费 | 九九综合在线 | 免费看片在线观看 | 午夜丁香网| 美州a亚洲一视本频v色道 | 久草在线视频精品 | 999成人国产 | 国产精品涩涩屋www在线观看 | 99这里只有精品99 | 国产精品成人一区 | 精品国产综合区久久久久久 | 狠狠干狠狠插 | 日韩 精品 一区 国产 麻豆 | 欧美成人黄色 | 91成人天堂久久成人 | 欧美日韩久久不卡 | 久久婷亚洲五月一区天天躁 | 欧美动漫一区二区三区 | 亚洲成人一区 | www.久久成人 | av一级片网站 | 久草综合在线观看 | 五月天激情婷婷 | 99热这里| 日韩一区二区三免费高清在线观看 | 久久亚洲精品电影 | 国产精品色 | 精品福利在线视频 | 国产精品久久久久久久久久 | 亚洲电影成人 | 天天插视频 | 久草网站| 国产精品v欧美精品v日韩 | 在线观看91精品国产网站 | 99精品毛片| 国产精品自产拍 | 国产亚洲精品v | 日本中文乱码卡一卡二新区 | 婷婷成人在线 | 美女视频黄免费的久久 | 在线亚洲激情 | 美女久久一区 | 日韩免费视频播放 | 成年人视频免费在线播放 | 国产精品久久久av | 天天色天天操天天爽 | 日韩1页 | 五月天亚洲婷婷 | 久久国产成人午夜av影院宅 | 精品久久久久久电影 | 日韩一区二区三区观看 | 欧美色婷 | 国产99久久99热这里精品5 | 成人永久免费 | 国产亚洲精品久久久久久 | 国产中文在线播放 | 国产亚洲精品xxoo | 国产99中文字幕 | 日本公妇在线观看 | 激情小说网站亚洲综合网 | 久久久久成 | 国产 日韩 在线 亚洲 字幕 中文 | 97超碰在线久草超碰在线观看 | 欧美精品久久人人躁人人爽 | 在线黄色观看 | 日韩91在线 | 在线日韩| www.天天草| 亚洲v欧美v国产v在线观看 | 91视频 - x99av| 天天撸夜夜操 | av电影一区 | 狠狠的日 | 精品国产一区二区三区蜜臀 | 亚洲精品美女久久久 | 九九免费在线观看 | 天天色综合天天 | 久操视频在线 | 久久综合久久88 | 国产精品久久久久久久久大全 | 午夜精品久久久久久久久久久久 | 手机av片 | 视频一区二区精品 | 精品国产乱码久久久久久1区二区 | 99综合电影在线视频 | 正在播放国产一区二区 | 日韩在线观看第一页 | 99精品国产在热久久 | 日韩av成人在线观看 | 成人在线观看免费视频 | 欧美性色xo影院 | 97精品国产一二三产区 | 婷婷播播网 | 韩国av一区二区三区 | 欧美福利网址 | 久久草网 | 亚洲,播放 | 99久久超碰中文字幕伊人 | 精品亚洲一区二区 | 久久精彩视频 | 2023年中文无字幕文字 | 97精品国产97久久久久久粉红 | 久久视频精品在线 | www.婷婷com| 9999免费视频 | 久久免费视频一区 | 久艹视频在线免费观看 | 国产成人无码AⅤ片在线观 日韩av不卡在线 | 日本公妇在线观看高清 | 亚洲视频,欧洲视频 | 国产精品不卡视频 | 成人观看视频 | 天天操狠狠操夜夜操 | 国产免费叼嘿网站免费 | 午夜18视频在线观看 | 国产成人精品电影久久久 | 欧美激情第一页xxx 午夜性福利 | www夜夜| 国产一级电影免费观看 | 二区三区毛片 | 黄色av高清 | 欧美精品乱码久久久久久 | 99精品热| 精品久久久久久久久久岛国gif | 一区二区精品在线视频 | 免费色黄 | 国产理论片在线观看 | 日韩免费看的电影 | 欧美一区二区三区在线播放 | 麻豆免费精品视频 | 久久国产热视频 | 欧美一级特黄aaaaaa大片在线观看 | 久久国产系列 | 国产香蕉97碰碰久久人人 | 成人午夜网 | 很黄很黄的网站免费的 | 亚洲午夜小视频 | 丁香六月久久综合狠狠色 | 精品欧美一区二区在线观看 | 九九久久久久久久久激情 | 久久er99热精品一区二区 | 国产一区在线免费观看视频 | 伊人天天操 | 97超碰在线久草超碰在线观看 | 69成人在线| 欧美一区影院 | 午夜精品电影 | 久久免费电影 | 国产在线精品一区二区三区 | 久久久久久久电影 | av成人免费在线观看 | a电影免费看 | 欧美亚洲国产精品久久高清浪潮 | www日韩视频 | 伊人五月天综合 | 狠狠干免费 | 97在线观看| 国产精品激情偷乱一区二区∴ | 婷婷五综合 | 成年人在线观看免费视频 | 免费a视频 | 最近乱久中文字幕 | www.香蕉| 久草成人在线 | 精品在线你懂的 | 一区二区三区免费 | 天天综合网在线观看 | 亚洲精品国产精品国自产 | 黄色电影在线免费观看 | 久久精品视频国产 | 人人看人人草 | 全黄色一级片 | 在线 影视 一区 | 久久久久亚洲精品成人网小说 | 久久艹精品 | 91麻豆免费看 | 91在线中文| 婷婷av网站 | 九七在线视频 | 国产高清久久久 | 中文在线免费观看 | 国产成人av电影在线 | 免费看v片网站 | 欧美一区二区在线免费观看 | 狠狠色丁香婷婷综合 | 麻豆国产网站 | 激情视频免费在线观看 | 国产精品美女毛片真酒店 | 成人a级黄色片 | 欧美精品亚洲二区 | 日韩av成人在线观看 | 在线观看www91 | av综合网址| 美女网站在线 | 婷婷看片| 国产韩国精品一区二区三区 | 91在线精品秘密一区二区 | 中文字幕久久精品亚洲乱码 | 久久96国产精品久久99软件 | 天天插伊人 | 一级a毛片高清视频 | 成人影片在线播放 | 日韩小视频 | 日日干天天 | 在线视频 国产 日韩 | 精品久久久久久一区二区里番 | 久久69精品 | 国产亚洲精品成人av久久ww | 最近中文字幕在线播放 | 久久国产精品一区二区三区 | 中文字幕在线网 | 中文一区在线 | 波多野结衣一区二区三区中文字幕 | 婷婷视频导航 | av中文字幕网站 | 国产精品原创在线 | 久久久久国产精品免费网站 | 99久久精品久久久久久清纯 | 久久九九国产精品 | 999视频在线播放 | 日韩精品一区二区在线观看 | 人人舔人人干 | 三级黄色免费片 | 日韩欧美国产精品 | 亚洲精品美女在线 | 丁香六月婷婷开心婷婷网 | 久久黄色小说视频 | 国产真实在线 | 国产精品午夜免费福利视频 | 久久久高清一区二区三区 | 国产午夜在线观看 | 高清一区二区三区 | 98涩涩国产露脸精品国产网 | 五月天色中色 | 国产高清在线观看 | 亚洲黄色一级电影 | 天天色草 | av福利在线导航 | 三上悠亚一区二区在线观看 | 成人av网站在线观看 | 欧美怡红院 | 欧美一区二区在线刺激视频 | 国产精品第一页在线观看 | 91最新中文字幕 | 欧美一区二区精美视频 | 免费观看www7722午夜电影 | 黄色毛片视频免费观看中文 | 97在线观看免费视频 | 久久久久久国产精品999 | 色黄久久久久久 | 成人午夜电影久久影院 | 五月天婷亚洲天综合网鲁鲁鲁 | 黄色大片网 | 伊人久久电影网 | 日韩av一区二区三区在线观看 | 97视频在线免费播放 | 免费在线观看av不卡 | 久久久久久久久久久影视 | 天堂网在线视频 | 97精品国产97久久久久久粉红 | 狠狠狠狠狠狠狠狠 | 亚洲va欧美 | 国产区av在线 | 天天综合网~永久入口 | 久久久精品视频成人 | 国产精品 视频 | 人成免费网站 | 超碰人人国产 | 99久久久国产精品免费99 | 人人爽人人爽人人爽 | 国色天香在线观看 | 久久五月婷婷丁香 | 欧美激情精品久久久久久免费 | 亚洲欧洲av | 欧美日韩一区二区三区不卡 | av黄色免费看 | 欧美精品久久人人躁人人爽 | 欧美一区二区三区四区夜夜大片 | 在线免费黄色 | 欧美va在线观看 | 久久久久久久久黄色 | 日韩av资源站 | 中文字幕久久亚洲 | 久久精品国产免费看久久精品 | 久久久综合 | 九月婷婷色 | 免费在线观看av网站 | 日韩中文免费视频 | 美女视频免费精品 | 中文字幕在线观看第三页 | 天天色天天综合网 | 青青河边草观看完整版高清 | 最新中文字幕在线资源 | 一区二区三区电影大全 | 黄色av电影免费观看 | av中文字幕在线观看网站 | 狠狠色丁香婷婷综合视频 | 久久这里只有精品视频99 | 欧美日韩中文在线视频 | 日韩视频在线观看视频 | 欧美一区二区三区在线播放 | 国产精品日韩欧美一区二区 | 手机在线看片日韩 | 国产午夜精品视频 | 精品国产91亚洲一区二区三区www | 国产激情久久久 | 亚洲高清不卡av | 三级动态视频在线观看 | 国产精品porn| 狠狠色丁香久久婷婷综合五月 | 久久综合成人网 | 国产精品一区二区三区免费视频 | 日韩乱理 | 夜夜操夜夜干 | 99久久毛片| 超碰97av在线 | 欧美日韩国产在线精品 | 最新国产精品亚洲 | 成人黄色av免费在线观看 | 日免费视频 | 国产视频一区在线 | 国产自产在线视频 | 亚洲欧美国产精品va在线观看 | 中文字幕第 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 亚洲第一成网站 | 91成人精品一区在线播放69 | 日韩视频一区二区三区 | 91精品国产综合久久婷婷香蕉 | 久久热首页 | 五月婷婷一区 | 久久精品永久免费 | 亚洲欧美日韩精品久久奇米一区 | 国产在线播放观看 | 久久99久久99精品免费看小说 | 免费福利小视频 | 国产.精品.日韩.另类.中文.在线.播放 | 丝袜美腿在线播放 | 亚洲精品中文在线 | 天天翘av | 最新婷婷色 | 天天干,天天射,天天操,天天摸 | 亚洲国产成人在线观看 | 五月天六月丁香 | 久久艹综合 | 99激情网 | 久久久久国产精品午夜一区 | 黄av免费在线观看 | 久草在线在线精品观看 | 欧美精品999 | 黄色aa久久| 精品999在线观看 | 久久高清视频免费 | 国产日韩欧美在线看 | 午夜精品久久 | av久久久 | 福利视频入口 | 国产中文字幕视频在线 | 国产三级精品在线 | 久久天天操 | 国产精品久久久久久久久久久久冷 | 亚洲高清视频在线播放 | 超碰999 | 日本韩国精品一区二区在线观看 | 在线观看日韩专区 | 午夜视频免费在线观看 | 中文字幕亚洲在线观看 | 中文字幕在线免费播放 | 91尤物国产尤物福利在线播放 | 日韩在线免费看 | 91丨九色丨蝌蚪丨对白 | 久久综合狠狠综合 | 国产精品成人自产拍在线观看 | 在线成人一区 | 黄色不卡av | 免费看黄的视频 | 欧美少妇xx| www.99在线观看 | 亚洲无毛专区 | 久久精品久久99精品久久 | 天天干亚洲| 亚洲精品国偷拍自产在线观看蜜桃 | 亚洲精品视频在线播放 | 色射色| 午夜丰满寂寞少妇精品 | 蜜臀aⅴ精品一区二区三区 久久视屏网 | 在线免费观看视频 | 日韩精品中字 | 96国产精品| 国产精品涩涩屋www在线观看 | 久草资源在线 | 国产精品免费小视频 | 亚洲综合在线五月天 | 亚洲视频久久久久 | 国产999视频在线观看 | 亚洲一区久久久 | 欧美一区二区在线免费观看 | 日本在线观看视频一区 | 97av影院 | 亚洲久草在线 | 国产成人在线观看 | 人人爱爱 | 国产丝袜制服在线 | 国产视频一区精品 | 亚洲国产精品第一区二区 | 亚洲一二三区精品 | 亚洲日日日 | 久久亚洲免费 | 日本成人黄色片 | 在线涩涩| 日韩超碰| 亚洲视频 一区 | 激情五月亚洲 | 99视频在线观看免费 | 久久久国产精品久久久 | 欧美激情综合五月 | 777久久久 | 精品国产亚洲一区二区麻豆 | 欧美日韩一二三四区 | 91激情| 免费a级黄色毛片 | 国产精品video爽爽爽爽 | 国产成人av网址 | 又黄又刺激又爽的视频 | 91激情小视频 | 国产精品久久久久永久免费看 | 天天天在线综合网 | 蜜臀精品久久久久久蜜臀 | 在线免费高清视频 | 日黄网站| 99热国产在线观看 | 亚洲精品在线视频播放 | 青青河边草手机免费 | 日本在线免费看 | 九九九九热精品免费视频点播观看 | 久久久久国产成人免费精品免费 | 在线观看免费国产小视频 | 91成人在线免费观看 | 日韩va欧美va亚洲va久久 | 99视屏| 美女黄网久久 | 日韩影视精品 | 91在线91拍拍在线91 | 欧美日韩中文在线视频 | 三上悠亚一区二区在线观看 | 久草视频在线免费 | 色视频在线| 亚洲最大av在线播放 | 精品国产免费看 | 婷婷色五 | 国产精品自在欧美一区 | 日韩免费电影在线观看 | 日韩欧美xx| 精品美女久久久久久免费 | 天天操天天操天天操 | 亚洲国产视频在线 | 欧美激情综合色综合啪啪五月 | 久久精品精品 | 日本性高潮视频 | 二区三区精品 | 九九天堂| 国产成人精品一区二三区 | 黄色99视频 | 欧美激情第八页 | 97视频中文字幕 | 国产高清精 | 91在线免费播放视频 | 欧美日韩aa | 国产明星视频三级a三级点| 国产成人精品福利 | 九九热精品视频在线播放 | 在线观看中文字幕网站 | 最近最新中文字幕视频 | 久久久.com| 免费看网站在线 | 日韩在线不卡视频 | 色天天中文| 亚洲国产欧美一区二区三区丁香婷 | 高清av影院| 日韩资源在线播放 | 国产精品入口a级 | 久艹视频免费观看 | 综合视频在线 | 国产精品久久久久久久免费大片 | 一级欧美黄 | 国产在线不卡视频 | 在线影视 一区 二区 三区 | 国产日韩中文字幕在线 | 日本大尺码专区mv | av大片网址 | 欧美在线日韩在线 | 国产精品久久久久永久免费 | 99久久精品免费看国产一区二区三区 | 日本少妇视频 | 毛片精品免费在线观看 | 91精品国产综合久久婷婷香蕉 | 久久另类小说 | 国产精品久久久久久一二三四五 | 亚洲专区免费观看 | 国产成人在线看 | 国产伦精品一区二区三区四区视频 | 久久久国产一区二区三区四区小说 | 国产精品成人av久久 | 五月激情av | 99精品在线直播 | 日韩精品一区二区三区水蜜桃 | 国产三级久久久 | 中文字幕在线播放第一页 | 热久久影视 | 日韩三级一区 | 日韩在线国产 | 国产黄色视 | 亚洲成成品网站 | 久久综合九色欧美综合狠狠 | 日韩精品一区二区三区电影 | 超碰公开97 | 国产精品视频在线看 | 在线观看91视频 | 久久伊人八月婷婷综合激情 | 国产99久久精品一区二区永久免费 | 超碰在线97免费 | 欧美不卡在线 | aaa毛片视频 | 日韩在线观看小视频 | 日韩和的一区二在线 | 免费看十八岁美女 | 白丝av在线| 最近日本韩国中文字幕 | 日韩欧美观看 | 欧美亚洲免费在线一区 | 激情欧美日韩一区二区 | 国产精品久久三 | 亚洲精品美女在线观看 | 激情视频综合网 | 91大神免费视频 | 欧美日韩性 | 欧美日韩在线观看不卡 | 黄色av电影一级片 | 国产成人一区二区三区电影 | 91精品资源 | 国产精品久久99综合免费观看尤物 | 国产精品九九久久久久久久 | 午夜999| 亚洲精品一区二区18漫画 | 国产午夜激情视频 | 成人影片在线播放 | 99视频+国产日韩欧美 | 欧美片网站yy | 日日操日日干 | 久久国产三级 | 色综合激情网 | 99久久精品国产观看 | 成人一区二区在线 | 91精品视频一区 | 九九九热精品免费视频观看网站 | 欧洲亚洲国产视频 | 精品国产99国产精品 | 亚洲精品www. | 精品国自产在线观看 | 一区二区三区四区不卡 | 中文字幕在线观 | 国内久久看 | 日韩在线播放av | 久久激情综合 | 久久爽久久爽久久av东京爽 | av超碰在线观看 | 国产日韩欧美在线看 | 天天天射| aaa毛片视频 | 美女视频黄,久久 | 久久免费看视频 | 国产精品精品 | 成年人在线观看免费视频 | 国产成人一区二区精品非洲 | 狠狠躁天天躁综合网 | 麻花天美星空视频 | 欧洲精品久久久久毛片完整版 | 国产精品男女 | 中文字幕 婷婷 | 在线天堂中文www视软件 | 99精品在线免费在线观看 | 亚州精品天堂中文字幕 | 久色 网| 福利视频一区二区 | 精品日韩在线一区 | 91高清视频在线 | 国产美女在线免费观看 | 三级黄色免费片 | 日韩成人高清在线 | 国产视频一区二区在线观看 | 日韩av在线网站 | 国内外激情视频 | 成人黄色在线看 | 久久这里只有精品首页 | 96久久| 久久在视频 | 尤物97国产精品久久精品国产 | 日本久久电影网 | 精品在线观看国产 | 91精品成人 | 成人中文字幕在线 | 久久人人艹 | 狠狠色狠狠色综合日日92 | 国产日本在线 | 99av国产精品欲麻豆 | 网站免费黄色 | 91精品婷婷国产综合久久蝌蚪 | 麻豆精品传媒视频 | 婷婷伊人网| 亚洲成人免费在线观看 | 天天拍夜夜拍 | 欧美 日韩 国产 中文字幕 | 亚洲成人精品影院 | 免费看av在线| 四虎永久免费 | 一区二区三区动漫 | 婷婷丁香在线观看 | 免费在线观看污 | 久久久久久久久精 | 中文字幕日本特黄aa毛片 | 手机在线看永久av片免费 | 久草在线99 | 亚洲免费av片 | 成人影片在线播放 | 激情综合交| 午夜91视频| 精品久久久久久久久久久久久久久久 | 亚洲精品国产第一综合99久久 | 久久艹免费 | 日韩av资源在线观看 | 三级黄色大片在线观看 | 日日干夜夜爱 | 在线播放亚洲 | 一区二区三区福利 | 成年人在线观看视频免费 | 青草视频在线看 | 国产精品久久99综合免费观看尤物 | 在线观看国产日韩欧美 | 97超级碰碰碰视频在线观看 | 狠狠色丁香婷婷综合基地 | 中文字幕第一页在线 | 免费91麻豆精品国产自产在线观看 | 国产成人精品午夜在线播放 | 免费三及片 | 人人要人人澡人人爽人人dvd | 久久精品综合一区 | 91高清视频在线 | 久久综合成人网 | 久久久久日本精品一区二区三区 | 少妇资源站 | 日韩最新在线视频 | 97成人在线观看 | 国产小视频你懂的在线 | 人人射| 国产精品一区二区三区在线看 | 色婷婷综合五月 | 久久中文精品视频 | 欧美激情h | 国产精品99久久久久久宅男 | 成 人 黄 色 视频 免费观看 | 9999国产精品 | 超碰官网 | 天天久久夜夜 | 免费亚洲精品视频 | 狠狠色香婷婷久久亚洲精品 | 欧美综合干 | 免费av大全 | 成人免费在线视频观看 | 友田真希x88av | 国产一区二区观看 | 国产一区在线视频播放 | 伊人导航| 亚洲欧洲中文日韩久久av乱码 | 综合久色 | 免费视频二区 | ,午夜性刺激免费看视频 | av丝袜在线 | 中文字幕亚洲情99在线 | 国产精品女同一区二区三区久久夜 | 99久久精品国产系列 | 久草在线在线视频 | 久久精品91视频 | 国产精品美女久久久 | 免费av在线| 91免费网址 | 狠狠黄 | 97精产国品一二三产区在线 | 免费视频你懂得 | 婷婷丁香在线 | 国产成年人av | 国产精品久久精品 | 日韩激情影院 | 欧美日韩免费视频 | 免费看v片网站 | 在线观看成人毛片 | 亚洲开心激情 | 亚洲一级黄色片 | 国产精品12345 | 999在线视频| 欧美激情视频免费看 | 久久99亚洲网美利坚合众国 | 超碰在线天天 | 久久精品96 | 久久久亚洲麻豆日韩精品一区三区 | avav99| 欧美在线aa| 国产原创av在线 | 亚洲va欧美va人人爽 | 亚洲精品大全 | 久久精品中文字幕少妇 | 国产免费又爽又刺激在线观看 | 国产精品久久久久久久久岛 | 在线国产视频 | 色婷婷综合视频在线观看 | 黄色国产高清 | 99国产高清 | 国产一区私人高清影院 | 国产午夜精品免费一区二区三区视频 | 国产裸体永久免费视频网站 | 精品国产一区二区三区四区vr | 日本黄色免费大片 | 人人干,人人爽 | 国产无遮挡又黄又爽馒头漫画 | 亚洲欧美激情插 | 99热这里只有精品在线观看 | 9在线观看免费高清完整版 玖玖爱免费视频 | 亚洲视频免费在线观看 | 在线观看免费成人 | 日韩在线观看你懂的 | 有码中文字幕 | 久久y| 天堂激情网 | 久久国产亚洲视频 | 超碰在线日韩 | 中文字幕国产精品一区二区 | 三上悠亚一区二区在线观看 | 日韩字幕在线观看 | 美女网站在线 | 久久国产精品一国产精品 | www最近高清中文国语在线观看 | 成人99免费视频 | 人人爽人人爽 | 日韩av免费一区二区 | 婷婷av综合| 免费下载高清毛片 | 精品一区二三区 | 日韩中文字幕一区 | 最近日韩中文字幕中文 | 久久久久久久av麻豆果冻 | 国产一区在线视频 | 精品免费观看视频 | 天天插夜夜操 | 亚洲精品视频在线看 | 99综合久久 | 偷拍福利视频一区二区三区 | 欧美极品一区二区三区 | 精品人人人 | 婷婷久久网 | 国产精品毛片完整版 | 久久久久99精品国产片 | 狠狠的操狠狠的干 | 激情av一区二区 | 精品福利在线 | 激情综合五月天 | 88av视频| 美女黄频网站 | 国产精品一区在线播放 | 91网在线观看 | 在线免费观看的av | 人人看人人做人人澡 | 97天堂网 | 亚洲精品www | 久久久久久久免费 | 国产69久久久欧美一级 | 亚洲国产影院 | 国产精品美女久久久久久网站 | 国产精品免费成人 | 久久久久久久免费观看 | 国产一级电影在线 | 狠狠狠色 | 波多野结衣小视频 | 免费在线观看日韩视频 | 97视频在线观看视频免费视频 | av再线观看 | 国产午夜精品福利视频 | 青草视频网 | 激情小说久久 | 天天av资源| 国产精品9区 | 午夜视频免费在线观看 | 91麻豆精品国产91久久久久久 | 精品国产一区二区三区四区在线观看 | 国产精品久久久久永久免费 | 日韩亚洲国产精品 | 99在线视频精品 | 国产精品99在线播放 | 人人射av | 久久免费播放视频 | 国产精品久久艹 | 国产成人亚洲精品自产在线 | 色老板在线| 婷婷丁香狠狠爱 | 正在播放一区 | 欧美少妇bbwhd | 成人黄色大片在线免费观看 | 99电影| 亚洲综合小说电影qvod | 亚洲最新av| 91完整版| 狠狠综合久久av | 亚洲在线视频网站 | 中文字幕在线看片 | 美女精品在线观看 | 国产中文a| 国产又粗又猛又色 | 久久视频免费在线观看 | 国产高清黄色 | 国产精品久久久一区二区 | www中文在线 | 国产精品黄色 | av蜜桃在线 | 欧美日韩一区二区久久 | 国产亚洲欧洲 | 日韩免费二区 | 免费看黄在线 | 在线看免费| 国产精品综合在线 | 久久久在线视频 | 国产69久久久 | 首页av在线| 狠狠狠色丁香婷婷综合久久五月 | 久久一区二区三区国产精品 | 色妞久久福利网 | 在线免费观看国产黄色 | 色噜噜日韩精品欧美一区二区 | 免费高清在线视频一区· | 国产福利一区二区三区视频 | 99国产一区二区三精品乱码 | 日韩午夜电影 | 激情av网址 | 丁香花中文在线免费观看 | 最新日韩在线 | 国产精品免费av | 色偷偷88888欧美精品久久 | 99re在线视频观看 | 亚洲高清视频在线观看免费 | 亚洲视频精品在线 | 黄色免费网站大全 | 国产黄色高清 | 在线观看久草 | 欧美一级专区免费大片 | 人人网av | 免费看国产曰批40分钟 | 日韩av一区二区三区 | 97精品国产97久久久久久春色 | 成人福利在线播放 | 色美女在线 | 国产人免费人成免费视频 | 黄色软件视频网站 | 欧美成人猛片 | 欧美一区二区免费在线观看 | 6080yy午夜一二三区久久 | 黄色免费高清视频 | 97香蕉久久超级碰碰高清版 | 精品国模一区二区三区 | 欧美激情片在线观看 | 欧美色精品天天在线观看视频 | 精品视频专区 | 18av在线视频 | 一区二区理论片 | 97视频在线免费观看 | 国内精品久久久久久 | 久久精品在线免费观看 | 一区二区三区在线看 | 91精品欧美 | 国产又粗又猛又色又黄视频 | 四虎在线永久免费观看 | 2023亚洲精品国偷拍自产在线 | 久久久免费在线观看 | 亚洲精品午夜国产va久久成人 | 亚洲欧美国产日韩在线观看 | 99久久综合国产精品二区 | 国产精品在线看 | 精品中文字幕在线观看 | 日韩精品在线播放 | 久久久高清一区二区三区 | 啪啪小视频网站 | 99精品色| 欧美日韩久久一区 | 久久夜靖品 | 在线黄色国产电影 | 国产一二三四在线观看视频 | 中文区中文字幕免费看 | 96久久精品 | 久久免费精品 | 超碰在线人人艹 | 日韩国产在线观看 | 香蕉久草在线 |