Comprensión y programación de la toc

El TOC se utiliza para buscar objetos en un archivo XCOFF.

La tabla de contenido (TOC) de un archivo XCOFF es análoga a la tabla de contenido de un libro. El TOC se utiliza para buscar objetos en un archivo XCOFF. Un archivo XCOFF se compone de secciones que contienen distintos tipos de datos que se utilizarán para fines específicos. Algunas secciones pueden subdividirse en subsecciones o csects. Un csect es la unidad sustituible más pequeña de un archivo XCOFF. En tiempo de ejecución, el TOC puede contener las ubicaciones de csect (y las ubicaciones de etiquetas dentro de csects).

Las tres secciones que contienen csects son:

Elemento Descripción
.texto Indica que este csect contiene datos de código o de sólo lectura.
.datos Indica que este csect contiene datos de lectura-escritura.
.bss Indica que este csect contiene datos correlacionados no inicializados.

La clase de almacenamiento de la csect determina la sección en la que se agrupa la csect.

El TOC se encuentra en la sección .datos de un archivo de objeto XCOFF y se compone de entradas TOC. Cada entrada de TOC es una csect con clase de correlación de almacenamiento de TC o TD.

Una entrada TOC con clase de correlación de almacenamiento TD contiene datos escalares a los que se puede acceder directamente desde el TOC. Esto permite que algunos símbolos globales utilizados con frecuencia sean accedidos directamente desde el TOC en lugar de indirectamente a través de un csect de puntero de dirección contenido dentro del TOC. Para acceder a datos escalares en el TOC, se necesitan dos datos:

  • La ubicación del principio del TOC (es decir, el ancla de TOC).
  • El desplazamiento del ancla TOC a la entrada TOC específica que contiene los datos.

Una entrada de TOC con clase de correlación de almacenamiento de TC contiene las direcciones de otras csects o símbolos globales. Cada entrada puede contener una o más direcciones de csects o símbolos globales, pero se recomienda poner una sola dirección en cada entrada de TOC.

Cuando se monta un programa, los csects se ordenan de tal manera que los .texto csects se escriben primero, seguidos de todos los .datos csects excepto para el TOC. El TOC se escribe después de todos los demás .datos csects. Las entradas de TOC se reubican, de modo que las entradas de TOC con clase de correlación de almacenamiento de TC contienen las direcciones de csect después de la clasificación, en lugar de las direcciones de csect en el programa de origen.

Cuando se carga un módulo XCOFF, las entradas de TOC con clase de correlación de almacenamiento de TC se reubican de nuevo para que las entradas de TOC se rellenen con las direcciones reales en las que los csects residirán en la memoria. Para acceder a un csect en el módulo, se necesitan dos piezas de información:

  • La ubicación del principio del TOC.
  • El desplazamiento desde el principio del TOC hasta la entrada de TOC específica que apunta a la csect. Si una entrada TOC tiene más de una dirección, cada dirección se puede calcular añadiendo (0 ... (n-1)) * 4 al desplazamiento, donde n es la posición de la dirección csect definida con .tc pseudo-op.