Представлен релиз системной библиотеки GNU C Library (glibc) 2.16. Glibc является основой большинства Linux-дистрибутивов, за исключением OpenWrt, Debian и Ubuntu, которые перешли на использование системной библиотеки Eglibc. Библиотека Eglibc полностью совместима с Glibc и отличается более низкими системными требованиями, возможностью гибкой настройки компонентов, улучшенной поддержкой кросс-компиляции и кросс-тестирования.
В новой версии Glibc произошли следующие изменения:
- Для архитектуры x86-64 добавлена поддержка X32 ABI, позволяющего использовать на 64-разрядных системах 32-разрядную модель адресации памяти. ABI X32 позволяет приложениям использовать все преимущества архитектуры x86_64, такие как дополнительные регистры и более быстрые инструкции, PIC ABI. В то же время ABI X32 даёт возможность работать с 32-разрядными указателями памяти, что позволяет экономить память, способствует более эффективному наполнению процессорного кэша и положительно сказывается на общей скорости исполнения кода;
- Реализована поддержка нового стандарта языка Си - C11 (ISO / IEC 9899:2011):
- Добавлена поддержка статических утверждений static_assert;
- В режиме совместимости с C11 удалена функция gets();
- Добавлены функции at_quick_exit() и quick_exit();
- Добавлена функция aligned_alloc();
- Реализована возможность управления выравниванием выделяемой памяти через функцию aligned_alloc();
- Добавлены функции преобразования Unicode-строк uchar.h;
- Добавлены комплексные функции CMPLX, CMPLXF, CMPLXL;
- Поддержка архитектуры IA-64 перемещена из основной ветки в порты;
- Убрана поддержка всех бинарных форматов, кроме ELF;
- Добавлена проверка версий для вызовов poll() и ppoll();
- Увеличена скорость выполнения некоторых математических функций в режиме x86-64;
- Добавлен флаг компиляции "--enable-obsolete-rpc", который включает поддержку устаревших RPC-функций, которые присутствовали в glibc 2.14 и ранее;
- Убран код совместимости с ядрами Linux до версии 2.4. Разработчики предупреждают, что glibc 2.16 гарантирует совместимость только с ядрами 2.6.x и более поздними;
- Добавлен новый заголовок sys/auxv.h и функция getauxval() для лёгкого доступа к информации пар параметр/значение AT_* ядра Linux;
- Оптимизирована функция expf() для платформ x86 и x86-64. Работа выполнена Любовью Дмитриевой, российским разработчиком из Intel;
- Улучшена поддержка кросс-компиляции;
- Добавлена поддержка процессорных архитектур TILE-Gx и TILEPro;
- Убрана поддержка старых версий ARM ABI, теперь поддерживается только EABI;
- Обеспечена совместимость конфигурационных заголовочных файлов между архитектурами x86 и x86-64;
- Добавлена сборочная опция "--enable-systemtap" для включения статических проверок setjmp в libc и longjmp в libpthread, необходимых для трассировки приложений при помощи SystemTap;
- Добавлены новые оптимизированные варианты функций для архитектур SPARC и PowerPC;
- Проведён аудит работы математических функций, устранены многие проблемы, приводившие к появлению неточных результатов;
- В поставку больше не входя файлы с данными по часовым поясам, базу часовых поясов теперь нужно устанавливать отдельно;
- Исправлено 253 ошибки.