Después de seis meses de desarrollo lanzamiento de la biblioteca del sistema (glibc) , que cumple completamente con los estándares ISO C11 y POSIX.1-2008. La nueva versión incluye correcciones de 58 desarrolladores.
Implementado en Glibc 2.31 se pueden destacar:
- Se ha agregado el macro _ISOC2X_SOURCE para habilitar las características definidas en el borrador del futuro estándar ISO . Estas características también se incluyen al usar el macro _GNU_SOURCE o al compilar en gcc con la opción «-std=gnu2x»;
- Para ciertas funciones definidas en el archivo de encabezado «math.h», que redondean sus resultados a un tipo de menor tamaño, se proponen macros de tipo genérico en el archivo «tgmath.h», como lo requieren las especificaciones TS 18661-1:2014 y TS 18661-3:2015;
- Se ha agregado la función pthread_clockjoin_np(), que espera la finalización de un hilo con un tiempo de espera (si el tiempo de espera expira antes de que termine, la función devolverá un error). A diferencia de , en pthread_clockjoin_np() se permite definir el tipo de temporizador para calcular el tiempo de espera — CLOCK_MONOTONIC (que considera el tiempo que el sistema ha pasado en modo de suspensión) o CLOCK_REALTIME;
- Se ha agregado soporte en el resolutor DNS para la opción trust-ad en /etc/resolv.conf y el flag RES_TRUSTAD en _res.options, que al ser establecidos permiten la transmisión del flag DNSSEC en las consultas DNS (data autenticada). En este modo, el flag AD establecido por el servidor se vuelve accesible para las aplicaciones que llaman funciones como res_search(). Por defecto, si no se establecen las opciones propuestas, glibc no indica el flag AD en las consultas y lo limpia automáticamente en las respuestas, lo que indica la ausencia de verificación DNSSEC;
- Ya no se requiere la instalación de los archivos de encabezado del núcleo de Linux para construir las capas de envoltura de las llamadas del sistema para Glibc. La excepción es la arquitectura de 64 bits RISC-V;
- Corregido , que permite eludir la protección
ASLR en programas con el flag setuid y determinar la disposición de direcciones en las bibliotecas cargadas manipulando la variable de entorno LD_PREFER_MAP_32BIT_EXEC.
Cambios que rompen la compatibilidad:
- En totalorder(), totalordermag() y funciones similares para otros tipos de punto flotante, ahora aceptan como argumento punteros para evitar advertencias de conversión de valores en estado , de acuerdo con las recomendaciones TS 18661-1, propuestas para el futuro estándar C2X.
Los archivos ejecutables existentes, en los que los argumentos de punto flotante se pasan directamente, continuarán funcionando sin cambios; - La función obsoleta stime, anunciada hace tiempo, ya no está disponible para los archivos binarios vinculados con glibc, y su definición ha sido eliminada de time.h. Para establecer la hora del sistema, se debe utilizar la función clock_settime. Se planea eliminar también la función ftime, marcada como obsoleta, así como el archivo de encabezado sys/timeb.h (en lugar de ftime, se debe utilizar gettimeofday o clock_gettime);
- La función gettimeofday ahora no proporciona información sobre la zona horaria del sistema (esta posibilidad era relevante en los tiempos de 4.2-BSD y se declaró obsoleta hace años). Ahora se debe pasar un puntero nulo en el argumento 'tzp', y para obtener información sobre la zona horaria en relación con la hora actual se debe utilizar la función localtime(). Al llamar a gettimeofday con un argumento 'tzp' no nulo, los campos tz_minuteswest y tz_dsttime en la estructura timezone devolverán valores vacíos. La función gettimeofday se considera obsoleta en POSIX (se recomienda usar clock_gettime en lugar de gettimeofday), pero no se planea eliminarla de glibc;
- En settimeofday se ha dejado de admitir el paso simultáneo de parámetros para establecer la hora y el ajuste de la desviación de tiempo. Al llamar a settimeofday, uno de los argumentos (tiempo o desplazamiento) ahora debe ser necesariamente establecido en null, de lo contrario, la llamada a la función finalizará con el error EINVAL. Al igual que gettimeofday, la función settimeofday se considera obsoleta en POSIX y se recomienda usar la función clock_settime o la familia de funciones adjtime;
- Se ha dejado de dar soporte para la arquitectura SPARC ISA v7 (el soporte para v8 se mantiene, pero solo para procesadores que admiten instrucciones CAS, como los procesadores LEON, pero no para los procesadores SuperSPARC).
- En caso de fallo de vinculación en modo “«, en el que el enlazador no busca símbolos de la función hasta el primer llamado a dicha función, la función dlopen ahora finaliza el proceso de forma forzada (anteriormente, al fallar, devolvía NULL);
- Para el ABI MIPS hard-float, ahora se utiliza una pila de ejecución, a menos que se especifique explícitamente una restricción sobre el uso del núcleo Linux 4.8+ mediante el parámetro “--enable-kernel=4.8.0” (con núcleos anteriores a 4.8 se observan fallos en algunas configuraciones MIPS);
- Las funciones relacionadas con las llamadas del sistema que manipulan el tiempo se han trasladado a la llamada del sistema time64, si está disponible (en sistemas de 32 bits, glibc primero intenta usar las nuevas llamadas del sistema que manipulan el tipo de 64 bits para el tiempo, y si no están disponibles, vuelve a las viejas llamadas de 32 bits).
Fuente: opennet.ru
