Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 

mapfile 结构和语法

mapfile 指令可以超出一行,并且可以具有任意数量的空格,包括换行符。

对于所有语法讨论,以下表示法都适用。

  • 空格或换行符可以出现在除名称或值的中间位置以外的任何位置。

  • 以井号 (#) 开始并以换行符结束的注释可以出现在任何可以出现空格的位置。链接编辑器不会解释注释,注释仅用于提供说明。

  • 所有指令均以分号 (;) 结束。{....} 节中的最后一个分号可以省略。

  • 所有项都为固定宽度,所有冒号 (:)、分号 (;)、赋值运算符(=、+=、-=)和花括号 {....} 都按原样输入。

  • 所有以斜体表示的项都是可替换的。

  • 方括号 [ .... ] 用于表示可选语法。方括号不是表达形式的一部分,不会显示在实际指令中。

  • 名称是区分大小写的字符串。Table 8–2 列出了 mapfile 中的常见名称和其他字符串。可以通过三种不同形式指定名称。

    • 不带引号

      非引用名称是一个字母和数字序列。第一个字符必须是字母,后面可以没有或跟有多个字母或数字。百分号 (%)、斜杠 (/)、句点 (.) 和下划线 (_) 将视为字母。美元符号 ($) 和连字符 (-) 将视为数字。

    • 单引号

      在单引号 (') 中,名称可以包含除单引号或换行符以外的任何字符。所有字符将解释为字面字符。指定文件路径或其他包含非引用名称中所不允许的常规可打印字符的名称时,这种引用形式会很方便。

    • 双引号

      在双引号 (") 中,名称可以包含除双引号或换行符以外的任何字符。反斜杠 (\) 是转义符,其工作方式与在 C 编程语言的串文字中的使用方式类似。带有反斜杠前缀的字符将替换为其所代表的字符,如Table 8–1 中所示。除了Table 8–1 中所示的字符外,任何字符跟在反斜杠后都是错误的。

  • value 表示数字值,可以是十六进制、十进制或八进制,并遵循 C 语言的整型常数所使用的规则。所有值都是无符号整数值,对于 32 位输出目标文件是 32 位的,对于 64 位输出目标文件是 64 位的。

  • segment_flags 将内存访问权限指定为Table 8–3 中所列一个或多个值的空格分隔列表,对应于 <sys/elf.h> 中定义的 PF_ 值。

表 8-1  双引号文本转义序列
转义序列
含义
\a
警报(响铃)
\b
退格键
\f
换页
\n
换行
\r
回车
\t
水平制表符
\v
垂直制表符
\\
反斜杠
\'
单引号
\”
双引号
\ooo
一个八进制常数,其中 ooo 是一到三个八进制数字 (0....7)
表 8-2  mapfile 中的名称和其他广泛使用的字符串
名称
用途
segment_name
ELF 段的名称
section_name
ELF 节的名称
symbol_name
ELF 符号的名称
file_path
用于引用 ELF 目标文件或包含 ELF 目标文件的归档文件的斜杠 (/) 分隔名称的 Unix 文件路径
file_basename
file_path 的最终组件 (basename(1))
objname
file_basename 或包含在归档文件中的目标文件的名称
soname
可共享目标文件名称,用于可共享目标文件的 SONAME(例如 libc.so.1
version_name
符号版本的名称,用在 ELF 版本控制节中
inherited_version_name
由另一个符号版本继承的符号版本的名称
表 8-3  段标志
标志值
含义
READ
段是可读的
WRITE
段是可写的
EXECUTE
段是可执行的
0
清除所有权限标志
DATA
适用于目标平台上的数据段的 READ、WRITE 和 EXECUTE 标志的组合
STACK
适用于目标平台的 READ、WRITE 和 EXECUTE 标志的组合,由平台 ABI 定义