4.10. Компиляторы и инструменты разработки (машинный перевод)

Boost обновлен до версии 1.66

Увеличение Библиотека C ++ была обновлена до вышестоящей версии 1.66. Версия Увеличение в Red Hat Enterprise Linux 7 включено 1,53. Для получения дополнительной информации см. Вышеприведенные журналы изменений: https://www.boost.org/users/history/

Это обновление представляет следующие изменения, нарушающие совместимость с предыдущими версиями:

  • bs_set_hook() функция, splay_set_hook() функция от splay-контейнеров, и bool splay = true дополнительный параметр в splaytree_algorithms() функция в назойливый Библиотека была удалена.
  • Комментарии или конкатенация строк в файлах JSON больше не поддерживаются анализатором в Дерево свойств библиотека.
  • Некоторые распределения и специальные функции из математический библиотека была исправлена, чтобы вести себя как задокументировано и поднять overflow_error вместо того, чтобы возвращать максимальное конечное значение.
  • Некоторые заголовки из математический библиотека была перемещена в каталог libs/math/include_private
  • Поведение basic_regex<>::mark_count() а также basic_regex<>::subexpression(n) функции от Regex библиотека была изменена, чтобы соответствовать их документации.
  • Использование вариационных шаблонов в Вариант библиотека может нарушать функции метапрограммирования.
  • boost::python::numeric API был удален. Пользователи могут использовать boost::python::numpy вместо.
  • Арифметические операции с указателями на необъектные типы больше не предоставляются в библиотеке Atomic.

