4.11. 컴파일러 및 개발 도구

새로운 GCC Toolset 12

GCC Toolset 12는 최신 버전의 개발 툴을 제공하는 컴파일러 툴셋입니다. AppStream 리포지토리에서 소프트웨어 컬렉션 형식으로 Application Stream으로 사용할 수 있습니다.

GCC 컴파일러는 업스트림 GCC에서 제공되는 많은 버그 수정 및 개선 사항을 제공하는 12.1.1 버전으로 업데이트되었습니다.

GCC Toolset 12에서 다음 도구 및 버전을 제공합니다.

버전

GCC

12.1.1

GDB

11.2

binutils

2.35

dwz

0.14

annobin

10.76

GCC Toolset 12를 설치하려면 root로 다음 명령을 실행합니다.

# yum install gcc-toolset-12

GCC Toolset 12에서 툴을 실행하려면 다음을 수행합니다.

$ scl enable gcc-toolset-12 tool

GCC Toolset 12의 툴 버전이 다음 툴의 시스템 버전을 덮어쓰는 쉘 세션을 실행하려면 다음을 수행합니다.

$ scl enable gcc-toolset-12 bash

자세한 내용은 GCC Toolset 사용을 참조하십시오.

(BZ#2077276)

GCC Toolset 12: Annobin이 버전 10.76에 다시 기반

GCC Toolset 12에서 Annobin 패키지가 버전 10.76로 업데이트되었습니다.

주요 버그 수정 및 개선 사항은 다음과 같습니다.

  • nocheck에 대한 새로운 명령줄 옵션은 debuginfod 서비스를 사용하지 않도록 지시합니다. 디버그 정보를 찾을 수 없는 경우 다른 방식으로 디버그 정보를 찾을 수 없습니다. debuginfod 를 사용하면 추가 정보가 포함된 annocheck를 제공하지만 debuginfod 서버를 사용할 수 없는 경우nocheck의 성능이 저하될 수도 있습니다.
  • 이제 Annobin 소스를 구성하는 대신 mesonninja 를 사용하여 구축할 수 있습니다.
  • Annocheck는 이제 Rust 1.18 컴파일러에서 빌드한 바이너리를 지원합니다.

또한 다음 알려진 문제는 GCC Toolset 12 버전의 Annobin에서 보고되었습니다.

경우에 따라 다음과 유사한 오류 메시지와 함께 컴파일이 실패할 수 있습니다.

cc1: fatal error: inaccessible plugin file
opt/rh/gcc-toolset-12/root/usr/lib/gcc/architecture-linux-gnu/12/plugin/gcc-annobin.so
expanded from short plugin name gcc-annobin: No such file or directory

이 문제를 해결하려면 annobin.so 에서 gcc-annobin.so 로 플러그인 디렉토리에 심볼릭 링크를 만듭니다.

# cd /opt/rh/gcc-toolset-12/root/usr/lib/gcc/architecture-linux-gnu/12/plugin
# ln -s annobin.so gcc-annobin.so

아키텍처 가 사용되는 아키텍처로 교체되는 경우:

  • aarch64
  • i686
  • ppc64le
  • s390x
  • x86_64

(BZ#2077447)

GCC Toolset 12: binutils 버전 2.38으로 다시 기반

GCC Toolset 12에서 binutils 패키지가 2.38 버전으로 업데이트되었습니다.

주요 버그 수정 및 개선 사항은 다음과 같습니다.

  • binutils 패키지의 모든 도구는 이제 다중 바이트 문자를 표시하거나 경고하는 옵션을 지원합니다.
  • readelfobjdump 툴은 기본적으로 별도의 debuginfo 파일에 대한 링크를 자동으로 따릅니다. readelf--debug-dump=no-follow-links 옵션을 사용하거나 objdump--dwarf=no-follow-links 옵션을 사용하여 이 동작을 비활성화할 수 있습니다.

(BZ#2077448)

GCC 12 이상에서는 _FORTIFY_SOURCE 수준 3을 지원합니다.

이 향상된 기능을 통해 사용자는 GCC 버전 12 이상으로 빌드할 때 컴파일러 명령줄에서 -D_FORTIFY_SOURCE=3 을 사용하여 애플리케이션을 빌드할 수 있습니다. _FORTIFY_SOURCE 수준 3은 소스 코드 강화 범위를 개선하여 컴파일러 명령줄에서 -D_FORTIFY_SOURCE=3 으로 빌드된 애플리케이션의 보안을 개선합니다. 이는 GCC 버전 12 이상 및 Clang 버전 9.0 이상에서 지원되며 __builtin_dynamic_object_size 내장.

(BZ#2033684)

DNS stub resolver 옵션에서 no-aaa 옵션을 지원

이번 개선된 기능을 통해 glibc 는 이제 /etc/resolv.confRES_OPTIONS 환경 변수에서 no-aaaa stub resolver 옵션을 인식합니다. 이 옵션이 활성화되면 네트워크를 통해 AAAA 쿼리가 전송되지 않습니다. 시스템 관리자는 IPv4 전용 네트워크의 상위 조회가 DNS 문제에 기여하지 않는 등 진단 목적으로 AAAA DNS 조회를 비활성화할 수 있습니다.

(BZ#2096189)

glibc의 IBM Z Series z16 지원 추가

이제 glibc 에서 IBM z16 플랫폼과 함께 s390 명령어 세트에서 지원을 사용할 수 있습니다. IBM z16HWCAP_S390_VXRS_PDE2HWCAP_S390_NNPA 인 두 가지 추가 하드웨어 기능을 제공합니다. 그 결과 애플리케이션에서 이러한 기능을 사용하여 최적화된 라이브러리 및 기능을 제공할 수 있습니다.

(BZ#2077835)

새로운 make-latest 패키지

이번 개선된 기능에는 make 유틸리티의 최신 버전이 포함된 make-latest 패키지가 도입되었습니다. 이전에는 GCC Toolset을 통해 최신 make 버전을 제공했습니다. 이제 make-latest 패키지를 별도로 설치하고 scl enable make43 /bin/bash 를 사용하여 최신 버전을 실행할 수 있습니다(마이크43 버전이 최신인 경우).

(BZ#2083419)

GCC Toolset 12: GDB 기반 버전 11.2

GCC Toolset 12에서는 GDB 패키지가 버전 11.2로 업데이트되었습니다.

주요 버그 수정 및 개선 사항은 다음과 같습니다.

  • Aarch64 MTE에 대한 새로운 지원 memory-tag 접두사가 있는 새 명령을 참조하십시오.
  • -break-insert-dprintf-insert 에 대한 --qualified 옵션입니다. 이 옵션은 모든 범위에서 검색하는 대신 사용자의 이벤트 위치와 정확히 일치합니다.

    예를 들어 break --qualified foo 는 전역 범위에서 foo 라는 기호를 찾습니다. GDB는 --qualified 을 사용하지 않으면 해당 이름의 모든 범위에 대한 기호를 검색합니다.

  • --force-condition: 현재 유효하지 않은 경우에도 제공된 모든 조건이 정의됩니다.
  • -break-condition --force: Like command.
  • -file-list-exec-source-files 는 선택적 REGEXP 를 사용하여 출력을 제한할 수 있습니다.
  • .gdbinit 검색 경로에는 구성 디렉터리가 포함됩니다. 순서는 다음과 같습니다.

    1. $XDG_CONFIG_HOME/gdb/gdbinit
    2. $HOME/.config/gdb/gdbinit
    3. $HOME/.gdbinit
  • ~/.config/gdb/gdb/gdbearlyinit 또는 ~/.gdbearlyinit 에 대한 지원
  • -eix-eiex 초기 초기화 파일 옵션

터미널 사용자 인터페이스(TUI):

  • 터미널 사용자 인터페이스(TUI) 창 내에서 마우스 작업을 지원합니다.
  • 이제 집중된 창에서 작동하지 않는 키 조합이 GDB로 전달됩니다.

새 명령:

  • print memory-tag-violations 표시
  • print memory-tag-violations 설정
  • memory-tag show-logical-tag
  • memory-tag with-logical-tag
  • memory-tag show-allocation-tag
  • memory-tag 검사
  • start-quietlyset startup-quietly: GDB 스크립트에서 -q 또는 -quiet 을 지정하는 방법입니다. 초기 초기화 파일에서만 유효합니다.
  • 인쇄 유형 16진수를 표시하고 인쇄 유형 16진수 : 10진수 대신 16진수로 구조 멤버의 크기 또는 오프셋을 Tells GDB로 설정합니다.
  • python ignore-environment를 표시하고 python ignore-environment를 설정하면 GDB의 Python 인터프리터는 Python 환경 변수를 무시하고 Python 실행 파일에 -E 를 전달합니다. 초기 초기화 파일에서만 유효합니다.
  • python dont-write-bytecode를 표시하고 python dont-write-bytecode를 설정합니다: 이 명령은 GDB의 Python 인터프리터가 가져온 모듈의 바이트 코드 컴파일된 객체를 작성하지 못하도록 합니다. 초기 초기화 파일에서만 유효합니다.

변경된 명령:

  • CONDITION 경우 중단 : CONDITION 이 유효하지 않은 경우 GDB에서 DestinationRule을 설정하지 않습니다. -force-condition 옵션은 이를 덮어씁니다.
  • CONDITION -force N COND: 이전 명령과 동일합니다.
  • Inferior [ID]: ID가 생략되면 이 명령은 현재 유추에 대한 정보를 출력합니다. 그렇지 않으면 변경되지 않습니다.
  • ptype[/FLAGS] TYPE | EXPRESSION: /x 플래그를 사용하여 struct 멤버의 크기 및 오프셋을 출력할 때 16진수 표기법을 사용합니다. /d 플래그를 사용하여 10진수를 사용하여 동일한 작업을 수행합니다.
  • 정보 소스: 출력이 재구성되었습니다.

Python API:

  • Inferior 오브젝트에는 읽기 전용 connection_num 특성이 포함되어 있습니다.
  • 새로운 gdb.ECDHE.level() 메서드.
  • 새로운 gdb.PendingECDHE.level() 메서드.
  • gdb.Stop 대신 출력되는 GDB.BreakpoiontEvent.

(BZ#2077492)

libpfm 은 AMDECDHE 2 및ECDHE 3 프로세서 지원

이번 개선된 기능을 통해 사용자는 libpfm 을 사용하여 AMDECDHE 2 및 3 성능 모니터링 하드웨어에 액세스할 수 있습니다.

(BZ#2067218)

P api가 AMDECDHE 2 및ECDHE 3 프로세서 지원

이번 개선된 기능을 통해 사용자는 papi 를 사용하여 AMDECDHE 2 및 3 성능 모니터링 하드웨어에 액세스할 수 있습니다.

(BZ#2071558)

ARM 프로세서의 하드웨어 식별 개선

이번 개선된 기능을 통해 papi_avail 유틸리티에서 다양한 ARM 공급업체에 대한 벤더 문자열 및 코드 정보를 올바르게 보고합니다. 이 유틸리티를 사용하면 PAPI_get_hardware_info() 기능을 사용하여 aarch64 아키텍처로 제한되는 ARM 이외의 회사에서 제조하는 프로세서를 식별할 수 있습니다. 따라서 개발자는 필수 아키텍처의 코드를 조정할 수 있습니다.

(BZ#2037427)

업데이트된 Fujitsu A64FX 이벤트 매핑

Fujitsu A64FX 프로세서에 대해 PAPI 라이브러리가 업데이트되었습니다. 이제 사용자는 프로그램 성능을 분석하는 데 사용할 수 있는 papi_avail 출력에서 추가 사전 설정을 사용할 수 있습니다.

IDL 이벤트 사전 설정이 포함됩니다.

PAPI_BRU_IDL
분기 단위 유휴 상태
PAPI_FXU_IDL
정수 단위 유휴 상태
PAPI_FPU_IDL
부동 소수점 단위 유휴 상태
PAPI_LSU_IDL
로드 저장소 장치 유휴 상태

(BZ#2037417)

버전 12.1에 따라 패키지된 dyninst

dyninst 패키지는 버전 12.1로 업데이트되었습니다. 주요 버그 수정 및 개선 사항은 다음과 같습니다.

  • glibc-2.35 여러 네임스페이스에 대한 초기 지원
  • DWARF 병렬 구문 분석에 대한 동시성 수정
  • CUDACDNA2 GPU 바이너리 지원 개선
  • IBM POWER Systems(little endian) 레지스터 액세스 권한 향상.
  • PIE 바이너리 지원 개선
  • catch 블록에 대한 수정된 구문 분석입니다.
  • 64비트 ARM(aarch64) 부동 소수점 레지스터에 대한 액세스 수정

(BZ#2057676)

systemtap 패키지를 버전 4.7으로 재구축

systemtap 패키지가 버전 4.7로 다시 업데이트되었습니다. 주요 버그 수정 및 개선 사항은 다음과 같습니다.

  • SecureBoot 시스템에서 사용하기 위해 MOK 키로 모듈에 수동으로 서명하는 새로운 --sign-module 옵션입니다.
  • 새로운 stap-profile-annotate 툴로 주석이 달린 소스 코드의 시스템 전체 프로필을 생성합니다.
  • 검사 함수 항목 및 반환을 위한 새로운 일반 Python 탭셋입니다.
  • 사용자 공간에 있을 수 있는 문자열에 대한 커널 공간 프로브에 대한 $foo$ 처리.
  • 캡처되지 않은 그룹에 대해 정규식 언어를 확장합니다.
  • 최근 몇 가지 커널 시스템 호출에 대한 탭 설정 지원이 추가되었습니다.

(BZ#2057565)

Rrust Toolset 버전 1.62.1에 따라 업데이트

Rust가 1.62.1 버전으로 업데이트되었습니다. 주요 변경 사항은 다음과 같습니다.

  • 할당 종료를 사용하면 패턴이 할당 왼쪽의 기존 변수에 할당할 수 있습니다. 예를 들어 DestinationRule 할당은 (a, b) = (b, a)변수로 스왑할 수 있습니다.
  • 이제 core::arch::asm! 매크로를 사용하는 64비트 x86 및 64비트 ARM에서 인라인 어셈블리가 지원됩니다. 참조의 인라인 어셈블리 장인 /usr/share/doc/rust/html/reference/inline-assembly.html ( https://doc.rust-lang.org/reference/inline-assembly.html.)에서 자세한 내용을 참조하십시오.
  • 이제 dotnets는 명시적으로 주석이 있는 #[default] 변형을 사용하여 Default 특성을 도출할 수 있습니다.
  • 이제CondVar , CondVar , RwLock 은 pthreads가 아닌 사용자 정의 futex기반 구현을 사용하며 Rust 언어를 통해 새로운 최적화를 가능하게 합니다.
  • Rust는 이제 새로 설정된 종료 특성을 구현하는 사용자 정의 유형을 포함하여 기본 종료 코드의 사용자 정의 코드를 지원합니다.
  • dependency 기능에 대한 더 많은 제어 기능을 지원합니다. dep: 접두사는 기능을 노출하지 않고 선택적 종속성을 참조할 수 있으며, ?패키지 이름?/feature-name 과 같이 해당 종속성이 다른 위치에서 활성화된 경우에만 종속성 기능을 활성화합니다.
  • 3.3.2 ml에 종속 항목을 추가하는 새로운 기능 추가 하위 명령이 있습니다.
  • 자세한 내용은 업스트림 릴리스 시리즈를 참조하십시오.

(BZ#2075344)

LLVM Toolset 버전 14.0.6

LLVM Toolset은 14.0.6 버전으로 업데이트되었습니다. 주요 변경 사항은 다음과 같습니다.

  • 64비트 x86에서는 AVX512-FP16 명령에 대한 지원이 추가되었습니다.
  • ECDHEv9-A,ECDHEv9.1-A 및ECDHEv9.2-A 아키텍처가 추가되었습니다.
  • PowerPC에서 __ibm128 유형을 추가하여 IBM 이중 실행 형식을 나타내며 __attribute__(mode(IF)) 로도 사용할 수 있습니다.

Clang 변경:

  • C++2b 에 대한 Const eval이 이제 구현되어 있는 경우
  • 64비트 x86에서는 AVX512-FP16 명령에 대한 지원이 추가되었습니다.
  • 실험 상태의 OpenCL C 3.0 및 C++ for OpenCL 2021에 대한 지원이 완료되었습니다.
  • -E -P 사전 프로세서 출력은 이제 항상 GCC 동작과 일치하는 빈 행을 생략합니다. 이전에는 최대 8개의 연속 빈 줄이 출력에 표시될 수 있었습니다.
  • 지원 - C99 및 이후 표준을 사용한 후 C89뿐만 아니라 GCC의 동작과 일치합니다. 주목할 만한 사용 사례는 선언 및 코드를 혼합하는 것을 금지하지만 최신 C 표준으로 이동하려는 스타일 가이드를 지원하는 것입니다.

자세한 내용은 LLVM ToolsetClang 업스트림 릴리스 노트를 참조하십시오.

(BZ#2061042)

Toolset 다시 기반 버전 1.18.2

Go Toolset이 버전 1.18.2로 업데이트되었습니다.

주요 변경 사항은 다음과 같습니다.

  • 이전 버전의 Go와 이전 버전과의 호환성을 유지하면서 일반 일반이 도입되었습니다.
  • 새로운 퍼지셔닝 라이브러리입니다.
  • 새로운 debug/buildinfonet/netip 패키지.
  • go get 툴은 더 이상 패키지를 빌드하거나 설치하지 않습니다. 이제 go.mod 에서만 종속성을 처리합니다.
  • 기본 모듈의 go.mod 파일이 1.17 이상을 지정하는 경우 추가 인수 없이 사용된 go mod download 명령은 기본 모듈의 go.mod 파일에 명시적으로 필요한 모듈에 대한 소스 코드만 다운로드합니다. 또한 전송 종속 항목에 대한 소스 코드를 다운로드하려면 go mod download all 명령을 사용합니다.
  • go mod vendor 하위 명령은 이제 출력 디렉터리를 설정하는 -o 옵션을 지원합니다.
  • 이제 go mod tidy 명령으로 빌드 목록의 하나의 모듈만 가져온 각 패키지를 제공하는지 확인하는 데 소스 코드가 필요한 모듈에 대해 go.sum 파일에 추가 체크섬이 유지됩니다. 이 변경 사항은 기본 모듈의 go.mod 파일의 Go 버전에서 조건이 지정되지 않습니다.

(BZ#2075162)

LLVM gold 플러그인 은 IBM Z 아키텍처에서 사용할 수 있습니다.

이번 개선된 기능을 통해 IBM Z(s390x) 아키텍처에서 clangld.bfd 를 사용하여 LTO 빌드를 생성할 수 있습니다. s390x 아키텍처는 이제 ld.bfd 및 LTO와의 연결을 지원합니다.

(BZ#2088315)

새 모듈 스트림: maven:3.8

RHEL 8.7은 Maven 3.8 을 새 모듈 스트림으로 도입했습니다.

maven:3.8 모듈 스트림을 설치하려면 다음을 사용합니다.

# yum module install maven:3.8

maven:3.6 스트림에서 업그레이드하려면 이후 스트림으로 전환을 참조하십시오.

(BZ#2083114, BZ#2064785, BZ#2088473)

.NET 버전 7.0 사용 가능

Red Hat Enterprise Linux 8.7은 .NET 버전 7.0과 함께 배포됩니다. 주요 개선사항은 다음과 같습니다.

  • IBM Power 지원 (ppc64le)

자세한 내용은 .NET 7.0 RPM 패키지용 릴리스 정보 및 . NET 7.0 컨테이너용 릴리스 노트 를 참조하십시오.

(BZ#2112096)