本附录概述了已添加到 Oracle Solaris OS 各个发行版中的更新和新增功能。
可提高运行时审计程序之间的同步性,并通过 la_callinit() 和 la_callentry() 函数实现进程初始化。请参见审计接口函数和审计接口控制流量。
–z relax 选项可用于放宽链接编辑器的缺省有效性检查项。使用此选项可以创建本会被拒绝的输出目标文件。–z relax 选项取代了 –t 和 –z relaxreloc 选项。请参见 ld(1))。
链接编辑器选项 –z type 以及额外的 LD_UNSET、LD_{object-type}_OPTIONS 和 LD_{object-type}_UNSET 环境变量提高了选项处理的灵活性。请参见指定链接编辑器选项。
elfdump(1) 的新增选项 –F 提供了输出格式选项。
桩目标文件可以省略在关联的实际目标文件中发现的符号。此技术可以阻止在新代码开发中使用链接到桩目标文件的符号,同时在实际目标文件中维护这些符号以实现向后兼容性。请参见使用桩目标文件隐藏过时的接口。
辅助目标文件允许将运行时不需要的调试节写入单独的目标文件中。请参见辅助目标文件。
父目标文件通过允许插件直接链接其父目标文件简化了插件目标文件的构造。请参见父目标文件。
ld(1) 提供了 –z aslr 选项来为每个目标文件提供对地址空间布局和随机化的控制。elfedit(1) 已修改,从而简化了对关联的 DT_SUNW_ASLR 动态节项的编辑。请参见Table 13–12。
可使用新的 elffile(1) 实用程序更全面地检查归档库及其成员。
通过对软件功能属性进行编码,可将 64 位进程限定到较低的 32 位地址空间。请参见软件功能地址空间限制处理。
通过链接编辑器的 –z discard-unused 选项,可以更灵活地通过链接编辑丢弃未使用的材料。请参见删除未使用的材料。
通过链接编辑器的 –z strip-class 选项,可以更灵活地将不重要的节从目标文件中剥离。–z strip-class 选项取代了旧的 –s 选项,可对要剥离的节进行更精确的控制。
链接编辑器可创建桩目标文件。桩目标文件是共享目标文件,完全根据 mapfile 生成,在不包含代码或数据时,可提供与实际目标文件相同的链接接口。桩目标文件可由链接编辑器快速生成,并可用于提高生成过程的并行性和降低生成过程的复杂性。请参见桩目标文件。
链接编辑器可以使用 –z guidance 选项提供有关创建高质量目标文件的指导。请参见 ld(1)。
归档处理现在允许创建大小超过 4 GB 的归档文件。
局部审计程序现在可接收 la_preinit() 和 la_activity() 事件。请参见运行时链接程序审计接口。
随延迟依赖项提供了一种更为稳健的用于测试功能是否存在的模型。请参见测试功能和提供 dlopen() 的替代项。
提供了一种新的 mapfile 语法。请参见Chapter 8, Mapfile。与原始的 System V 发行版 4 语言相比,该语法提供了更适合人阅读且可扩展性更好的语言。链接编辑器仍完全支持处理原始的 mapfile。有关原始 mapfile 的语法及用法,请参见Appendix B, System V 发行版 4(版本 1)mapfile。
各个符号可与功能要求相关联。请参见标识功能要求。利用该功能,可以在动态目标文件中创建一系列优化函数。请参见创建符号功能函数系列和功能节。
由链接编辑器创建的、包含特定于 Oracle Solaris 的 ELF 数据的目标文件在 e_ident[EI_OSABI] ELF 头中标记有 ELFOSABI_SOLARIS。以前,ELFOSABI_NONE 用于所有的目标文件。此项变更主要具有信息性价值,因为运行时链接程序仍继续将 ELFOSABI_NONE 与 ELFOSABI_SOLARIS 视为等效。但是,elfdump(1) 和类似的诊断工具可以使用此 ABI 信息为指定的目标文件生成更准确的信息。
elfdump(1) 已扩展为使用 e_ident[EI_OSABI] ELF 头的值或新的 –O 选项来标识特定于给定 ABI 的 ELF 数据类型和值,并使用此信息更为准确地显示目标文件内容。Linux 操作系统中显示目标文件中的 ABI 特定信息的能力得到极大扩展。
通过使用 dlinfo(3C) 标志 RTLD_DI_MMAPCNT 和 RTLD_DI_MMAPS,可获取装入进程的目标文件的段映射信息。
链接编辑器可识别多个 GNU 链接编辑器选项。请参见 ld(1)。
链接编辑器为 SPARC 和 x86 目标提供了交叉链接。请参见跨链接编辑。
链接编辑器现在可以合并 SHF_MERGE | SHF_STRING 字符串节。请参见节合并。
现在,合并重定位节是创建可执行文件和共享目标文件时的缺省行为。请参见组合重定位节。以前,此行为需要链接编辑器的 –z combreloc 选项。–z nocombreloc 用于禁用该缺省行为并与必须应用重定位的节保持一一对应关系。
可使用新的 elfedit(1) 实用程序编辑 ELF 目标文件。
可使用新的 elfwrap(1) 实用程序在 ELF 可重定位目标文件内封装任意数据文件。
提供了其他符号可见性属性。请参见位于SYMBOL_SCOPE / SYMBOL_VERSION 指令和Table 12–23 中的已导出单件和删除属性描述。
链接编辑器和关联的 ELF 实用程序已从 /usr/ccs/bin 移至 /usr/bin。请参见调用链接编辑器。
添加了符号排序节,可将内存地址与符号名称进行简单相关。请参见符号排序节。
动态目标文件中可用的符号表信息已通过添加新的 .SUNW_ldynsym 节得到扩展。请参见符号表节和Table 12–5。
由 crle(1) 管理的配置文件的格式已得到了增强,可以更好地标识文件。经过改进的格式可确保运行时链接程序不使用不兼容平台上生成的配置文件。
添加了新的重定位类型,在重定位计算中使用关联符号的大小。请参见重定位。
–z rescan-now、–z recan-start 和 –z rescan-end 选项在为链接编辑指定归档库方面提供了更大的灵活性。请参见命令行中归档的位置。
以下项已经过时。这些项提供内部的或很少使用的功能。当前使用的任何关联的 ELF 定义都将被忽略,但是使用诸如 elfdump(1) 之类的工具仍然可以显示这些定义。
此动态节标记标识了运行时功能的要求。请参见动态节。此标记提供了功能标志 DTF_1_PARINIT 和 DTF_1_CONVEXP。DT_FEATURE_1 标记和所关联的标志不再由链接编辑器创建,也不再由运行时链接程序处理。
现在,通过记录应用程序中的审计程序以及链接编辑器的 –z globalaudit 选项,可以启用全局审计。请参见记录全局审计程序。
添加了附加的链接编辑器支持接口 ld_open() 和 ld_open64()。请参见支持接口函数。
通过 –z altexec64 选项和 LD_ALTEXEC 环境变量,可以更加灵活地执行备用的链接编辑器。
使用 mapfile 生成的符号定义现在可以关联到 ELF 节。请参见SYMBOL_SCOPE / SYMBOL_VERSION 指令。
链接编辑器和运行时链接程序提供在共享目标文件中创建静态 TLS 的功能。此外,还建立了备份 TLS 预留空间,以实现在启动后共享目标文件中对静态 TLS 的有限使用。请参见程序启动。
提供了对 x64 中间代码模型的支持。请参见Table 12–4、Table 12–8 和Table 12–12。
可以使用 dlinfo(3C) 标志 RTLD_DI_ARGSINFO 获取进程的命令行参数、环境变量和辅助向量数组。
通过链接编辑器的 –B nodirect 选项,可以更灵活地禁止外部引用的直接绑定。请参见Chapter 6, 直接绑定。
现已支持 x64。请参见Table 12–5、特殊节、重定位类型、线程局部变量访问和线程局部存储的重定位类型。
通过重新构造文件系统,已将许多组件从 /usr/lib 移至 /lib。链接编辑器和运行时链接程序的缺省搜索路径已相应进行了更改。请参见链接编辑器搜索的目录、运行时链接程序搜索的目录和安全性。
不再提供系统归档库。因此,无法再创建静态链接的可执行文件。请参见静态可执行文件。
通过 crle(1) 的 –A 选项,可以更加灵活地定义替代依赖项。
链接编辑器和运行时链接程序可处理未指定值的环境变量。请参见环境变量。
用于 dlopen(3C) 并作为显式依赖性定义的路径名现在可以使用任何保留的标记。请参见Chapter 10, 使用动态字符串标记建立依赖性。新的实用程序 moe(1) 提供了对使用保留标记的路径名的评估。
dlsym(3C) 和新的句柄 RTLD_PROBE 提供了用于测试接口是否存在的最佳方法。请参见提供 dlopen() 的替代项。