Sous-routine ldshread or ldnshread

Objectif

L'annonce un en-tête de section d'un fichier XCOFF.

Bibliothèque

Bibliothèque de routines d'accès au fichier objet (libld.a)

Syntaxe

#include <stdio.h>
#include <ldfcn.h>

int ldshread (ldPointer,SectionIndex,SectionHead)
LDFILE *ldPointer;
unsigned short SectionIndex;
void *SectionHead;

int ldnshread (ldPointer,SectionName, SectionHead)
LDFILE *ldPointer;
char *SectionName;
void *SectionHead;

Descriptif

La sous-routine ldshread lit l'en-tête de section spécifié par le paramètre SectionIndex du fichier objet commun actuellement associé au paramètre ldPointer dans la zone de mémoire à partir de l'emplacement spécifié par le paramètre SectionHead.

La sous-routine ldnshread lit l'en-tête de section nommé par l'argument SectionName dans la zone de mémoire à partir de l'emplacement spécifié par le paramètre SectionHead . Il est de la responsabilité de la routine d'appel de fournir un pointeur à une mémoire tampon suffisamment grande pour contenir l'en-tête de section du fichier objet associé. Etant donné que la sous-routine ldopen fournit des informations de nombre magique (via la macro HEADER (ldPointer ) .f_magic ), l'application appelante peut toujours déterminer si le pointeur SectionHead doit faire référence à une structure SCNHDR 32 bits ou SCNHDR_64 64 bits.

Seul le premier en-tête de section nommé par l'argument SectionName est renvoyé par la sous-routine ldshread .

Paramètres

Article Descriptif
ldPointer Pointe vers une structure LDFILE renvoyée en tant que résultat d'un appel réussi vers le sous-programme Ldopen, Lldopenou Ldaopen .
SectionIndex Indique l'index de l'en-tête de section à lire.
Remarque: La première section a un index de 1.
SectionHead Pointe vers une mémoire tampon suffisamment grande pour accepter une structure SCNHDR 32 bits ou 64 bits, en fonction du mode d'objet du fichier en cours de lecture.
SectionName Indique le nom de l'en-tête de section à lire.

Valeurs renvoyées

Les sous-programmes Ldshread et Ldnshread renvoient une valeur SUCCESS ou FAILURE.

Codes d'erreur

La sous-routine ldshread échoue si le paramètre SectionIndex est supérieur au nombre de sections dans le fichier objet. La sous-routine ldnshread échoue s'il n'y a pas de section avec le nom spécifié par le paramètre SectionName. La fonction échoue s'il ne peut pas lire l'en-tête de section spécifié.

Exemples

Voici un exemple de code qui ouvre un fichier objet, détermine son mode et utilise la sous-routine Ldnshread pour acquérir l'en-tête de section .text. Ce code sera compilé avec __XCOFF32__ et __XCOFF64__ définis:

#define __XCOFF32__
#define __XCOFF64__

#include <ldfcn.h>



/* for each FileName to be processed */

if ( (ldPointer = ldopen(FileName, ldPointer)) != NULL )
{
    SCNHDR    SectionHead32;
    SCNHDR_64 SectionHead64;
    void      *SectionHeader;

    if ( HEADER(ldPointer).f_magic == U802TOCMAGIC )
        SectionHeader = &SectionHead32;
    else if ( HEADER(ldPointer).f_magic == U803XTOCMAGIC )
        SectionHeader = &SectionHead64;
    else
        SectionHeader = NULL;

    if ( SectionHeader && (ldnshread( ldPointer, ".text", SectionHeader ) == SUCCESS) )
    {
        /* ...successfully read header... */
        /* ...process according to magic number... */
    }
}