(BZ#1494495)

Поддержка Unicode 11.0.0

Библиотека ядра C Red Hat Enterprise Linux, Glibc, был обновлен для поддержки стандартной версии Unicode 11.0.0. В результате все API широких и многобайтовых символов, включая транслитерацию и преобразование между наборами символов, предоставляют точную и правильную информацию, соответствующую этому стандарту.

(BZ#1512004)

boost пакет теперь не зависит от Python

С этим обновлением установка boost пакет больше не устанавливает Boost.Python библиотека как зависимость. Для того, чтобы использовать Boost.Python, необходимо явно установить boost-python3 или же boost-python3-devel пакеты.

(BZ#1616244)

Новый compat-libgfortran-48 пакет доступен

Для совместимости с приложениями Red Hat Enterprise Linux 6 и 7, использующими библиотеку Fortran, новый compat-libgfortran-48 пакет совместимости теперь доступен, который обеспечивает libgfortran.so.3 библиотека.

(BZ#1607227)

Ретполиновая поддержка в GCC

Это обновление добавляет поддержку retpolines для GCC. Retpoline - это программная конструкция, используемая ядром для снижения накладных расходов на смягчение атак Spectre Variant 2, описанных в CVE-2017-5715.

(BZ#1535774)

Расширенная поддержка 64-битной архитектуры ARM в компонентах цепочки инструментов

Компоненты Toolchain, GCC а также binutils, Теперь предоставьте расширенную поддержку для 64-битной архитектуры ARM. Например:

  • GCC а также binutils теперь поддерживает масштабируемое векторное расширение (SVE).
  • Поддержка для FP16 тип данных, предоставленный ARM v8.2, был добавлен в GCC FP16 Тип данных улучшает производительность определенных алгоритмов.
  • Инструменты из binutils теперь поддерживает определение архитектуры ARM v8.3, включая Pointer Authentication. Функция аутентификации указателя предотвращает нарушение нормального выполнения программы или ядра вредоносным кодом, создавая собственные указатели функций. В результате при переходе к разным местам в коде используются только доверенные адреса, что повышает безопасность.

(BZ#1504980, BZ#1550501, BZ#1504995, BZ#1504993, BZ#1504994)

Оптимизации для glibc для систем IBM POWER

Это обновление предоставляет новую версию glibc это оптимизировано для архитектур IBM POWER 8 и IBM POWER 9. В результате системы IBM POWER 8 и IBM POWER 9 теперь автоматически переключаются на соответствующие оптимизированные glibc вариант во время выполнения.

(BZ#1376834)

Библиотека GNU C обновлена до версии 2.28

Red Hat Enterprise Linux 8 включает версию 2.28 библиотеки GNU C (glibc). Заметные улучшения включают в себя:

  • Особенности укрепления безопасности:

    • Безопасные двоичные файлы, помеченные AT_SECURE флаг игнорировать LD_LIBRARY_PATH переменная окружения.
    • Обратные следы больше не печатаются при сбое проверки стека, чтобы ускорить завершение работы и избежать запуска большего количества кода в скомпрометированной среде.
  • Улучшения производительности:

    • Производительность malloc() функция была улучшена за счет локального кэша потока.
    • Дополнение GLIBC_TUNABLES переменная среды для изменения характеристик производительности библиотеки.
    • Реализация потоковых семафоров была улучшена и масштабируема pthread_rwlock_xxx() функции были добавлены.
    • Производительность математической библиотеки была улучшена.
  • Добавлена поддержка Unicode 11.0.0.
  • Добавлена улучшенная поддержка 128-битных чисел с плавающей запятой, как это определено стандартами ISO / IEC / IEEE 60559: 2011, IEEE 754-2008 и ISO / IEC TS 18661-3: 2015.
  • Улучшения решателя заглушки службы доменных имен (DNS), связанные с /etc/resolv.conf конфигурационный файл:

    • Конфигурация автоматически перезагружается при изменении файла.
    • Добавлена поддержка произвольного количества поисковых доменов.
    • Правильный случайный выбор для rotate опция была добавлена.
  • Добавлены новые возможности для разработки, в том числе:

    • Функции обёртки Linux для preadv2 а также pwritev2 вызовы ядра
    • Новые функции, в том числе reallocarray() а также explicit_bzero()
    • Новые флаги для posix_spawnattr_setflags() функция, такая как POSIX_SPAWN_SETSID

(BZ#1512010, BZ#1504125, BZ#506398)

CMake доступен в RHEL

Система сборки CMake версии 3.11 доступна в Red Hat Enterprise Linux 8 как cmake пакет.

(BZ#1590139, BZ#1502802)

make версия 4.2.1

Red Hat Enterprise Linux 8 распространяется с make Версия инструмента сборки 4.2.1. Заметные изменения включают в себя:

  • В случае неудачи рецепта отображаются имя файла сборки и номер строки рецепта.
  • --trace добавлена опция для отслеживания целей. Когда используется эта опция, каждый рецепт печатается перед вызовом, даже если он будет подавлен, вместе с именем файла и номером строки, где расположен этот рецепт, а также с предпосылками, вызывающими его вызов.
  • Смешивание явных и неявных правил больше не вызывает make прекратить исполнение. Вместо этого выводится предупреждение. Обратите внимание, что этот синтаксис устарел и может быть полностью удален в будущем.
  • $(file …​) была добавлена функция записи текста в файл. Когда вызывается без текстового аргумента, он только открывает и сразу закрывает файл.
  • Новая опция, --output-sync или же -O, Позволяет сгруппировать выходные данные из нескольких заданий и упростить отладку параллельных сборок.
  • --debug опция теперь принимает также n (Нет) флаг, чтобы отключить все в настоящее время включены параметры отладки.
  • != оператор присваивания оболочки был добавлен в качестве альтернативы $(shell …​) функция для повышения совместимости с make-файлами BSD. Более подробную информацию и различия между оператором и функцией см. В руководстве по GNU make.

Обратите внимание, что, как следствие, переменные с именем, оканчивающимся на восклицательный знак и сразу после которого присваивается, например, variable!=value, теперь интерпретируются как новый синтаксис. Чтобы восстановить предыдущее поведение, добавьте пробел после восклицательного знака, например variable! =value

+

  • ::= добавлен оператор присваивания, определенный стандартом POSIX.
  • Когда .POSIX переменная указана, make соблюдает стандартные требования POSIX для обработки обратной косой черты и новой строки. В этом режиме все завершающие пробелы до обратной косой черты сохраняются, и каждая обратная косая черта, за которой следует новая строка и символы пробела, преобразуется в один пробел.
  • Поведение MAKEFLAGS а также MFLAGS переменные теперь более точно определены.
  • Новая переменная, GNUMAKEFLAGS, анализируется для make флаги идентично MAKEFLAGS Как следствие, GNU make-специфичные флаги могут храниться снаружи MAKEFLAGS и переносимость make-файлов увеличивается.
  • Новая переменная, MAKE_HOST, содержащий архитектуру хоста.
  • Новые переменные, MAKE_TERMOUT а также MAKE_TERMERR, укажите, make записывает стандартный вывод и ошибку в терминал.
  • Настройка -r а также -R варианты в MAKEFLAGS переменная внутри make-файла теперь работает правильно и удаляет все встроенные правила и переменные, соответственно.
  • .RECIPEPREFIX настройка теперь запоминается по рецепту. Кроме того, переменные, раскрытые в этом рецепте, также используют эту настройку префикса рецепта.
  • .RECIPEPREFIX настройки и все переменные, специфичные для цели, отображаются в выходных данных -p вариант как будто в make-файле, а не как комментарии.

(BZ#1641015)

Go программы, созданные с Go Toolset соответствуют FIPS

Криптографическая библиотека доступна в Go Toolset был изменен, чтобы использовать OpenSSL версия библиотеки 1.1.0, если хост-система настроена в режиме FIPS. Как следствие, программы, созданные с этой версией Go Toolset соответствуют FIPS.

Чтобы программы Go использовали только несертифицированные стандартные криптографические процедуры, используйте -tags no_openssl вариант go компилятор во время сборки.

(BZ#1512570)

SystemTap версия 4.0

Red Hat Enterprise Linux 8 распространяется с SystemTap инструментальный инструмент версии 4.0. Заметные улучшения включают в себя:

  • Был улучшен расширенный бэкэнд Berkeley Packet Filter (eBPF), особенно строки и функции. Чтобы использовать этот бэкэнд, запустите SystemTap с --runtime=bpf вариант.
  • Добавлена новая служба экспортной сети для использования с системой мониторинга Prometheus.
  • Реализация проверки системного вызова была улучшена, чтобы при необходимости использовать точки трассировки ядра.

(BZ#1641032)

Улучшения в binutils версия 2.30

Red Hat Enterprise Linux 8 включает в себя версию 2.30 binutils пакет. Заметные улучшения включают в себя:

  • Улучшена поддержка новых расширений архитектуры s390x.

Ассемблер:

  • Добавлена поддержка формата файлов WebAssembly и преобразование WebAssembly в формат файлов ELF wasm32.
  • Добавлена поддержка архитектуры ARMv8-R и процессоров Cortex-R52, Cortex-M23 и Cortex-M33.
  • Добавлена поддержка архитектуры RISC-V.

Linkers:

  • Компоновщик теперь по умолчанию помещает код и данные только для чтения в отдельные сегменты. В результате созданные исполняемые файлы становятся больше и безопаснее в работе, поскольку динамический загрузчик может отключить выполнение любой страницы памяти, содержащей данные только для чтения.
  • Добавлена поддержка примечаний к свойствам GNU, которые предоставляют подсказки динамическому загрузчику о бинарном файле.
  • Ранее компоновщик генерировал недопустимый исполняемый код для технологии Intel Indirect Branch Tracking (IBT). Как следствие, сгенерированные исполняемые файлы не могут запуститься. Эта ошибка была исправлена.
  • Ранее gold компоновщик неправильно слил заметки о недвижимости. Как следствие, в сгенерированном коде могут быть включены неправильные аппаратные функции, и код может неожиданно завершить работу. Эта ошибка была исправлена.
  • Ранее gold компоновщик создал разделы заметок с байтами заполнения в конце для достижения выравнивания в соответствии с архитектурой. Поскольку динамический загрузчик не ожидал заполнения, он мог неожиданно завершить программу, которую он загружал. Эта ошибка была исправлена.

Другие инструменты:

  • readelf а также objdump У инструментов теперь есть возможность переходить по ссылкам в отдельные файлы информации об отладке и отображать в них информацию.
  • Новый --inlines опция расширяет существующие --line-numbers вариант objdump инструмент для отображения информации о вложенности для встроенных функций.
  • nm инструмент получил новую опцию --with-version-strings отображать информацию о версии символа после его имени, если оно есть.

(BZ#1641004, BZ#1637072, BZ#1501420, BZ#1504114, BZ#1614908, BZ#1614920)

Второй пилот Performace версия 4.1.3

Red Hat Enterprise Linux 8 распространяется с Производительность второго пилота (pcp) версия 4.1.3. Заметные улучшения включают в себя:

  • pcp-dstat инструмент теперь включает в себя исторический анализ и вывод в формате с разделителями-запятыми (CSV).
  • Утилиты журнала могут использовать метрические метки и текстовые записи справки.
  • pmdaperfevent Теперь инструмент сообщает правильные номера ЦП на нижних уровнях одновременной многопоточности (SMT).
  • pmdapostgresql инструмент теперь поддерживает Postgres серия 10.х.
  • pmdaredis инструмент теперь поддерживает Redis серия 5.х.
  • pmdabcc инструмент был улучшен динамической фильтрацией процессов и системными вызовами, ucalls и ustat для каждого процесса.
  • pmdammv Инструмент теперь экспортирует метрические метки, а формат версии увеличен до 3.
  • pmdagfs2 Инструмент поддерживает дополнительные метрики Глок и Глокодержатель.
  • Внесено несколько исправлений в политику SELinux.

(BZ#1641034)

Ключи защиты памяти

Это обновление включает аппаратные функции, которые позволяют изменять флаг защиты страниц для каждого потока. Новый glibc были добавлены оболочки системных вызовов для pkey_alloc(), pkey_free(), а также pkey_mprotect() функции. В дополнение pkey_set() а также pkey_get() были добавлены функции, позволяющие получить доступ к флагам защиты для каждого потока.

(BZ#1304448)

elfutils обновлено до версии 0.174

В Red Hat Enterprise Linux 8 elfutils Пакет доступен в версии 0.174. Заметные изменения включают в себя:

  • Ранее eu-readelf Инструмент может показывать переменную с отрицательным значением, как если бы она имела большое значение без знака, или показывать большое значение без знака как отрицательное значение. Это было исправлено и eu-readelf теперь ищет размер и подпись типов константных значений для правильного их отображения.
  • Новая функция dwarf_next_lines() для чтения .debug_line данные без CU были добавлены в libdw библиотека. Эта функция может использоваться как альтернатива dwarf_getsrclines() а также dwarf_getsrcfiles() функции.
  • Ранее файлы с более чем 65280 разделами могли вызывать ошибки в libelf а также libdw библиотеки и все инструменты, использующие их. Эта ошибка была исправлена. В результате продлен shnum а также shstrndx значения в заголовках файлов ELF обрабатываются правильно.

(BZ#1641007)

Valgrind обновлен до версии 3.14

Red Hat Enterprise Linux 8 распространяется с инструментом анализа исполняемого кода Valgrind версии 3.14. Заметные изменения включают в себя:

  • Новый --keep-debuginfo добавлена возможность сохранения отладочной информации для выгруженного кода. В результате сохраненные трассировки стека могут включать информацию о файлах и строках для кода, которого больше нет в памяти.
  • Добавлены подавления на основе имени исходного файла и номера строки.
  • Helgrind инструмент был расширен с опцией --delta-stacktrace указать вычисление полных следов стека истории. В частности, используя эту опцию вместе с --history-level=full может улучшить Helgrind производительность до 25%.
  • Ложноположительный показатель в Memcheck инструмент для оптимизированного кода на 64-битной архитектуре Intel и AMD, а также на 64-битной архитектуре ARM. Обратите внимание, что вы можете использовать --expensive-definedness-checks контролировать обработку проверок определенности и улучшать скорость за счет производительности.
  • Valgrind теперь может распознавать больше инструкций в младшей последовательности IBM Power Systems.
  • Valgrind теперь может частично обрабатывать целочисленные и строковые векторные инструкции процессора IBM Z архитектура z13.

Для получения дополнительной информации о новых опциях и их известных ограничениях см. valgrind(1) страница справочника.

(BZ#1641029, BZ#1501419)

GDB версия 8.2

Red Hat Enterprise Linux 8 распространяется с отладчиком GDB версии 8.2. К заметным изменениям относятся:

  • Протокол IPv6 поддерживается для удаленной отладки с помощью GDB и gdbserver
  • Отладка без отладочной информации была улучшена.
  • Завершение символов в пользовательском интерфейсе GDB было улучшено, чтобы предлагать лучшие предложения с использованием более синтаксических конструкций, таких как теги ABI или пространства имен.
  • Команды теперь могут выполняться в фоновом режиме.
  • Отладка программ, созданных на языке программирования Rust, теперь возможна.
  • Отладка языков C и C ++ была улучшена благодаря поддержке парсера для _Alignof а также alignof операторы, ссылки на значения C ++ и автоматические массивы C99 переменной длины.
  • Сценарии расширения GDB теперь могут использовать язык сценариев Guile.
  • Интерфейс языка сценариев Python для расширений был улучшен благодаря новым функциям API, декораторам кадров, фильтрам и разматывателям. Кроме того, скрипты в .debug_gdb_scripts Раздел конфигурации GDB загружаются автоматически.
  • GDB теперь использует Python версии 3 для запуска своих скриптов, в том числе симпатичных принтеров, декораторов кадров, фильтров и разматывателей.
  • Архитектура ARM и 64-битная ARM были улучшены за счет записи и воспроизведения выполнения процесса, включая 32-битные инструкции Thumb и инструкции системного вызова.
  • Добавлена поддержка реестра Intel MPX и нарушения привязки, реестра PKU и Intel Processor Trace.
  • Функции записи и воспроизведения были расширены, чтобы включить rdrand а также rdseed инструкции по системам на базе Intel.
  • Функциональность GDB в архитектуре IBM Z была расширена за счет поддержки точек трассировки и быстрых точек трассировки, векторных регистров и ABI, а также Catch системный вызов. Кроме того, GDB теперь поддерживает более свежие инструкции архитектуры.
  • Теперь GDB может использовать статические зонды пространства пользователя (SDT) SystemTap в 64-битной архитектуре ARM.

(BZ#1641022, BZ#1497096, BZ#1505346, BZ#1592332)

Локализация для RHEL распространяется в нескольких пакетах

В RHEL 8 локали и переводы больше не предоставляются одним glibc-common пакет. Вместо этого каждая локаль и язык доступны в glibc-langpack-CODE пакет. Кроме того, не все локали установлены по умолчанию, только те, которые выбраны в программе установки. Пользователи должны установить все остальные языковые пакеты, которые им нужны, отдельно.

Для получения дополнительной информации об использовании langpacks см. Installing and using langpacks

(BZ#1512009)

strace обновлен до версии 4.24

Red Hat Enterprise Linux 8 распространяется с strace версия инструмента 4.24. Заметные изменения включают в себя:

  • Функции подделки системных вызовов были добавлены с -e inject= вариант. Это включает введение ошибок, возвращаемых значений, задержек и сигналов.
  • Квалификация системного вызова была улучшена:

    • -e trace=/regex добавлена опция для фильтрации системных вызовов с помощью регулярных выражений.
    • Добавление знака вопроса к квалификации системного вызова в -e trace= опция позволяет strace продолжить, даже если квалификация не соответствует ни одному системному вызову.
    • В квалификации системных вызовов добавлено обозначение личности -e trace вариант.
  • Расшифровка kvm vcpu причина выхода была добавлена. Для этого используйте -e kvm=vcpu вариант.
  • libdw библиотека теперь используется для разматывания стека, когда -k опция используется. Кроме того, разделение символов возможно, когда libiberty библиотека установлена в системе.
  • Ранее -r вызванный вариант strace игнорировать -t вариант. Это было исправлено, и эти два варианта теперь независимы.
  • [Опция] `-A опция была добавлена для открытия выходных файлов в режиме добавления.
  • -X опция была добавлена для настройки xlat форматирование вывода.
  • Расшифровка адресов сокетов с помощью -yy опция была улучшена. Кроме того, блочная и символьная печать номера устройства в -yy режим был добавлен.

Кроме того, было добавлено, улучшено или обновлено декодирование следующих элементов:

  • netlink протоколы, сообщения и атрибуты
  • arch_prctl, bpf, getsockopt, io_pgetevent, kern_features, keyctl, prctl, pkey_alloc, pkey_free, pkey_mprotect, ptrace, rseq, setsockopt, socket, statx и другие системные вызовы
  • Много команд для ioctl системный вызов
  • Константы разных типов
  • Трассировка пути для execveat, inotify_add_watch, inotify_init, select, symlink, symlinkat системные вызовы и mmap системные вызовы с косвенными аргументами
  • Системные вызовы, специфичные для архитектур ARM __ARM_NR_*
  • Списки сигнальных кодов

(BZ#1641014)