8.10. Compiladores y herramientas de desarrollo


Los objetos compartidos no reubicados y no inicializados ya no provocan fallos si dlopen falla

Anteriormente, si la llamada dlopen fallaba, el enlazador dinámico de glibc no eliminaba los objetos compartidos con la marca NODELETE antes de informar del error. En consecuencia, los objetos compartidos no reubicados y no inicializados permanecían en la imagen del proceso, resultando eventualmente en fallos de aserción o caídas. Con esta actualización, el cargador dinámico utiliza un estado NODELETE pendiente para eliminar los objetos compartidos ante un fallo de dlopen, antes de marcarlos como NODELETE de forma permanente. Como resultado, el proceso no deja ningún objeto sin ubicar. Además, los fallos de enlace perezoso mientras se ejecutan los constructores y destructores ELF ahora terminan el proceso.

(BZ#1410154)

Las funciones SIMD avanzadas en la arquitectura ARM de 64 bits ya no se compilan mal cuando se resuelven de forma perezosa

Anteriormente, el nuevo estándar de llamadas a procedimientos vectoriales (PCS) para la SIMD avanzada no guardaba y restauraba correctamente ciertos registros guardados en la calle al resolver perezosamente funciones de la SIMD avanzada. Como consecuencia, los binarios podían comportarse mal en tiempo de ejecución. Con esta actualización, las funciones vectoriales de SIMD avanzada y SVE en la tabla de símbolos se marcan con .variant_pcs y, como resultado, el enlazador dinámico enlazará dichas funciones antes.

(BZ#1726641)

El script envolvente de sudo ahora analiza las opciones

Anteriormente, el script envolvente /opt/redhat/devtoolset*/root/usr/bin/sudo no analizaba correctamente las opciones de sudo. Como consecuencia, algunas opciones de sudo (por ejemplo, sudo -i) no podían ser ejecutadas. Con esta actualización, más opciones de sudo se analizan correctamente y, como resultado, el script envolvente de sudo funciona más como /usr/bin/sudo.

(BZ#1774118)

Se ha corregido la alineación de las variables TLS en glibc

Anteriormente, los datos alineados del almacenamiento local de hilos (TLS) podían, bajo ciertas condiciones, instanciarse sin la alineación esperada. Con esta actualización, la biblioteca de hilos POSIX libpthread ha sido mejorada para asegurar la correcta alineación bajo cualquier condición. Como resultado, los datos TLS alineados son ahora instanciados correctamente para todos los hilos con la alineación correcta.

(BZ#1764214)

Las llamadas repetidas a pututxline tras un error EINTR o EAGAIN ya no corrompen el archivo utmp

Cuando la función pututxline intenta adquirir un bloqueo y no lo consigue a tiempo, la función devuelve con el código de error EINTR o EAGAIN. Anteriormente, en esta situación, si se volvía a llamar inmediatamente a pututxline y se lograba obtener el bloqueo, no se utilizaba un espacio coincidente ya asignado en el archivo utmp, sino que se añadía otra entrada en su lugar. Como consecuencia, estas entradas no utilizadas aumentaban sustancialmente el tamaño del archivo utmp. Esta actualización corrige el problema, y ahora las entradas se añaden al archivo utmp correctamente.

(BZ#1749439)

mtrace ya no se cuelga cuando se producen fallos internos

Anteriormente, un defecto en la implementación de la herramienta mtrace podía hacer que el rastreo de memoria se colgara. Para solucionar este problema, la implementación del rastreo de memoria de mtrace se ha hecho más robusta para evitar el cuelgue incluso ante fallos internos. Como resultado, los usuarios pueden ahora llamar a mtrace y ya no se cuelga, completándose en un tiempo limitado.

(BZ#1764235)

La función de bifurcación evita ciertos bloqueos relacionados con el uso de pthread_atfork

Anteriormente, si un programa registraba un manejador de atfork e invocaba a fork desde un manejador de señales asíncronas, un defecto en el bloqueo interno dependiente de la implementación podía hacer que el programa se congelara. Con esta actualización, la implementación de fork y sus manejadores atfork se ajusta para evitar el bloqueo en programas de un solo hilo.

(BZ#1746928)

strstr ya no devuelve coincidencias incorrectas para un patrón truncado

En algunas plataformas IBM Z (z15, antes conocida como arch13), la función strstr no actualizaba correctamente un registro de la CPU al manejar patrones de búsqueda que cruzaban un límite de página. Como consecuencia, strstr devolvía coincidencias incorrectas. Esta actualización corrige el problema, y como resultado, strstr funciona como se espera en el escenario mencionado.

(BZ#1777241)

Se han corregido las expresiones de elipsis de fuente de C.UTF-8 en glibc

Anteriormente, un defecto en la configuración regional de origen C.UTF-8 hacía que todos los puntos de código Unicode por encima de U 10000 carecieran de pesos de cotejo. Como consecuencia, todos los puntos de código por encima de U 10000 no se cotejaban como se esperaba. Se ha corregido la configuración regional de origen C.UTF-8 y la configuración regional binaria recién compilada tiene ahora pesos de cotejo para todos los puntos de código Unicode. La configuración regional C.UTF-8 compilada es 5,3MiB mayor como resultado de esta corrección.

(BZ#1361965)

glibc ya no falla cuando se llama a getpwent( ) sin llamar a setpwent()

Si su archivo /etc/nsswitch.conf apuntaba al proveedor de contraseñas Berkeley DB(db), podía solicitar datos usando la función getpwent () sin llamar primero a setpwent( ) sólo una vez. Cuando se llamaba a la función endpwent (), las siguientes llamadas a getpwent() sin llamar primero a setpwent () hacían que glibc fallara porque endpwent() no podía restablecer los internos para permitir una nueva consulta. Esta actualización soluciona el problema. Como resultado, después de terminar una consulta con endpwent(), las siguientes llamadas a getpwent () iniciarán una nueva consulta incluso si no se llama a setpwent().

(BZ#1747502)

ltrace ahora puede rastrear las llamadas al sistema en los binarios reforzados

Anteriormente, ltrace no producía ningún resultado en ciertos binarios reforzados, como los binarios del sistema, en las arquitecturas de 64 bits de AMD e Intel. Con esta actualización, ltrace ahora puede rastrear las llamadas al sistema en los binarios reforzados.

(BZ#1655368)

El fallo JCC de Intel ya no provoca una pérdida de rendimiento significativa en el compilador GCC

Ciertas CPUs de Intel están afectadas por el error de código condicional de salto (JCC) que provoca la ejecución incorrecta de instrucciones de máquina. En consecuencia, las CPUs afectadas podrían no ejecutar los programas correctamente. La solución completa implica la actualización del microcódigo de las CPUs vulnerables, lo que puede causar una degradación del rendimiento. Esta actualización habilita una solución en el ensamblador que ayuda a reducir la pérdida de rendimiento. La solución está activada por defecto en not.

Para aplicar la solución, recompile un programa utilizando GCC con la opción de línea de comandos -Wa,-mbranches-within-32B-boundaries. Un programa recompilado con esta opción de línea de comandos no se verá afectado por el fallo de JCC, pero la actualización del microcódigo sigue siendo necesaria para proteger completamente un sistema.

Tenga en cuenta que la aplicación de la solución aumentará el tamaño del programa y puede causar una ligera disminución del rendimiento, aunque debería ser menor de lo que habría sido sin la recompilación.

(BZ#1777002)

make ya no se ralentiza al utilizar construcciones paralelas

Anteriormente, mientras se ejecutaban compilaciones paralelas, los subprocesos de make podían dejar de responder temporalmente cuando esperaban su turno para ejecutarse. Como consecuencia, las construcciones con valores -j altos se ralentizaban o se ejecutaban con valores -j efectivos más bajos. Con esta actualización, la lógica de control de trabajos de make es ahora no bloqueante. Como resultado, las compilaciones con valores -j altos se ejecutan a la máxima velocidad -j.

(BZ#1774790)

La herramienta ltrace ahora informa correctamente de las llamadas a funciones

Debido a las mejoras en el endurecimiento de los binarios aplicadas a todos los componentes de RHEL, la herramienta ltrace no podía detectar anteriormente las llamadas a funciones en los archivos binarios procedentes de los componentes de RHEL. Como consecuencia, la salida de ltrace estaba vacía porque no informaba de ninguna llamada detectada cuando se utilizaba en dichos archivos binarios. Esta actualización corrige la forma en que ltrace maneja las llamadas a funciones, lo que evita que se produzca el problema descrito.

(BZ#1618748)

Red Hat logoGithubRedditYoutubeTwitter

Aprender

Pruebe, compre y venda

Comunidades

Acerca de la documentación de Red Hat

Ayudamos a los usuarios de Red Hat a innovar y alcanzar sus objetivos con nuestros productos y servicios con contenido en el que pueden confiar.

Hacer que el código abierto sea más inclusivo

Red Hat se compromete a reemplazar el lenguaje problemático en nuestro código, documentación y propiedades web. Para más detalles, consulte el Blog de Red Hat.

Acerca de Red Hat

Ofrecemos soluciones reforzadas que facilitan a las empresas trabajar en plataformas y entornos, desde el centro de datos central hasta el perímetro de la red.

© 2024 Red Hat, Inc.