8.10. 컴파일러 및 개발 도구
GCC Toolset 13: GCC는 이제 벡터화가 활성화된 IBM POWER9, Little Endian에서 코드를 올바르게 컴파일합니다.
이전에는 IBM POWER9에서 코드를 컴파일할 때 벡터화가 활성화된 Little Endian이 활성화된 경우 GCC 컴파일러에서 잘못된 코드를 생성했습니다. expander의 Register Transfer Language (RTL) 패턴이 수정되었으며 코드가 올바르게 컴파일됩니다.
Jira:RHEL-45190[1]
glibc
동적 링커는 사용자 정의 malloc
구현의 TLS 액세스를 사용하여 애플리케이션에서 수행한 재차별 malloc
호출을 방지합니다.
일부 애플리케이션은 초기 실행 TLS 대신 글로벌 동적 스레드 로컬 스토리지(TLS)를 사용하는 사용자 지정 malloc
동적 메모리 할당 구현을 제공합니다. 이번 업데이트 이전에는 글로벌 동적 TLS를 사용하는 번들된 malloc
호출이 있는 애플리케이션에서 애플리케이션의 malloc
하위 시스템에 대한 재식 호출이 발생할 수 있었습니다. 그 결과 스택 소진 또는 내부 데이터 구조의 예기치 않은 상태로 인해 애플리케이션 malloc
호출이 충돌했습니다. 이번 업데이트를 통해 glibc
동적 링커는 사용자 정의 malloc
구현에서 TLS 액세스를 감지합니다. malloc
호출 중 TLS 액세스가 감지되면 TLS 처리 중 추가 호출을 건너뛰고 malloc
호출을 다시 시작할 수 없습니다.
ELF 생성자에서 dlopen()
을 호출하여 TLS 데이터를 더 이상 덮어쓰지 않습니다.
이전에는 glibc
동적 링커에서 ELF 생성자에서 dlopen()
함수가 호출된 특정 경우에 스레드-로컬 스토리지(TLS)의 초기화 상태를 올바르게 추적하지 않았습니다. 그 결과 애플리케이션에서 수정한 후 TLS 데이터가 원래 값으로 복원되었습니다. 이번 업데이트를 통해 동적 링커는 별도의 플래그를 사용하여 각 공유 오브젝트의 TLS 초기화를 추적합니다. 결과적으로 ELF 생성자에서 dlopen()
함수에 대한 호출으로 TLS 데이터가 예기치 않게 덮어쓰지 않습니다.
Perftools에서 더 이상 LTO 디버그 정보를 처리하지 못했습니다
이전에는 바이너리 파일에서 디버그 정보를 읽기 위해 성능 툴에서 사용하는 binutils
컬렉션의 Binary File Descriptor(BFD) 라이브러리에서 LTO(링크 시간 최적화)를 사용하여 GCC 컴파일러에서 생성된 디버그 정보를 처리할 수 없었습니다. 그 결과 perftools에 오류 메시지가 표시되고 LTO 디버그 정보가 포함된 파일을 검사할 때 올바르게 실행되지 못했습니다. BFD 라이브러리는 LTO를 사용하여 컴파일 중에 생성된 디버그 정보를 처리하도록 업데이트되었으며 영향을 받는 perftools는 이러한 디버그 정보를 성공적으로 처리합니다.
Jira:RHEL-43758[1]