glibc 2.27 版本变动

在 2018-02-02 gnu 发布了 glibc 2.27 版本,其中有很多修改,尤其是向后不兼容的修改,这里根据发布的邮件列表大致整理,如果有错误的地方请联系 我

原邮件列表地址:https://sourceware.org/ml/libc-alpha/2018-02/msg00054.html

主要的新特性

  • 支持静态 PIE 可执行文件1

    详请参见 INSTALL 中的 –enable-static-pie 选项

    注意:使用 –enable-static-pie 选项编译的 libc.a 需要使用 gcc 8 的 -static-pie 来编译 PIE 可执行文件。并且该特性目前只支持 使用 binutils 2.29 的 i386、x86_64 和 x32 平台,以及 使用 binutils 2.30 版本的 aarch64。

  • 使用 FMA 指令集优化了 x86_64 平台的以下函数

    asin, atan2, exp, expf, log, pow, atan, sin, cosf, sinf, sincosf, tan

  • 使用 SSE4.1 指令集优化了 x86_64 平台下的以下函数

    trunc, truncf

  • 优化了通用的以下函数

    expf, exp2f, logf, log2f, powf, sinf, cosf, sincosf

  • malloc 系列函数在检测到 heap corruption 的使用不再打印失败的地址以及栈帧

  • abort 函数会立即终止进程,而不再刷新标准输入输出流

  • 在以下 long double 类型是 IEEE 128位格式的平台上,math 库为该该类型实现了_Float128

    aarch64, alpha, mips64, riscv, s390, sparc

  • 在支持 _Float64x 的以下平台上,math 库实现了接口

    aarch64, alpha, i386, ia64, mips64, powerpc64le, riscv, s390, sparc, x86_64

  • math 库为以下类型实现了接口

    _Float32, _Float64, _Float32x

  • 在 Linux 平台实现了memfd_create 函数 和 mlock2 函数

  • 添加了内存保护关键字,头文件 <sys/mman.h> 中声明了以下函数

    pkey_alloc, pkey_free, pkey_mprotect, pkey_set, pkey_get

  • 增加了 copy_file_range 函数

  • 为 sparc M7 平台优化了一下函数

    memcpy, mempcpy, memmove, memset

  • ldconfig 处理 include 指令将使用 C/POSIX 整理序2

  • 支持 RISC-V ISA 运行在 Linux 上

    注意:需要 binutils-2.30, gcc-7.3.0, linux-4.15 以上版本

    支持以下 ISA/ABI 对:

    • rv64imac lp64
    • rv64imafdc lp64
    • rv64imafdc lp64d

废弃/移除的特性,以及改变而影响兼容性的特性

-

  • 废弃了对 调用了 dlopen 函数的静态链接程序 的支持,将在未来的版本中被移除

  • 废弃了对 使用 stdio 内部数据结构和函数的旧程序 的支持,包括 GCC 2.95 中 libstdc++ 提供的 C++ stream

    使用以下内部符号的程序将不能在未来的 glibc 版本下正常工作:

    _IO_adjust_wcolumn, _IO_default_doallocate, _IO_default_finish, _IO_default_pbackfail, _IO_default_uflow, _IO_default_xsgetn, _IO_default_xsputn, _IO_doallocbuf, _IO_do_write, _IO_file_attach, _IO_file_close, _IO_file_close_it, _IO_file_doallocate, _IO_file_fopen, _IO_file_init, _IO_file_jumps, _IO_fileno, _IO_file_open, _IO_file_overflow, _IO_file_read, _IO_file_seek, _IO_file_seekoff, _IO_file_setbuf, _IO_file_stat, _IO_file_sync, _IO_file_underflow, _IO_file_write, _IO_file_xsputn, _IO_flockfile, _IO_flush_all, _IO_flush_all_linebuffered, _IO_free_backup_area, _IO_free_wbackup_area, _IO_init, _IO_init_marker, _IO_init_wmarker, _IO_iter_begin, _IO_iter_end, _IO_iter_file, _IO_iter_next, _IO_least_wmarker, _IO_link_in, _IO_list_all, _IO_list_lock, _IO_list_resetlock, _IO_list_unlock, _IO_marker_delta, _IO_marker_difference, _IO_remove_marker, _IO_seekmark, _IO_seekwmark, _IO_str_init_readonly, _IO_str_init_static, _IO_str_overflow, _IO_str_pbackfail, _IO_str_seekoff, _IO_str_underflow, _IO_switch_to_main_wget_area, _IO_switch_to_wget_mode, _IO_unsave_wmarkers, _IO_wdefault_doallocate, _IO_wdefault_finish, _IO_wdefault_pbackfail, _IO_wdefault_setbuf, _IO_wdefault_uflow, _IO_wdefault_xsgetn, _IO_wdefault_xsputn, _IO_wdoallocbuf, _IO_wdo_write, _IO_wfile_jumps, _IO_wfile_overflow, _IO_wfile_sync, _IO_wfile_underflow, _IO_wfile_xsputn, _IO_wmarker_delta, or _IO_wsetb

    注意:和其他的符号移除不同,这些旧程序不支持使用兼容的符号

  • 在 GNU/Linux 上,废除的常量 PTRACE_SEIZE_DEVEL 不再定义在 <sys/ptrace.h> 中

  • libm 不再支持 SVID 错误处理或者 _LIB_VERSION 变量 来控制错误处理

    使用旧版本的 glibc 库依然可以工作

    不再提供 libieee.a 库

    math.h 中不再定义 exception 结构体或者 X_TLOSS, DOMAIN, SING, OVERFLOW, UNDERFLOW, TLOSS, PLOSS, HUGE 等宏

  • libm 中的以下函数将不再支持新程序

    pow10, pow10f, pow10l

    可以使用标准名字 exp10, exp10f, exp10l

  • 类型 mcontext_t 将不再和 结构体 sigcontext 相同

  • add-ons 机制被移除

    configure 的 –enable-add-ons 选项会被忽略

  • configure 的 –without-fp 选项被忽略

  • 以下函数将会检查指定的字符串是否能被作为域名解析

    res_hnok, res_dnok, res_mailok, res_ownok

  • 在 malloc_info 的输出中, 元素可能会包含其他的 元素"subheaps",其中包含了子堆的数量

  • libresolv 库中的函数 p_secstodate 不再支持新的程序

  • 不再支持 tilepro-*-linux-gnu 配置

  • 废弃了非标准头文件 <libio.h><_G_config.h>,在未来的版本中将被移除

构建和运行时需求的修改

  • bison 2.7 以及以上版本需要在 intl 子文件夹中生成代码

安全相关的修改

  • CVE-2009-5064
  • CVE-2017-15670
  • CVE-2017-15671
  • CVE-2017-15804
  • CVE-2017-17426
  • CVE-2017-1000408
  • CVE-2017-1000409
  • CVE-2017-16997
  • CVE-2018-1000001
  • CVE-2018-6485
  1. pie 的wiki 

  2. 关于整理序的解释参见这个wiki 

hah
Copyleft - All rights reversed. The internet is free and so is my content.