6.2.9. Compiladores y herramientas de desarrollo
El cargador dinámico de glibc
ya no falla al cargar una biblioteca compartida que utiliza DT_FILTER
y tiene un constructor
Antes de esta actualización, un defecto en la implementación del cargador dinámico de objetos compartidos como filtros hacía que el cargador dinámico fallara al cargar una biblioteca compartida que utilizara un filtro y tuviera un constructor. Con esta versión, la implementación del cargador dinámico de filtros(DT_FILTER
) ha sido corregida para manejar correctamente tales bibliotecas compartidas. Como resultado, el cargador dinámico ahora funciona como se espera en el escenario mencionado.
glibc
ahora puede eliminar los pseudo-montajes de la lista getmntent()
El kernel incluye pseudo-entradas de automontaje
en las tablas expuestas al espacio de usuario. En consecuencia, los programas que utilizan la API getmntent(
) ven tanto los montajes regulares como estos pseudo-montajes en la lista. Los pseudo-montajes no se corresponden con los montajes reales, ni incluyen información válida.
Con esta actualización, si la entrada de montaje tiene la opción de ignorar el
montaje presente en la configuración de automount(8
) la biblioteca glibc
ahora elimina estos pseudo-montajes de la lista de getmntent()
. Los programas que esperan el comportamiento anterior tienen que utilizar una API diferente.
(BZ#1743445)
El patrón movv1qi
ya no provoca errores de compilación en el código autovectorizado en IBM Z
Antes de esta actualización, se emitían instrucciones de carga erróneas para el patrón movv1qi
. Como consecuencia, cuando la auto-vectorización estaba en efecto, podía ocurrir una mala compilación en los sistemas IBM Z. Esta actualización corrige el patrón movv1qi
, y como resultado, el código se compila y ejecuta correctamente ahora.
(BZ#1784758)
PAPI_event_name_to_code()
ahora funciona correctamente en múltiples hilos
Antes de esta actualización, el código interno de PAPI no manejaba correctamente la coordinación de hilos. Como consecuencia, cuando varios hilos utilizaban la operación PAPI_event_name_to_code()
, se producía una condición de carrera y la operación fallaba. Esta actualización mejora el manejo de múltiples hilos en el código interno de PAPI. Como resultado, el código multihilo que utiliza la operación PAPI_event_name_to_code
() ahora funciona correctamente.
(BZ#1807346)
Mejora del rendimiento de las funciones matemáticas de glibc
en IBM Power Systems
Anteriormente, las funciones matemáticas de glibc
realizaban actualizaciones de estado de punto flotante y llamadas al sistema innecesarias en IBM Power Systems, lo que afectaba negativamente al rendimiento. Esta actualización elimina la actualización innecesaria del estado de punto flotante, y mejora las implementaciones de: ceil()
, ceilf()
, fegetmode()
, fesetmode()
, fesetenv()
, fegetexcept()
, feenableexcept()
, fedisablexcept()
, fegetround()
y fesetround()
. Como resultado, se ha mejorado el rendimiento de la biblioteca matemática en IBM Power Systems.
(BZ#1783303)
Las llaves de protección de la memoria son ahora compatibles con IBM Power
En IBM Power Systems, las interfaces de la llave de protección de memoria pkey_set
y pkey_get
eran anteriormente funciones stub, y en consecuencia siempre fallaban. Esta actualización implementa las interfaces, y como resultado, la biblioteca GNU C(glibc
) ahora soporta claves de protección de memoria en IBM Power Systems.
Tenga en cuenta que las claves de protección de memoria requieren actualmente la unidad de gestión de memoria (MMU) basada en hash, por lo que podría tener que arrancar ciertos sistemas con el parámetro del kernel disable_radix
.
(BZ#1642150)
papi-testsuite
y papi-devel
instalan ahora el paquete papi-libs
necesario
Anteriormente, los paquetes RPM papi-testsuite
y papi-devel
no declaraban una dependencia del paquete papi-libs
correspondiente. En consecuencia, las pruebas no se ejecutaban y los desarrolladores no disponían de la versión necesaria de la biblioteca compartida papi
para sus aplicaciones.
Con esta actualización, cuando el usuario instala los paquetes papi-testsuite
o papi-devel
, también se instala el paquete papi-libs
. Como resultado, el papi-testsuite
tiene ahora la biblioteca correcta que permite la ejecución de las pruebas, y los desarrolladores que utilizan papi-devel
tienen sus ejecutables enlazados con la versión adecuada de la biblioteca compartida papi
.
La instalación de los paquetes lldb
para múltiples arquitecturas ya no provoca conflictos de archivos
Anteriormente, los paquetes lldb
instalaban archivos dependientes de la arquitectura en ubicaciones independientes de la misma. Como consecuencia, la instalación de las versiones de 32 y 64 bits de los paquetes provocaba conflictos con los archivos. Esta actualización empaqueta los archivos en ubicaciones correctas dependientes de la arquitectura. Como resultado, la instalación de lldb
en el escenario descrito se completa con éxito.
(BZ#1841073)
getaddrinfo
ahora maneja correctamente un fallo de asignación de memoria
Anteriormente, después de un fallo de asignación de memoria, la función getaddrinfo
de la biblioteca GNU C glibc
no liberaba el contexto de resolución interno. Como consecuencia, getaddrinfo
no era capaz de recargar el archivo /etc/resolv.
conf durante el resto del tiempo de vida del hilo de llamada, lo que provocaba una posible fuga de memoria.
Esta actualización modifica la ruta de manejo de errores con una operación de liberación adicional para el contexto de resolución. Como resultado, getaddrinfo
recarga /etc/resolv.
conf con nuevos valores de configuración incluso después de un fallo intermitente de asignación de memoria.
glibc
evita ciertos fallos causados por el ordenamiento del resolver IFUNC
Anteriormente, la implementación de las bibliotecas librt
y libpthread
de la biblioteca GNU C glibc
contenía los resolvedores de funciones indirectas (IFUNC) para las siguientes funciones: clock_gettime
, clock_getcpuclockid
, clock_nanosleep
, clock_settime
, vfork
. En algunos casos, los resolvedores IFUNC podían ejecutarse antes de que las bibliotecas librt
y libpthread
fueran reubicadas. En consecuencia, las aplicaciones fallaban en el cargador dinámico de glibc
durante el inicio temprano del programa.
Con esta versión, las implementaciones de estas funciones se han trasladado al componente libc
de glibc
, lo que evita que se produzca el problema descrito.
Ya no se producen fallos de aserción durante pthread_create
Anteriormente, el cargador dinámico de glibc
no retrocedía los cambios en el contador interno de ID del módulo de almacenamiento local de hilos (TLS). Como consecuencia, podía producirse un fallo de aserción en la función pthread_create
después de que la función dlopen
hubiera fallado en ciertos aspectos. Con esta corrección, el cargador dinámico de glibc
actualiza el contador de ID del módulo TLS en un momento posterior, después de que ciertos fallos ya no puedan ocurrir. Como resultado, los fallos de aserción ya no ocurren.
glibc
instala ahora las dependencias correctas para las aplicaciones de 32 bits que utilizan nss_db
Anteriormente, el paquete nss_db .x86_64
no declaraba dependencias del paquete nss_db
.i686. Por lo tanto, la instalación automatizada no instalaba nss_db.i686
en el sistema, a pesar de tener un entorno de 32 bits glibc.i686
instalado. Como consecuencia, las aplicaciones de 32 bits que utilizaban nss_db
no realizaban búsquedas precisas en la base de datos de usuarios, mientras que las aplicaciones de 64 bits en la misma configuración funcionaban correctamente.
Con esta actualización, los paquetes glibc
tienen ahora dependencias débiles que activan la instalación del paquete nss_db
.i686 cuando tanto glibc.i686
como nss_db
están instalados en el sistema. Como resultado, las aplicaciones de 32 bits que utilizan nss_db
ahora funcionan correctamente, incluso si el administrador del sistema no ha instalado explícitamente el paquete nss_db
.i686.
información de localización deglibc
actualizada con el idioma Odia
El nombre del estado indio anteriormente conocido como Orissa ha cambiado a Odisha, y el nombre de su idioma oficial ha cambiado de Oriya a Odia. Con esta actualización, la información de localización de glibc
refleja el nuevo nombre del idioma.
Los subpaquetes de LLVM ahora instalan los archivos dependientes de arch en ubicaciones dependientes de arch
Anteriormente, los subpaquetes de LLVM instalaban archivos dependientes del arco en ubicaciones independientes del mismo. Esto provocaba conflictos al instalar versiones de 32 y 64 bits de LLVM. Con esta actualización, los archivos del paquete se instalan ahora correctamente en ubicaciones dependientes del arco, evitando conflictos de versión.
(BZ#1820319)
Las búsquedas de contraseñas y grupos ya no fallan en glibc
Anteriormente, el módulo nss_compat
de la biblioteca glibc
sobrescribía el estado errno
con códigos de error incorrectos durante el procesamiento de las entradas de contraseñas y grupos. En consecuencia, las aplicaciones no redimensionaban los búferes como se esperaba, haciendo que las búsquedas de contraseñas y grupos fallaran. Esta actualización corrige el problema, y las búsquedas ahora se completan como se esperaba.