C

GCC 10.0.1

De GNU-compilersuite is bijgewerkt naar versie 10.0.1. Zie de upstream documentatie voor de veranderingen zichtbaar voor de gebruiker. Pakketten in Fedora 32 zijn herbouwd met de nieuwe versie van de compiler.

Nieuwe functies en algemene verbeteringen

  • Nieuwe ingebouwde functies:

    • De __has_builtin ingebouwde pre-processoroperator kan worden gebruikt om ondersteuning te zoeken voor ingebouwde functies van GCC en andere compilers die dit ondersteunen.

    • __builtin_roundeven voor de corresponderende functie in ISO/IEC TS 18661.

  • Nieuwe commandoregelopties:

    • -fallocation-dce verwijdert onnodige paren new en delete operatoren.

    • -fprofile-partial-training kan nu worden gebruikt om de compiler te informeren dat codepaden die niet onder de trainingsrun vallen niet geoptimaliseerd mogen worden voor grootte.

    • -fprofile-reproducible controleert het niveau van reproduceerbaarheid van het profiel dat is verzameld door -fprofile-generate. Dit maakt het mogelijk om een programma met hetzelfde resultaat opnieuw te bouwen, wat bijvoorbeeld handig is voor distributiepakketten.

  • Verbeteringen in inter-procedurele optimalisatie:

    • De inter-procedurele scalaire vervanging voor aggregaten (IPA-SRA)-pas werd opnieuw geïmplementeerd om te werken op het moment van linken.

    • -finline-functions is nu ingeschakeld op -O2 en is opnieuw afgestemd voor een betere codegrootte versus afwegingen van runtime-prestaties. Inliner heuristiek werd ook aanzienlijk versneld om negatieve impact op -flto -O2 compileertijden te voorkomen.

    • Inliner heuristiek en klonen van functies kunnen nu informatie over het waardebereik gebruiken om de effectiviteit van individuele transformaties te voorspellen.

    • Tijdens link-tijd optimalisatie wordt de C++ One Definition Rule gebruikt om de precisie van op type gebaseerde aliasanalyse te vergroten.

  • Link-tijd optimalisatieverbeteringen:

    • Er is een nieuwe binaire lto-dump toegevoegd. Het programma kan diverse informatie over een LTO bytecode-objectbestand dumpen.

    • De parallelle fase van de LTO kan automatisch een make`s jobserver detecteren of kan terugvallen op het aantal beschikbare kernen.

    • De LTO-bytecode kan worden gecomprimeerd met het zstd algoritme. Configuratiescript kan automatisch de zstd ondersteuning detecteren.

    • De meeste --param waarden kunnen nu gespecificeerd worden op de vertaaleenheid granulariteit. Dit omvat alle parameters die de inliner en andere inter-procedurele optimalisaties regelen. In tegenstelling tot eerdere releases, negeert GCC 10 parameters die de optimalisatie specificeren opgegeven tijdens link-tijd en past de parameters die zijn opgegeven tijdens link-tijd op dezelfde manier toe als voor optimalisatievlaggen.

  • Profielgestuurde optimalisatieverbeteringen:

    • Profileren van New Languages en taalspecifieke`Improvementsmaintenance` tijdens compilatie en hot/cold code-partitionering zijn verbeterd.

    • Met -fprofile-values kan een geïnstrumenteerd binair bestand meerdere waarden (maximaal 4) volgen voor bijv. indirecte oproepen en het bieden van nauwkeurigere profielinformatie.

Nieuwe talen en taal-specifieke verbeteringen

  • Versie 2.6 van de OpenACC specificatie wordt nu ondersteund in de C, C++ en Fortran-compilers. Zie de sectie over de implementatiestatus op de OpenACC wikipagina en de runtime-bibliotheek documentatie voor meer informatie.

  • OpenMP en OpenACC ondersteunt nu offloading naar AMD Radeon (GCN) GPU’s; ondersteund worden de derde-generatie Fiji (fiji) en de vijfde-generatie VEGA 10/VEGA 20 (gfx900 of gfx906).

C familie

  • Nieuwe attributen.

  • Nieuwe waarschuwingen.

  • Verbeteringen aan bestaande waarschuwingen.

C

  • Verschillende nieuwe eigenschappen van de aankomende C2X-herziening van de ISO C-standaard worden ondersteund met -std=c2x en`-std=gnu2x`. Sommige van deze eigenschappen worden ook ondersteund als extensies bij het compileren voor oudere taalversies. Naast de vermelde eigenschappen, zijn sommige eigenschappen die eerder als extensie werden ondersteund en nu aan de C-standaard zijn toegevoegd, standaard ingeschakeld in de C2X-modus en niet gediagnosticeerd met -std=c2x-Wpedantic.

  • GCC staat nu standaard op -fno-common. Als gevolg hiervan zijn globale variabele toegangen efficiënter op verschillende doelen. In C resulteren globale variabelen met meerdere voorlopige definities nu in linkerfouten. Met -fcommon worden dergelijke definities in stilte samengevoegd tijdens het linken.

C++

  • Er zijn verschillende C++20 eigenschappen geïmplementeerd.

  • Verschillende C++ Defect-rapporten zijn opgelost.

  • Nieuwe waarschuwingen.

  • G++ kan nu modificerende constante objecten detecteren in constexpr evaluatie (wat ongedefinieerd gedrag is).

  • G++ stuurt geen nep-'Wsign-conversion'-waarschuwingen meer uit met expliciete casts.

  • Versmalling wordt nu gedetecteerd in meer contexten (bijvoorbeeld case-waarden).

  • Het geheugenverbruik van de compiler is verminderd bij de evaluatie van constexpr.

  • De noexcept-specifier wordt nu correct behandeld als een volledige klasse-context volgens`[class.mem]`.

  • Het kenmerk deprecated kan nu ook op naamruimten worden gebruikt.

Runtime bibliotheek (libstdc++)

  • Verbeterde experimentele C++2a ondersteuning, inclusief.

  • Ondersteuning voor RDSEED in std::random_device.

  • Verminderde koptekstafhankelijkheden, wat leidt tot snellere compilatie voor sommige code.

De GNU C bibliotheek versie 2.31

Fedora 32 biedt de GNU C bibliotheek - glibc - versie 2.31. Opvallende veranderingen zijn onder meer:

Nieuwe eigenschappen

  • De GNU C-bibliotheek ondersteunt nu een functie testmacro _ISOC2X_SOURCE om functies van de concept ISO C2X-standaard mogelijk te maken. Slechts enkele functies van deze conceptstandaard worden ondersteund door de GNU C-bibliotheek, en aangezien het concept in actieve ontwikkeling is, kan de set functies die door deze macro mogelijk wordt gemaakt, veranderen. Eigenschappen van C2X worden ook mogelijk gemaakt door _GNU_SOURCE, of door te compileren met gcc -std=gnu2x.

  • De <math.h> functies die hun resultaten afronden op een smaller type hebben nu overeenkomstige type-generieke macro’s in`<tgmath.h>`, zoals gedefinieerd in TS 18661-1:2014 en TS 18661-3:2015 als gewijzigd door de resolutie van Clarification Request 13 bij TS 18661-3.

  • De functie pthread_clockjoin_np is toegevoegd, waardoor toetreden tot een afgesloten thread met een specifieke klok mogelijk is. Het staat wachten toe tegen CLOCK_MONOTONIC en`CLOCK_REALTIME`. Deze functie is een GNU-extensie.

  • Nieuwe landinstelling toegevoegd: mnw_MM (Mon taal die wordt gesproken in Myanmar).

  • De DNS-stub-resolver verzendt optioneel het AD-bit (geverifieerde data) in query’s als de trust-ad-optie is ingesteld via de optie-richtlijn in /etc/resolv.conf (of als RES_TRUSTAD is ingesteld in`_res.options`) . In deze modus is de AD-bit, zoals geleverd door de naamserver, beschikbaar voor toepassingen die res_search en gerelateerde functies aanroepen. In de standaardmodus is het AD-bit niet ingesteld in query’s en wordt het automatisch gewist in reacties, wat wijst op een gebrek aan DNSSEC-validatie. (Daarom worden de naamservers en het netwerkpad ernaar behandeld als niet-vertrouwd.)

Verouderde en verwijderde eigenschappen

  • De functies totalorder en totalordermag, en de overeenkomstige functies voor andere typen met drijvende komma, nemen nu aanwijzingsargumenten om te voorkomen dat signaal-NaN’s mogelijk worden omgezet in stille NaN’s bij het doorgeven van argumenten. Dit is in overeenstemming met de resolutie van Clarification Request 25 bij TS 18661-1, zoals toegepast voor C2X. Bestaande binaire bestanden die drijvende-kommargumenten rechtstreeks doorgeven, blijven werken.

  • De verouderde functie stime is niet langer beschikbaar voor nieuw gelinkte binaire bestanden en de declaratie ervan is verwijderd uit <time.h>. Programma’s die de systeemtijd instellen, moeten in plaats daarvan clock_settime gebruiken.

  • We zijn van plan om de verouderde functie ftime en de header <sys/timeb.h> in een toekomstige versie van glibc te verwijderen. In deze release bestaat de header nog steeds, maar het aanroepen van ftime zal een compilerwaarschuwing veroorzaken. Alle programma’s moeten in plaats daarvan gettimeofday of clock_gettime gebruiken.

  • De gettimeofday functie rapporteert niet langer informatie over een systeembrede tijdzone. Deze functie uit het 4.2-BSD-tijdperk is al vele jaren verouderd, omdat deze niet de volledige complexiteit van de tijdzones van de wereld aankan, maar tot nu toe hebben we deze op de beste manier ondersteund. Wijzigingen die nodig zijn om 64-bits time_t op 32-bits architecturen te ondersteunen, hebben dit niet langer praktisch gemaakt.

  • De settimeofday functie kan nog steeds worden gebruikt om een systeembrede tijdzone in te stellen wanneer het besturingssysteem dit ondersteunt. Dit komt omdat de Linux-kernel op sommige architecturen de API hergebruikt om een systeembrede tijdzone-achtige verschuiving te beschrijven tussen de softwareklok die door de kernel wordt bijgehouden, en de "RTC"-klok die de tijd bijhoudt wanneer het systeem wordt uitgeschakeld .

  • SPARC ISA v7 wordt niet langer ondersteund. v8 wordt nog steeds ondersteund, maar alleen als de optionele CAS instructie is geïmplementeerd (LEON processoren worden bijvoorbeeld nog steeds ondersteund, maar SuperSPARC processoren niet).

  • Als er een luie bindingsfout optreedt tijdens dlopen bij het uitvoeren van een ELF constructor, wordt het proces nu beëindigd. Voorheen retourneerde de dynamische lader NULL van dlopen, met de luie bindingsfout vastgelegd in een dlerror bericht. Over het algemeen is dit onveilig omdat het resetten van de stack in een willekeurige functieaanroep niet mogelijk is.

  • Voor MIPS hard-float ABI’s zal de GNU C bibliotheek worden geconfigureerd om een uitvoerbare stack nodig te hebben, tenzij expliciet geconfigureerd tijdens de bouw om minimale kernel versie 4.8 of nieuwer te vereisen. Dit komt omdat het uitvoeren van drijvende-komma-vertakkingen op een niet-uitvoerbare stack op Linux kernels vóór 4.8 kan leiden tot applicatiecrashes voor sommige MIPS-configuraties. Hoewel momenteel PT_GNU_STACK niet veel wordt gebruikt op MIPS, wordt verwacht dat toekomstige versies van GCC standaard een niet-uitvoerbare stack met` PT_GNU_STACK` zullen inschakelen en dus waarschijnlijk een crash op oudere kernels zullen veroorzaken.

  • Systeemaanroep wrappers voor tijdsysteemaanroepen gebruiken nu de nieuwe time64 systeemoproepen indien beschikbaar. Op 32-bits doelen proberen deze wrappers eerst de nieuwe systeemaanroepen aan te roepen en vallen ze terug op de oudere 32-bits tijdsysteemoproepen als ze niet aanwezig zijn. Dit kan problemen veroorzaken in omgevingen die niet-ondersteunde systeemaanroepen niet correct kunnen afhandelen door -ENOSYS terug te geven. Dit probleem heeft betrekking op Seccomp sandboxen.

Beveiligingsgerelateerde wijzigingen

  • CVE-2019-19126: ld.so kon de LD_PREFER_MAP_32BIT_EXEC niet negeren omgevingsvariabele tijdens programma-uitvoering na een veiligheidstransitie, waardoor lokale aanvallers de mogelijke toewijzingsadressen voor geladen bibliotheken kunnen beperken en zo ASLR voor een setuid-programma kunnen omzeilen. Gemeld door Marcin Kościelnicki.

Voor gedetailleerde informatie over glibc-2.31 bekijk je de upstream NEWS-document; houd er rekening mee dat je mogelijk naar beneden moet scrollen om versie 2.31 te vinden, aangezien het document voortdurend wordt bijgewerkt.

mpfr 4.0.2

Fedora 32 biedt de GNU MPFR bibliotheek versie 4.0.2 aan. Opvallende veranderingen zijn onder meer:

  • mpfr ondersteunt nu gedeelde caches voor toepassingen met meerdere threads, waardoor het geheugengebruik wordt verminderd.

  • Verbeterde caching: een verhoging van de precisie met minimaal 10% is gegarandeerd om te veel herberekeningen te voorkomen, waardoor het CPU-gebruik wordt verminderd.

  • Een mpz_t-pool met kleine precisie wordt gebruikt om het aantal geheugentoewijzingen te verminderen, waardoor het CPU-gebruik wordt verminderd.

  • Verschillende functies zijn nu sneller; bijvoorbeeld, mpfr_add, mpfr_sub, mpfr_mul, mpfr_div, mpfr_sqrt, mpfr_set_d en mpfr_get_d.

  • De functie mpfr_div_ui kan onjuist afgeronde resultaten opleveren in mpfr 3; de bug is opgelost in mpfr 4.

FVoor meer informatie bekijk je de upstream release notes voor versie 4.0.0, 4.0.1 en 4.0.2.