3장. 컴파일러 및 툴
C 예외 처리로 인해 더 이상 예기치 않은 종료가 발생하지 않음
이전에는 C 예외를 처리하는 코드에서 잘못된 검사로 인해 32비트 Intel 아키텍처에서 잘못된 unwind routine이 호출되었습니다. 그 결과
glibc
라이브러리의 pthread_cond_wait()
함수는 glibc
를 사용하여 C 프로그래밍 언어로 작성된 바인딩 및 애플리케이션에서 데이터를 작성할 수 있었습니다. 잘못된 검사가 수정되었으며 예기치 않은 종료가 더 이상 발생하지 않습니다. (BZ#1104812)
-pie 옵션을 사용하여 생성된 실행 파일이 올바르게 시작됩니다.
이전에는
binutils
패키지에 포함된 링커에서 32비트 Intel 아키텍처의 위치 독립적인 바이너리에 대한 잘못된 동적 재배치가 생성되었습니다. 결과적으로 -pie 컴파일러 옵션을 사용하여 코드를 빌드하면 시작하지 못한 바이너리 파일이 생성되었습니다. 링커가 수정되어 이제 올바르게 실행되는 위치 독립적인 실행 파일을 생성합니다. (BZ#1427285)
/etc/hosts.conf
에 따른 API에 대한 스레드 취소 지원
setmntent()
함수에 대한 thread-cancellation 지원의 결함으로 인해 함수가 실패할 것으로 예상되는 오류를 반환할 수 있습니다. 결과적으로 setmntent()
에 의존하는 프로그램이 시작되지 않을 수 있었습니다. setmntent()
함수가 수정되었으며 이제 예상대로 작동합니다.
또한
setttyent()
및 setnetgrent()
함수와 /etc/hosts.conf
파일에 의존하는 모든 API가 스레드 취소에 대한 향상된 지원을 제공하도록 개선되었습니다. (BZ#1437147)
LD
는 초기화된 데이터 후에 코드가 포함된 잘못된 실행 파일을 더 이상 생성하지 않음
이전에는 binutils
ld
링커가 코드가 0 값으로 초기화된 후 코드를 메모리의 잘못된 위치에 배치했습니다. 결과적으로 연결된 실행 파일의 프로그램은 세그먼트 오류로 인해 예기치 않게 종료되었습니다. 링커는 데이터에 대한 공간을 적절하게 할당하고 실행 가능한 코드를 올바른 시작 주소에 배치하도록 수정되었습니다. 결과적으로 연결된 실행 파일이 올바르게 실행됩니다. (BZ#1476412)
긴 필터 목록을 제공할 때 ss
프로그램이 더 이상 중지되지 않음
이전에는 ss 명령에 긴 필터 목록을 제공하면 정수 값 오버플로가 발생했습니다. 결과적으로 의 툴에서 프로그램 실행을 중지할 수 있었습니다. 이번 업데이트를 통해 소스 코드의 잘못된 비트가 수정되고 설명된 문제가 더 이상 발생하지 않습니다. (BZ#1476664)
SystemTap이 더 이상 로드가 많은 시스템에서 커널 패닉을 유발하지 않음
이전에는
SystemTap
툴의 프로브가 여러 프로세스에서 동시에 추가 및 제거되면 커널 패닉이 발생했습니다. 결과적으로 경우에 따라 로드가 많은 시스템에서 SystemTap
모듈을 언로드하면 커널 패닉이 발생했습니다. 프로브 제거 절차가 수정되었으며 SystemTap
으로 더 이상 설명된 상황에서 커널 패닉이 발생하지 않습니다. (BZ#1525651)