Estoy tratando de implementar la resolución de símbolos para mi herramienta de verificación de coherencia de enlaces (análoga a revdep-rebuild de Gentoo, pero para Arch).
No hay símbolos con bind=STB_LOCAL en mi sistema (artix de escritorio), pero alrededor del 12% (381522) con versym=VER_NDX_LOCAL ; la mayoría de ellos (379189) están en section=SHN_UNDEF .
La mayoría de estos símbolos "locales indefinidos", ¡pero no todos! - en realidad son resueltos por otras bibliotecas. El patrón común es que los símbolos locales en /usr/lib/xxx/.../*.so que en realidad hacen referencia a símbolos globales en /usr/lib/xxx.so (y en sus bibliotecas NECESARIAS y, a veces, en otras bibliotecas cargadas dinámicamente). Supongo que estos /usr/lib/xxx/.../*.so se cargan dinámicamente usando dlopen() por /usr/lib/xxx.so como complementos.
Para asegurarme de que no haya símbolos huérfanos en el sistema, puedo especificar que /usr/lib/xxx.so es NECESARIO lib para todos /usr/lib/xxx/.../*.so a través del archivo de configuración de mi herramienta:
addLib=/usr/lib/bash/** /usr/bin/bash addLib=/usr/lib/hwloc/** /usr/lib/libhwloc.so ... addLib=/usr/lib/xorg/modules/** /usr/lib/Xorg ( ** significa "incluidos los subdirectorios", es decir, la última línea también se aplica a los modules/drivers ). Actualmente, mi configuración tiene 60 de esas líneas.
El problema es que 50 de estos símbolos "locales indefinidos" no hacen referencia a nada (no puedo encontrar el símbolo exportado correspondiente en el sistema), pero están en la section=SHN_UNDEF y no difieren de los símbolos locales "resolvibles" en ningún otro forma en que pude verificar. La mayoría de ellos están en nVidia blob /usr/lib/xorg/modules/drivers/nvidia_drv.so :
mi* se resuelven en /usr/lib/Xorg (por ejemplo, miPolyRectangle );miRegionCreate ).Me dijeron que estos símbolos huérfanos se eliminaron hace mucho tiempo de X11 lib y ahora están en línea, pero ¿cómo puedo distinguirlos de los que debería resolver? ¿Cómo los distingue Loader? O si no es así, lo que significa que simplemente ignora silenciosamente los símbolos "indefinidos locales" que no pudo resolver (lo cual es totalmente extraño), entonces yo también debería hacerlo, dejando así el 12% de los símbolos en el sistema sin marcar (y terminando con mucho más pequeño archivo de configuración, hablando del lado positivo). Y podría ser prácticamente irrelevante, pero para una mejor comprensión: ¿por qué estos símbolos en línea están en la sección DYNSYM?
Gracias por leer hasta ahora. :)