scjn - requisitos para solicitar vinculacion a proceso
Tabla de vinculaciĆ³n de proceso y tabla de compensaciĆ³n global (1)
Estoy leyendo este artículo en PLT (tabla de vinculación de procesos) y GOT (tabla de compensación global) . Si bien el objetivo de PLT es claro para mí, todavía estoy confundido acerca de GOT. Lo que he entendido del artículo es que GOT solo es necesario para las variables declaradas como extern
en una biblioteca compartida. Para las variables globales declaradas como static
en un código de biblioteca compartida, no es obligatorio.
Es mi entendimiento correcto, o estoy completamente perdido el punto.
Tal vez su confusión es con el significado de extern
. Dado que el enlace predeterminado es extern
, cualquier variable declarada fuera del alcance de la función sin la palabra clave static
es extern
.
El motivo por el que GOT es necesario se debe a que la dirección de las variables a las que accedió el código de la biblioteca compartida no se conoce en el momento en que se genera la biblioteca compartida. Depende de la dirección de carga en la que se carga la biblioteca (si la definición está en la biblioteca) o del código de terceros en el que está definida la variable (si la definición está en otra parte). Entonces, en lugar de poner la dirección en línea en el código, el compilador genera código para leer el GOT de la biblioteca compartida y luego carga la dirección del GOT en el tiempo de ejecución.
Si se sabe que la variable está definida dentro de la misma biblioteca compartida (ya sea porque es static
o el atributo de visibilidad hidden
o protected
que utilizó), la dirección relativa al código en la biblioteca puede corregirse en el momento en que se genera el archivo de biblioteca compartida . En este caso, en lugar de realizar una búsqueda a través de GOT, el compilador genera código para acceder a la variable con el direccionamiento relativo del contador de programa. Esto es menos costoso tanto en tiempo de ejecución como en tiempo de carga (porque el proceso completo de búsqueda y reubicación de símbolos se puede omitir en el momento de la carga).