ILD

as command-line options
作者:Herbert Yuan 邮箱:yuanjp89@163.com
发布时间:2017-7-31 站点:Inside Linux Development

1 Command-Line Options

本章描述所有gnu汇编器版本可用的命令行选项。机器相关的选项可以查看机器架构相关的页面。

当从gnu C编译器调用as时,使用-Wa选项来传递参数给汇编器。不同的汇编器选项使用逗号','分开,如:

1
gcc -c -g -O -Wa,-alh,-L file.c

传递两个参数给汇编器,-alh和-L。

通常不需要直接使用-Wa机制,因为许多编译器命令行选项自动传递参数给汇编器。可以使用-v选项调用gcc,查看哪些参数传递给汇编器。


2 Enable Listing: -a[cdghlns]

打开汇编器的listing输出,通常输出到标准输出,可以使用=file输出到文件。listing就是一些汇编信息,使用cdghlns控制不同的显示信息。这些选项具体控制哪些信息可查看之前的文章。下面需要一个例子。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
herbert@Lenovo:/work/code/assembly/list$ as -a link.s
GAS LISTING link.s                      page 1
  
   1                            .data
   2                            .globl  var2
   3                            .align  4
   4                            .type   var2, @object
   5                            .size   var2, 4
   6                    var2:
   7 0000 0A000000              .long   10
   8
GAS LISTING link.s                      page 2
  
DEFINED SYMBOLS
              link.s:6      .data:0000000000000000 var2
 
NO UNDEFINED SYMBOLS

可以使用=file,输出到文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
herbert@Lenovo:/work/code/assembly/list$ as -a=link.txt link.s
herbert@Lenovo:/work/code/assembly/list$
herbert@Lenovo:/work/code/assembly/list$ cat link.txt
GAS LISTING link.s                      page 1
  
   1                            .data
   2                            .globl  var2
   3                            .align  4
   4                            .type   var2, @object
   5                            .size   var2, 4
   6                    var2:
   7 0000 0A000000              .long   10
   8
GAS LISTING link.s                      page 2
  
DEFINED SYMBOLS
              link.s:6      .data:0000000000000000 var2
 
NO UNDEFINED SYMBOLS


3 --alternate

开始交替宏模式,见.altmacro


4 .include搜索路径: -I path

将路径添加到搜索.include文件的路径,as总是先搜索当前目录,然后按照-I指定的顺序搜索。


5 Difference Tables: -K

as有时候会修改.word sym1-sym2指令产生的code。见.word。使用-K选项来产生警告。


6 Include Local Symbols: -L

以特定本地标签前缀开头的符号(ELF为.L),叫做本地符号。通常调试时这些符号不可见,因为他们只是被程序(如编译器)用来组成汇编程序。通常as和ld丢掉这些符号。

这个选项告诉as保留这些本地符号。通常,这么做的话,也告诉链接器ld保留这些符号。


7 Configuring listing output: --listing

listing功能可以使用-a开启。这个功能可以将输入源文件和输出目标文件对应位置的16进制打印结合起来,将他们显示为listing file。这个listing的格式,可以通过汇编源码内的指令控制。如.list, .title等。也可以通过下面的选项控制。

略。


8 MRI兼容汇编模式: -M

使用-M或--mri选项,选择MRI兼容模式。


9 Dependency Tracking: --MD

为创建的文件产生依赖文件,文件包含单一规则,可用于make。--MD后面需要跟着依赖文件路径。

1
2
3
herbert@Lenovo:/work/code/assembly/list$ as --MD link.d link.s
herbert@Lenovo:/work/code/assembly/list$ cat link.d
a.out: link.s

注意,使用--MD不影响产生输出目标文件。

10 Output Section Padding

通常汇编器会填充输出section到对齐边界,这会浪费空间,在内存受限的目标上这可能很有影响。--no-pad-sections选项将关闭这个行为。


11 命名目标文件: -o

这个,不用讲了,设置输出文件的路径。默认是a.out。as总是覆盖同名文件。


12 Join Data and Text Sections: -R

-R告诉as,写目标文件,好像data section在text section里面一样。这通常在最后时刻做。二进制数据是一样的,但是data section不同,他大小为0,因为所有的字节追加到了text section。

-R可能产生更小的地址偏移。


13 Display Assembly Statistics: --statistics

显示汇编过程中的两个统计数据:最大内存消耗和总执行时间。

1
2
3
4
5
6
7
8
9
10
11
12
herbert@Lenovo:/work/code/assembly/list$ as link.s --statistics
as: total time in assembly: 0.008000
as: data size 401408
frag chains:
 
        0x92d100 .text                   2 frags
 
        0x92d198 .data                   3 frags
 
        0x92d230 .bss                    2 frags
fixups: 0
1 mini local symbols created, 0 converted


14 Compatible Output: --traditional-format

对于一些目标,as的输出和一些已有的汇编器输出不同。这个选项让as使用传统的格式。


15 Announce Version: -v

打印版本信息,-v打印版本,不影响正常汇编。--version打印版本,并退出。

1
2
3
4
5
6
7
8
9
10
11
herbert@Lenovo:/work/code/assembly/list$ as -v
GNU assembler version 2.26.1 (x86_64-linux-gnu) using BFD version (GNU Binutils for Ubuntu) 2.26.1
^C
herbert@Lenovo:/work/code/assembly/list$
herbert@Lenovo:/work/code/assembly/list$ as --version
GNU assembler (GNU Binutils for Ubuntu) 2.26.1
Copyright (C) 2015 Free Software Foundation, Inc.
This program is free software; you may redistribute it under the terms of
the GNU General Public License version 3 or later.
This program has absolutely no warranty.
This assembler was configured for a target of `x86_64-linux-gnu'.


16 Control Warnings

-W, --no-warn, 不要打印警告。

--warn,打印警告。

--fatal-warnings,警告当错误。


17 Generate Object File in Spite of Errors: -Z

就是这么任性,错误也产生输出文件。有错误会打印相关警告:

n errors, m warnings, generating bad object file.


Copyright © insidelinuxdev.net 2017-2021. Some Rights Reserved.