C

GCC 10.0.1

GNU 컴파일러 제품군은 버전 10.0.1로 최신화 되었습니다. 사용자의 시각적인 변경 확인은 업스트림 문서를 참고하세요. 페도라 32에 있는 꾸러미는 새로운 컴파일 버전으로 재구축되었습니다.

새로운 기능과 일반적인 개선

  • 새로 구성된 기능:

    • The __has_builtin built-in preprocessor operator can be used to query support for built-in functions provided by GCC and other compilers that support it.

    • ISO/IEC TS 18661에서 일치하는 기능을 위한 __builtin_roundeven.

  • 새로운 명령-줄 선택:

    • `-fallocation-dce`는 필요하지 않은 new 와 delete 연산자 쌍을 제거합니다.

    • -fprofile-partial-training can now be used to inform the compiler that code paths not covered by the training run should not be optimized for size.

    • -fprofile-reproducible controls level of reproducibility of profile gathered by -fprofile-generate. This makes it possible to rebuild program with same outcome which is useful, for example, for distribution packages.

  • 절차-간 최적화 개선:

    • 집계에 대한 절차-간 스칼라 대체(IPA-SRA) 패스가 연결-시간에 작동하도록 다시-구현되었습니다.

    • -finline-functions is now enabled at -O2 and was retuned for better code size versus runtime performance trade-offs. Inliner heuristics was also significantly sped up to avoid negative impact to -flto -O2 compile times.

    • 내장된 휴리스틱과 함수 복제는 이제 값-범위 자료 사용하여 개별 변환의 효율성을 예측 할 수 있습니다.

    • During link-time optimization the C++ One Definition Rule is used to increase precision of type based alias analysis.

  • 연결-시간 최적화 개선:

    • 신규 바이너리 lt0-dump가 추가되었습니다. 프로그램은 LTO 바이트코드 객체 파일에 대해 다양한 정보를 덤프 할 수 있습니다.

    • Parallel phase of the LTO can automatically detect a running make`s jobserver or can fall back to number of available cores.

    • The LTO bytecode can be compressed with zstd algorithm. Configure script can automatically detect the zstd support.

    • Most --param values can now be specified at translation unit granularity. This includes all parameters controlling the inliner and other inter-procedural optimizations. Unlike earlier releases, GCC 10 will ignore parameters controlling optimizations specified at link-time and apply parameters specified at compile-time in the same manner as done for optimization flags.

  • 프로파일 중심의 최적화 개선:

    • Profile New Languages and Language-Specific Improvementsmaintenance during compilation and hot/cold code partitioning have been improved.

    • Using -fprofile-values, an instrumented binary can track multiple values (up to 4) for e.g. indirect calls and provide more precise profile information.

신규 언어와 언어-상세화 개선

  • Version 2.6 of the OpenACC specification is now supported in the C, C++ and Fortran compilers. See the implementation status section on the OpenACC wiki page and the run-time library documentation for further information.

  • OpenMP and OpenACC now support offloading to AMD Radeon (GCN) GPUs; supported are the third-generation Fiji (fiji) and the fifth-generation VEGA 10/VEGA 20 (gfx900 or gfx906).

C 패밀리(family)

  • 새로운 속성.

  • 새로운 경고.

  • 기존 경고에 대한 개선 사항.

C

  • Several new features from the upcoming C2X revision of the ISO C standard are supported with -std=c2x and -std=gnu2x. Some of these features are also supported as extensions when compiling for older language versions. In addition to the features listed, some features previously supported as extensions and now added to the C standard are enabled by default in C2X mode and not diagnosed with -std=c2x -Wpedantic.

  • GCC now defaults to -fno-common. As a result, global variable accesses are more efficient on various targets. In C, global variables with multiple tentative definitions now result in linker errors. With -fcommon such definitions are silently merged during linking.

C++

  • 여러가지 C++20 기능이 구현되었습니다.

  • 여러가지 C++ Defect 보고가 해결 되었습니다.

  • 새로운 경고.

  • G++는 이제 constexpr 평가에서 상수 객체 수정을 감지 할 수 있습니다(정의되지 않은 행위).

  • G++는 더 이상 명시적 예상과 함께 가짜의 -Wsign-conversion 경고를 표시하지 않습니다.

  • 축소는 이제 더 많은 문맥에서 감지되었습니다 (예제: 케이스 값).

  • 컴파일러의 메모리 소비는 constexpr 평가에서 감소되었습니다.

  • `noexcept-specifier`는 이제 `[class.mem]`에 따라 완전한-클래스 문맥으로 적절하게 처리됩니다.

  • deprecated 속성은 이제 또한 이름공간에서도 사용 될 수 있습니다.

실행시간(runtime) 라이브러리 (libstdc++)

  • 다음을 포함하여 향상된 실험적인 C++2a 지원.

  • `std::random_device`에서 RDSEED를 위한 지원.

  • 헤더 종속성을 감소시켜서, 일부 코드의 컴파일 속도를 높입니다.

GNU C 라이브러리 버전 2.31

페도라 32은 GNU C 라이브러리 -glibc - 버전 2.31를 제공합니다. 주목 할만한 변경은 다음을 포함합니다:

새로운 기능

  • The GNU C Library now supports a feature test macro _ISOC2X_SOURCE to enable features from the draft ISO C2X standard. Only some features from this draft standard are supported by the GNU C Library, and as the draft is under active development, the set of features enabled by this macro is liable to change. Features from C2X are also enabled by _GNU_SOURCE, or by compiling with gcc -std=gnu2x.

  • The <math.h> functions that round their results to a narrower type now have corresponding type-generic macros in <tgmath.h>, as defined in TS 18661-1:2014 and TS 18661-3:2015 as amended by the resolution of Clarification Request 13 to TS 18661-3.

  • The function pthread_clockjoin_np has been added, enabling join with a terminated thread with a specific clock. It allows waiting against CLOCK_MONOTONIC and CLOCK_REALTIME. This function is a GNU extension.

  • 신규 로케일이 추가되었습니다: mnw_MM (미얀마에서 말로 사용되는 Mon 언어).

  • The DNS stub resolver will optionally send the AD (authenticated data) bit in queries if the trust-ad option is set via the options directive in /etc/resolv.conf (or if RES_TRUSTAD is set in _res.options). In this mode, the AD bit, as provided by the name server, is available to applications which call res_search and related functions. In the default mode, the AD bit is not set in queries, and it is automatically cleared in responses, indicating a lack of DNSSEC validation. (Therefore, the name servers and the network path to them are treated as untrusted.)

더 이상 사용하지 않고 제거된 기능

  • The totalorder and totalordermag functions, and the corresponding functions for other floating-point types, now take pointer arguments to avoid signaling NaNs possibly being converted to quiet NaNs in argument passing. This is in accordance with the resolution of Clarification Request 25 to TS 18661-1, as applied for C2X. Existing binaries that pass floating-point arguments directly will continue to work.

  • The obsolete function stime is no longer available to newly linked binaries, and its declaration has been removed from <time.h>. Programs that set the system time should use clock_settime instead.

  • We plan to remove the obsolete function ftime, and the header <sys/timeb.h>, in a future version of glibc. In this release, the header still exists but calling ftime will cause a compiler warning. All programs should use gettimeofday or clock_gettime instead.

  • The gettimeofday function no longer reports information about a system-wide time zone. This 4.2-BSD-era feature has been deprecated for many years, as it cannot handle the full complexity of the world`s timezones, but hitherto we have supported it on a best-effort basis. Changes required to support 64-bit time_t on 32-bit architectures have made this no longer practical.

  • The settimeofday function can still be used to set a system-wide time zone when the operating system supports it. This is because the Linux kernel reused the API, on some architectures, to describe a system-wide time-zone-like offset between the software clock maintained by the kernel, and the "RTC" clock that keeps time when the system is shut down.

  • SPARC ISA v7 is no longer supported. v8 is still supported, but only if the optional CAS instruction is implemented (for instance, LEON processors are still supported, but SuperSPARC processors are not).

  • If a lazy binding failure happens during dlopen, during the execution of an ELF constructor, the process is now terminated. Previously, the dynamic loader would return NULL from dlopen, with the lazy binding error captured in a dlerror message. In general, this is unsafe because resetting the stack in an arbitrary function call is not possible.

  • For MIPS hard-float ABIs, the GNU C Library will be configured to need an executable stack unless explicitly configured at build time to require minimum kernel version 4.8 or newer. This is because executing floating-point branches on a non-executable stack on Linux kernels prior to 4.8 can lead to application crashes for some MIPS configurations. While currently PT_GNU_STACK is not widely used on MIPS, future releases of GCC are expected to enable non-executable stack by default with PT_GNU_STACK by default and is thus likely to trigger a crash on older kernels.

  • System call wrappers for time system calls now use the new time64 system calls when available. On 32-bit targets, these wrappers attempt to call the new system calls first and fall back to the older 32-bit time system calls if they are not present. This may cause issues in environments that cannot handle unsupported system calls gracefully by returning -ENOSYS. Seccomp sandboxes are affected by this issue.

