После шести месяцев разработки подготовлен (https://sourceware.org/ml/libc-alpha/2018-08/msg00003.html) релиз системной библиотеки GNU C Library (http://ftp.gnu.org/gnu/glibc/) (glibc) 2.28 (http://sourceware.org/glibc/wiki/Release/2.28), которая полностью следует требованиям стандартов ISO C11 и POSIX.1-2008. В состав нового выпуска включены исправления от 58 разработчиков. Из добавленных в Glibc 2.28 улучшений (http://sourceware.org/git/?p=glibc.git;a=blob_plain;f=NEWS;h...) можно отметить:
- Обеспечена возможность сборки и запуска на системах GNU/Hurd без применения дополнительных патчей;
- Добавлена функция renameat2, предоставляющая средства для атомарной замены имён двух файлов (первый файл переименовывается во второй, а второй в первый).
Функция renameat2 отличается от renameat наличием дополнительного флагового поля. Если флаг не указан поведение renameat2 полностью аналогично renameat.
Из флагов поддерживается RENAME_NOREPLACE, при котором операция переименования не приводит к замене уже существующего файла. В случае, если ядро не поддерживает системный вызов renameat2 и при вызове указаны аргументы, будет возвращена ошибка;
- Добавлена функция statx, которая отличается от fstatat64 наличием дополнительного флагового аргумента. В случае, если ядро не поддерживает системный вызов statx, возвращающего расширенную информацию о файле, включая время создания файла и специфичные для файловых систем флаги, в glibc предоставляется базовая поддержка на основе функции fstatat64;
- Добавлена поддержка потоков ISO C (threads.h), определённых в спецификации ISO/IEC 9899:2011). Для использования потоков в приложениях необходимо связывание с libpthread. В многопоточных программах можно использовать следующие функции:
- thrd_current, thrd_equal, thrd_sleep, thrd_yield, thrd_create,
thrd_detach, thrd_exit и thrd_join для управления потоками;
- mtx_init, mtx_lock, mtx_timedlock, mtx_trylock, mtx_unlock, and
mtx_destroy для управления мьютексами;
- call_once для синхронизации вызова функций;
- cnd_broadcast, cnd_destroy, cnd_init, cnd_signal, cnd_timedwait и
cnd_wait для условных переменных;
- tss_create, tss_delete, tss_get и tss_set для TLS (thread-local storage).
- Данные локализации обновлены до свежей четвёртой редакции стандарта ISO 14651 для полного соответствия с Unicode 9.0.0. Для многих локалей добавлены новые свойства "Collation", позволяющие задавать правила сортировки и методы сопоставления с учётом смысла символов. Включение данной информации привело к увеличению размера скомпилированных файлов с локалями;
- При сборке обеспечена поддержка технологии Intel CET (Control-flow Enforcement Technology). При указании сборочной опции "--enable-cet" осуществляется включение для исполняемого кода защиты с использованием инструкций IBT (indirect
branch tracking) и SHSTK (shadow stack), при этом сохраняется совместимость со всеми существующими исполняемыми файлами и библиотеками. Новый режим сборки доступен для архитектур i386, x86_64 и x32 при сборке с GCC 8 и наличии
binutils 2.29;
- Добавлена корректная поддержка символов ABSOLUTE (SHN_ABS), поддерживаемых компоновщиком GNU linker;
- Кодировки, информация о типах символов и таблицы транслитерации обновлены для поддержки спецификации Unicode 11.0.0;
- Добавлены новые варианты математических функций, определённых в заголовочном файле math.h, которые округляют результат до типа narrower, определённого в спецификациях TS 18661-1:2014 и TS 18661-3:2015:
- fadd, faddl, daddl и соответствующие им fMaddfN, fMaddfNx, fMxaddfN и
fMxaddfNx;
- fsub, fsubl, dsubl и соответствующие им fMsubfN, fMsubfNx, fMxsubfN and
fMxsubfNx;
- fmul, fmull, dmull и соответствующие им fMmulfN, fMmulfNx, fMxmulfN and
fMxmulfNx;
- fdiv, fdivl, ddivl и соответствующие им fMdivfN, fMdivfNx, fMxdivfN and
fMxdivfNx;
- Добавлена локаль для якутского языка Yakut (sah_RU), в которой обеспечена поддержка двух разных грамматических форм имён месяцев;
- Для обработки интернационализированных доменных имён в функциях getaddrinfo и getnameinfo теперь используется система libidn2, при наличии соответствующей библиотеки. В случае отсутствия библиотеки libidn2 кодирование и декодирование интернационализированных имён не производится, даже при указании флагов AI_IDN и NI_IDN (указание не ASCII-символов приведёт к возврату ошибки). Ранее применяемые флаги AI_IDN_ALLOW_UNASSIGNED, AI_IDN_USE_STD3_ASCII_RULES,
NI_IDN_ALLOW_UNASSIGNED, NI_IDN_USE_STD3_ASCII_RULES объявлены устаревшими и игнорируются;
- При разборе динамических строковых токенов в DT_RPATH, DT_RUNPATH, DT_NEEDED, DT_AUXILIARY и DT_FILTER обеспечена поддержка всех выражений ELF gABI, включая конструкции '$ORIGIN$ORIGIN'. Для приложений с флагом SUID/GUID применение выражений ограничено и динамические строки интерпретируются как строковые литералы;
- Прекращена поставка устаревших заголовочных файлов libio.h и _G_config.h, функциональность которых предоставляется в stdio.h;
- Функции 'getc' и 'putc' теперь не определены в форме макросов, а реализованы через вызов (f)getc_unlocked и (f)putc_unlocked;
- Во всех функциях stdio изменено поведение при обработке конца файла в случае добавления данных после открытия файла (для для чтения добавленных данных требуется вызов clearerr или функций вида fseek и rewind);
- Макросы 'major', 'minor' и 'makedev' теперь доступны только при подключении заголовочного файла sys/sysmacros.h (загрузки sys/types.h недостаточно);
- Прекращена поддержка конфигураций tilegx*-*-linux-gnu;
URL: https://sourceware.org/ml/libc-alpha/2018-08/msg00003.html
Новость: https://www.opennet.dev/opennews/art.shtml?num=49059