보안과 연관된 변경

  • CVE-2019-19126: ld.so는 `LD_PREFER_MAP_32BIT_EXEC`를 무시하는데 실패함 environment variable during program execution after a security transition, allowing local attackers to restrict the possible mapping addresses for loaded libraries and thus bypass ASLR for a setuid program. Reported by Marcin Kościelnicki.

glibc-2.31에 대한 상세한 정보를 위해 업스트림 뉴스 문서를 참고하세요; 문서가 계속해서 최신화 되므로 버전 2.31를 찾으려면 상하로 조절 해야 할 필요가 있습니다.

mpfr 4.0.2

페도라 32는 GNU MPFR 라이브러리 버전 4.0.2를 제공합니다. 주목 할만한 변경은 다음을 포함합니다:

  • mpfr은 이제 다중 스레드용 응용프로그램을 위한 공유 캐쉬를 지원하고, 이는 메모리 사용량을 줄여줍니다.

  • 개선된 캐슁: 정밀도가 최소 10% 증가는 너무 많은 재계산을 피하도록 보장해주며, 이는 CPU 사용량을 줄여줍니다.

  • 작은-정밀도의 mpz_t 풀은 메모리 할당 수를 줄여 주고, 이는 CPU 사용량을 감소합니다.

  • 여러 기능은 이제 더 빨라집니다; 예제로 mpfr_add, mpfr_sub, mpfr_mul, mpfr_div, mpfr_sqrt, mpfr_set_dmpfr_get_d.

  • mpfr_div_ui 기능은 mpfr 3에서 잘못된 반올림 결과를 생성 시킬 수 있습니다; 결정은 mpfr 4에서 수정되었습니다.

더 많은 정보를 위해, 버전 4.0.0, 4.0.1, 그리고 4.0.2용 업스트림 출시 기록을 방문하세요.