XCOFF-Objektdateiformat

Zweck

Das erweiterte allgemeine Objektdateiformat (XCOFF) ist das Objektdateiformat für das Betriebssystem. XCOFF verbindet das allgemeine Standardobjektdateiformat (COFF) mit dem Formatkonzept des TOC-Moduls, das dynamisches Binden und das Ersetzen von Bereichen innerhalb einer Objektdatei ermöglicht. Eine Variante von XCOFF wird für 64-Bit-Objektdateien und ausführbare Dateien verwendet.

XCOFF ist die formale Definition von Maschinenimageobjekten und ausführbaren Dateien. Diese Objektdateien werden von Sprachprozessoren (Assembler und Compiler) und dem Binder (oder Linkeditor) erstellt und hauptsächlich vom Binder und dem Systemladeprogramm verwendet.

Der Standardname für eine ausführbare XCOFF-Datei lautet a.out.

Anmerkung: In diesen Informationen werden Bits in Big Endian-Reihenfolge aufgelistet.

Lesen Sie die folgenden Informationen, um mehr über XCOFF-Objektdateien zu erfahren:

Anwendungen schreiben, die XCOFF-Deklarationen verwenden

Programme können geschrieben werden, um 32-Bit-XCOFF-Dateien und/oder 64-Bit-XCOFF-Dateien zu verstehen. Die Programme selbst können im 32 -Bit-oder 64-Bit-Modus kompiliert werden, um 32 -Bit-oder 64-Bit-Programme zu erstellen. Durch die Definition von Vorprozessormakros können Anwendungen die richtigen Strukturdefinitionen aus den XCOFF-Headerdateien auswählen.
Hinweis: Dieses Dokument verwendet "XCOFF32" und ""XCOFF64"als Kurzform für" 32-Bit-XCOFF "bzw." 64-Bit-XCOFF ".

XCOFF32 -Deklarationen auswählen

Um die XCOFF32 -Definition auszuwählen, muss eine Anwendung lediglich die entsprechenden Headerdateien einschließen. Nur XCOFF32 -Strukturen, -Felder und -Vorprozessordefinitionen werden eingeschlossen.

Auswählen von XCOFF64 -Deklarationen

Um die XCOFF64 -Definitionen auszuwählen, muss eine Anwendung das Vorprozessormakro __XCOFF64__definieren. Wenn XCOFF-Headerdateien eingeschlossen werden, werden die Strukturen, Felder und Vorprozessoren eingeschlossen, die für XCOFF64 definiert sind. Wenn möglich, sind die Struktur-und Feldnamen identisch mit den XCOFF32 -Namen, aber die Feldgrößen und Offsets können abweichen.

XCOFF32 und XCOFF64 -Deklarationen auswählen

Zur Auswahl von Strukturdefinitionen für XCOFF32 und XCOFF64sollte eine Anwendung sowohl die Vorprozessormakros __XCOFF32__ als auch __XCOFF64__definieren. Dadurch werden Strukturen für beide Arten von XCOFF-Dateien definiert. Strukturen und Typdefinitionsnamen für XCOFF64 -Dateien erhalten das Suffix "_64". (Details finden Sie in den Headerdateien.)

XCOFF-Hybriddeklarationen auswählen

Eine Anwendung kann einzelne Strukturen auswählen, die Felddefinitionen für XCOFF32 -und XCOFF64 -Dateien enthalten. Für Felder, die in XCOFF32 -und XCOFF64 -Definitionen dieselbe Größe und denselben Offset haben, werden die Feldnamen beibehalten. Für Felder, deren Größe oder Offset zwischen XCOFF32 -und XCOFF64 -Definitionen unterschiedlich ist, haben die XCOFF32 -Felder das Suffix "32", die XCOFF64 -Felder das Suffix "64". Zur Auswahl von Hybridstrukturdefinitionen muss eine Anwendung das Vorprozessormakro __XCOFF_HYBRID__definieren. Beispiel: Die Symboltabellendefinition (in /usr/include/syms.h) hat den Namenn_offset32für das Feld n_offset für XCOFF32und den Namenn_offset64für das Feld n_offset für XCOFF64verwendet.

Informationen zu XCOFF

Assemblers und Compiler erzeugen XCOFF-Objektdateien als Ausgabe. Der Binder kombiniert einzelne Objektdateien zu einer ausführbaren XCOFF-Datei. Das Systemladeprogramm liest eine ausführbare XCOFF-Datei, um ein ausführbares Speicherimage eines Programms zu erstellen. Der symbolische Debugger liest eine ausführbare XCOFF-Datei, um symbolischen Zugriff auf Funktionen und Variablen eines ausführbaren Speicherimages bereitzustellen.

Eine XCOFF-Datei enthält die folgenden Teile:

  • Ein zusammengesetzter Header, der aus folgenden Elementen besteht:
    • Ein Dateiheader
    • Ein optionaler Zusatzheader
    • Abschnittsüberschriften, eine für jeden Abschnitt der Rohdaten der Datei
  • Rohdatenabschnitte, höchstens einer pro Abschnittsüberschrift
  • Optionale Verlagerungsinformationen für einzelne Rohdatenabschnitte
  • Optionale Zeilennummerninformationen für einzelne Rohdatenabschnitte
  • Eine optionale Symboltabelle
  • Eine optionale Zeichenfolgetabelle, die für alle Symbolnamen in XCOFF64 und für Symbolnamen mit mehr als 8 Byte in XCOFF32verwendet wird.

Nicht jede XCOFF-Datei enthält alle Teile. Eine minimale XCOFF-Datei enthält nur den Dateiheader.

Objekt und ausführbare Dateien

Die Struktur von XCOFF-Objektdateien und ausführbaren Dateien ist ähnlich. Eine ausführbare XCOFF-Datei (oder "Modul") muss einen zusätzlichen Header, einen Ladeprogrammabschnittsheader und einen Ladeprogrammabschnitt enthalten.

Der Abschnitt mit den Rohdaten des Ladeprogramms enthält Informationen, die erforderlich sind, um ein Modul dynamisch zur Ausführung in den Speicher zu laden. Beim Laden einer ausführbaren XCOFF-Datei in den Speicher werden die folgenden logischen Segmente erstellt:

  • Ein Textsegment (initialisiert über die.textAbschnitt der XCOFF-Datei).
  • Ein Datensegment, das aus initialisierten Daten besteht (initialisiert über die.dataAbschnitt der XCOFF-Datei) gefolgt von nicht initialisierten Daten (mit 0 initialisiert). Die Länge der nicht initialisierten Daten wird in der.bssAbschnittsüberschrift der XCOFF-Datei.

Die XCOFF-Dateiorganisation veranschaulicht die Struktur der XCOFF-Objektdatei.

XCOFF-Headerdateien

Die Datei xcoff.h definiert die Struktur der XCOFF-Datei. Die Datei xcoff.h enthält die folgenden Dateien:

Element Beschreibung
filehdr.h Definiert den Dateiheader.
aouthdr.h Definiert den Zusatzheader.
scnhdr.h Definiert die Abschnittsüberschriften.
loader.h Definiert das Format von Rohdaten in der.loaderein.
typchk.h Definiert das Format von Rohdaten in der.typchkein.
exceptab.h Definiert das Format von Rohdaten in der.exceptein.
dbug.h Definiert das Format von Rohdaten in der.debugein.
reloc.h Definiert die Verlagerungsinformationen.
linenum.h Definiert die Zeilennummerninformationen
syms.h Definiert das Symboltabellenformat.
storclass.h Definiert normale Speicherklassen.
dbxstclass.h Definiert Speicherklassen, die von den symbolischen Debuggern verwendet werden

Die Datei a.out.h enthält die Datei xcoff.h . Alle XCOFF-Include-Dateien enthalten die Datei xcoff32_64.h .

Weitere Informationen zu Abschnitten der XCOFF-Objektdatei finden Sie unter Abschnitte und Abschnittsüberschriften . Weitere Informationen zur Symboltabelle finden Sie unter "Symboltabelleninformationen" . Weitere Informationen zur Zeichenfolgetabelle finden Sie unter "Zeichenfolgetabelle" . Weitere Informationen zum Abschnitt 'Debug' finden Sie unter Abschnitt 'Debug' .

Verbunddateiheader

In den folgenden Abschnitten werden die Headerkomponenten der zusammengesetzten XCOFF-Datei beschrieben:

Dateiheader (filehdr.h)

Die Datei filehdr.h definiert den Dateiheader einer XCOFF-Datei. Der Dateiheader ist 20 Byte lang in XCOFF32 und 24 Byte lang in XCOFF64. Die Struktur enthält die in der folgenden Tabelle aufgeführten Felder.

Tabelle 1. Dateiheaderstruktur (definiert in filehdr.h)
Feldname und Beschreibung XCOFF32 XCOFF64
f_magic
Zielmaschine
  • Versatz: 0
  • Länge: 2
  • Versatz: 0
  • Länge: 2
f_nscns
Anzahl der Abschnitte
  • Versatz: 2
  • Länge: 2
  • Versatz: 2
  • Länge: 2
f_timdat
Uhrzeit und Datum der Dateierstellung
  • Versatz: 4
  • Länge: 4
  • Versatz: 4
  • Länge: 4
f_symptr+
Relative Byteadresse zum Symboltabellenanfang
  • Versatz: 8
  • Länge: 4
  • Versatz: 8
  • Länge: 8
f_nsyms+
Anzahl der Einträge in Symboltabelle
  • Versatz: 12
  • Länge: 4
  • Versatz: 20
  • Länge: 4
f_opthdr
Anzahl Byte im optionalen Header
  • Versatz: 16
  • Länge: 2
  • Versatz: 16
  • Länge: 2
f_flags
Flags (siehe "Felddefinitionen")
  • Versatz: 18
  • Länge: 2
  • Versatz: 18
  • Länge: 2
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist.

Felddefinitionen

Element Beschreibung
f_magic Gibt eine ganze Zahl an, die als Dateitypanzeigerbezeichnet wird und die Zielmaschine und die Umgebung der Objektdatei angibt. Für XCOFF32ist der einzige gültige Wert0x01DF(0737 Oktal). Für XCOFF64 ist der einzige gültige Wert 0x01F7 (0767 Oktal). Symbolische Namen für diese Werte finden Sie in der Datei /usr/include/filehdr.h.
f_nscns Gibt die Anzahl der in der Datei enthaltenen Abschnittsüberschriften an. Die erste Abschnittsüberschrift ist die Abschnittsüberschrift Nummer 1. Alle Verweise auf einen Abschnitt basieren auf 1.
f_timdat Gibt an, wann die Datei erstellt wurde (Anzahl der abgelaufenen Sekunden seit 00:00:00 UCT, 1. Januar 1970). Dieses Feld sollte entweder die tatsächliche Zeit angeben oder auf den Wert 0 gesetzt werden.
f_symptr Gibt einen Dateizeiger (Byte-Offset vom Anfang der Datei) zum Anfang der Symboltabelle an. Wenn der Wert desf_nsymsFeld ist 0, dannf_nsymsist nicht definiert.
f_nsyms Gibt die Anzahl der Einträge in der Symboltabelle an. Jeder Symboltabelleneintrag ist 18 Byte lang.
f_opthdr Gibt die Länge des Zusatzheaders in Byte an. Damit eine XCOFF-Datei ausführbar ist, muss der Hilfsheader vorhanden und _AOUTHSZ_EXEC Byte lang sein. (_AOUTHSZ_EXEC ist in aouthdr.hdefiniert.)
f_flags Gibt eine Bitmaske von Flags an, die den Typ der Objektdatei beschreiben. Die folgenden Informationen definieren die Flags:
Bitmaske
Flag
0x0001
F_RELFLG

Gibt an, dass die Verlagerungsinformationen für die Bindung aus der Datei entfernt wurden Dieses Flag darf von Compilern nicht gesetzt werden, auch wenn keine Verlagerungsinformationen benötigt wurden.

0x0002
F_Exec

Gibt an, dass die Datei ausführbar ist. Es sind keine unaufgelösten externen Referenzen vorhanden.

0x0004
F_LNNEIN

Gibt an, dass Zeilennummern von einem Dienstprogramm aus der Datei entfernt wurden. Dieses Flag wird von Compilern nicht gesetzt, auch wenn keine Zeilennummerninformationen generiert wurden.

0x0008
Reserviert.
0x0010
F_FDPR_PROF

Gibt an, dass das Profil der Datei mit dem Befehl fdpr erstellt wurde.

0x0020
F_FDPR_OPTI

Gibt an, dass die Reihenfolge der Datei mit dem Befehl fdpr geändert wurde.

0x0040
F_DSA-Speicher

Gibt an, dass die Datei die Unterstützung für sehr große Programme verwendet.

0x0080
Reserviert.
0x0100

F_VARIANZPG

Gibt an, dass eines der Member des Zusatzheaders, die die mittleren Seitengrößen angeben, ungleich null ist. Standardmäßig ist der Wert dieses Bits immer null.

0x0200
Reserviert.
0x0400
Reserviert.
0x0800
Reserviert.
0x1000
F_DYNLOAD

Gibt an, dass die Datei dynamisch geladen und ausgeführt werden kann. Externe Referenzen werden über Importe aufgelöst, und die Datei kann Exporte und die Verlagerung des Ladeprogramms enthalten.

0x2000
F_SHROBJ

Gibt an, dass die Datei ein gemeinsam genutztes Objekt (gemeinsam genutzte Bibliothek) ist. Die Datei kann separat geladen werden. Dies bedeutet, dass sie normalerweise nicht an andere Objekte gebunden ist und ihre Symbole für Ladeprogrammexporte als Symbole für den automatischen Import für andere Objektdateien verwendet werden.

0x4000
F_LOADONLY

Wenn die Objektdatei ein Member eines Archivs ist, kann sie vom Systemladeprogramm geladen werden, aber das Member wird vom Binder ignoriert. Wenn sich die Objektdatei nicht in einem Archiv befindet, hat dieses Flag keine Auswirkung.

0x8000
Reserviert.

Zusatzheader (aouthdr.h)

Der Zusatzheader enthält systemabhängige und implementierungsabhängige Informationen, die zum Laden und Ausführen eines Moduls verwendet werden. Die Informationen im Zusatzheader minimieren, wie viel der Datei vom Systemladeprogramm zur Ausführungszeit verarbeitet werden muss.

Der Binder generiert einen Zusatzheader für die Verwendung durch das Systemladeprogramm. Für eine Objektdatei, die nicht geladen wird, sind keine zusätzlichen Header erforderlich. Wenn zusätzliche Header von Compilern und Assemblern generiert werden, werden die Header vom Binder ignoriert.

Der Zusatzheader folgt unmittelbar auf den Dateiheader.
Hinweis: Wenn der Wert derf_opthdrFeld im Dateiheader ist 0, der Zusatzheader ist nicht vorhanden.

Die C-Sprachstruktur für den Zusatzheader ist in der Datei aouthdr.h definiert. Der Zusatzheader enthält die in der folgenden Tabelle aufgeführten Felder.

Tabelle 2. Zusätzliche Headerstruktur (definiert in aouthdr.h)
Feldname und Beschreibung XCOFF32 XCOFF64
o_mflag
Flags
  • Versatz: 0
  • Länge: 2
  • Versatz: 0
  • Länge: 2
o_vstamp
Version
  • Versatz: 2
  • Länge: 2
  • Versatz: 2
  • Länge: 2
o_tsize+
Textgröße in Byte
  • Versatz: 4
  • Länge: 4
  • Versatz: 56
  • Länge: 8
o_dsize+
Initialisierte Datenmenge in Byte
  • Versatz: 8
  • Länge: 4
  • Versatz: 64
  • Länge: 8
o_bsize+
Nicht initialisierte Datenmenge in Byte
  • Versatz: 12
  • Länge: 4
  • Versatz: 72
  • Länge: 8
o_entry+
Eingangspunktdeskriptor (virtuelle Adresse)
  • Versatz: 16
  • Länge: 4
  • Versatz: 80
  • Länge: 8
o_text_start+
Basisadresse des Textes (virtuelle Adresse)
  • Versatz: 20
  • Länge: 4
  • Versatz: 8
  • Länge: 8
o_data_start+
Basisadresse der Daten (virtuelle Adresse)
  • Versatz: 24
  • Länge: 4
  • Versatz: 16
  • Länge: 8
o_toc+
Adresse des TOC-Ankers
  • Versatz: 28
  • Länge: 4
  • Versatz: 24
  • Länge: 8
o_snentry
Abschnittsnummer für Eingangspunkt
  • Versatz: 32
  • Länge: 2
  • Versatz: 32
  • Länge: 2
o_sntext
Abschnittsnummer für .text
  • Versatz: 34
  • Länge: 2
  • Versatz: 34
  • Länge: 2
o_sndata
Abschnittsnummer für .data
  • Versatz: 36
  • Länge: 2
  • Versatz: 36
  • Länge: 2
o_sntoc
Abschnittsnummer für Inhaltsverzeichnis
  • Versatz: 38
  • Länge: 2
  • Versatz: 38
  • Länge: 2
o_snloader
Abschnittsnummer für Ladeprogrammdaten
  • Versatz: 40
  • Länge: 2
  • Versatz: 40
  • Länge: 2
o_snbss
Abschnittsnummer für .bss
  • Versatz: 42
  • Länge: 2
  • Versatz: 42
  • Länge: 2
o_algntext
Maximale Ausrichtung für .text
  • Versatz: 44
  • Länge: 2
  • Versatz: 44
  • Länge: 2
o_algndata
Maximale Ausrichtung für .data
  • Versatz: 46
  • Länge: 2
  • Versatz: 46
  • Länge: 2
o_modtype
Modultypfeld
  • Versatz: 48
  • Länge: 2
  • Versatz: 48
  • Länge: 2
o_cpuflag
Bit-Flags-CPU-Typen von Objekten
  • Versatz: 50
  • Länge: 1
  • Versatz: 50
  • Länge: 1
o_cputype
Reserviert für CPU-Typ
  • Versatz: 51
  • Länge: 1
  • Versatz: 51
  • Länge: 1
o_maxstack+
Maximal zulässige Stackgröße (Byte)
  • Versatz: 52
  • Länge: 4
  • Versatz: 88
  • Länge: 8
o_maxdata+
Maximal zulässige Datenmenge (Byte)
  • Versatz: 56
  • Länge: 4
  • Versatz: 96
  • Länge: 8
o_debugger+
Reserviert für Debugger.
  • Versatz: 60
  • Länge: 4
  • Versatz: 4
  • Länge: 4
o_textpsize+
Angeforderte Textseitengröße
  • Versatz: 64
  • Länge: 1
  • Versatz: 52
  • Länge: 1
o_datapsize+
Angeforderte Datenseitengröße.
  • Versatz: 65
  • Länge: 1
  • Versatz: 53
  • Länge: 1
o_stackpsize+
Angeforderte Stackseitengröße.
  • Versatz: 66
  • Länge: 1
  • Versatz: 54
  • Länge: 1
o_flags
Flags und Ausrichtung des threadlokalen Speichers
  • Versatz: 67
  • Länge: 1
  • Versatz: 55
  • Länge: 1
o_sntdata
Abschnittsnummer für .tdata
  • Versatz: 68
  • Länge: 2
  • Versatz: 104
  • Länge: 2
o_sntbss
Abschnittsnummer für .tbss
  • Versatz: 70
  • Länge: 2
  • Versatz: 106
  • Länge: 2
o_x64flags
XCOFF64 -Flags
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 108
  • Länge: 2
o_shmpsize+
Angeforderte Seitengröße für gemeinsam genutzten Speicher
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 110
  • Länge: 1
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist.

Felddefinitionen

Die folgenden Informationen definieren die zusätzlichen Headerfelder. Bei Einträgen mit zwei Beschriftungen ist die Beschriftung in runden Klammern der Name des alternativen ursprünglichen COFF-Dateiformats a.out .

Element Beschreibung
o_mflags (magic) Wenn der Wert deso_vstampFeld größer als 1 ist,o_mflagsDas Feld ist für die zukünftige Verwendung reserviert und sollte 0 enthalten. Andernfalls wird dieses Feld nicht verwendet.
o_vstamp (vstamp) Gibt die Formatversion für diesen Zusatzheader an. Die gültigen Werte sind 1 und 2. Wenn dieo_vstampFeld ist 2 in einer XCOFF32 -Datei, die neue Interpretation dern_typeFeld im Symboltabelleneintrag verwendet wird.
o_tsize (tsize) Gibt die Größe (in Byte) der Rohdaten für die.textein. Der.textAbschnitt enthält normalerweise den schreibgeschützten Teil des Programms. Dies ist derselbe Wert, der in ders_sizeFeld der Abschnittsüberschrift für die.textein.
o_dsize (dsize) Gibt die Größe (in Byte) der Rohdaten für die.dataein. Der.dataenthält die initialisierten Daten des Programms und ist beschreibbar. Dies ist derselbe Wert, der in ders_sizeFeld der Abschnittsüberschrift für die.dataein.
o_bsize (bsize) Gibt die Größe (in Byte) von.bssBereich, der für nicht initialisierte Variablen während der Ausführung verwendet wird und beschreibbar ist In der Datei sind keine Rohdaten für die.bssein. Dies ist derselbe Wert, der in ders_sizeFeld der Abschnittsüberschrift für die.bssein.
o_entry (entry) Gibt die virtuelle Adresse des Eingangspunkts an. (Siehe die Definition dero_snentryFeld.) Bei Anwendungsprogrammen ist diese virtuelle Adresse die Adresse des Funktionsdeskriptors. Der Funktionsdeskriptor enthält die Adressen des Eingangspunkts selbst und des Inhaltsverzeichnisankers. Der Offset des Eingangspunktfunktionsdeskriptors vom Anfang des übergeordneten Abschnitts kann wie folgt berechnet werden:
Section_offset_value=o_entry-s_paddr[o_snentry - 1],

Erläuterungen:s_paddrDie virtuelle Adresse, die im angegebenen Abschnittskopf enthalten ist.

o_text_start (text_start) Gibt die virtuelle Adresse des Abschnitts .text an. Dies ist die Adresse, die dem ersten Byte der.textRohdatenabschnitt. Dies ist derselbe Wert, der in ders_paddrFeld der Abschnittsüberschrift für die.textein.
o_data_start (data_start) Gibt die virtuelle Adresse der.dataein. Dies ist die Adresse, die dem ersten Byte der.dataRohdatenabschnitt. Dies ist derselbe Wert, der in ders_paddrFeld der Abschnittsüberschrift für die.dataein.

Zu Adressierungszwecken.bsswird davon ausgegangen, dass der Abschnitt.dataein.

o_toc Gibt die virtuelle Adresse des TOC-Ankers an (siehe Definition deso_sntocFeld).
o_snentry Gibt die Nummer des Dateiabschnitts an, der den Eingangspunkt enthält. (Dieses Feld enthält die Folgenummer des Dateiabschnittsheaders.) Der Eingangspunkt muss sich im.textoder.dataein.
o_sntext Gibt die Nummer der Datei an..textein. (Dieses Feld enthält die Folgenummer des Dateiabschnittsheaders.)
o_sndata Gibt die Nummer der Datei an..dataein. (Dieses Feld enthält die Folgenummer des Dateiabschnittsheaders.)
o_sntoc Gibt die Nummer des Dateiabschnitts an, der das Inhaltsverzeichnis enthält. (Dieses Feld enthält die Folgenummer des Dateiabschnittsheaders.)
o_snloader Gibt die Nummer des Dateiabschnitts an, der die Informationen zum Systemladeprogramm enthält (Dieses Feld enthält die Folgenummer des Dateiabschnittsheaders.)
o_snbss Gibt die Nummer der Datei an..bssein. (Dieses Feld enthält die Folgenummer des Dateiabschnittsheaders.)
o_algntext Gibt das Protokoll (Basis 2) der maximalen Ausrichtung an, die für jeden csect in der.textein.
o_algndata Gibt das Protokoll (Basis 2) der maximalen Ausrichtung an, die für jeden csect in der.dataund.bssAbschnitte.
o_modtype Gibt einen Modultyp an Der Wert ist eine ASCII-Zeichenfolge. Der folgende Modultyp wird vom Systemladeprogramm erkannt:
RO
Gibt ein schreibgeschütztes Modul an. Wenn ein gemeinsam genutztes Objekt mit diesem Modultyp keinen BSS-Abschnitt hat und nur von anderen schreibgeschützten Modulen abhängig ist, wird der Datenabschnitt des Moduls schreibgeschützt zugeordnet und von allen Prozessen, die das Objekt verwenden, gemeinsam genutzt.
o_cpuflag Bit-Flags-cputypes von Objekten.
o_cputype Reserviert. Dieses Byte muss auf 0 gesetzt werden.
o_maxstack Gibt die maximal zulässige Stackgröße (in Byte) für diese ausführbare Datei an. Wenn der Wert 0 ist, wird die maximale Stackgröße des Systems verwendet.
o_maxdata Gibt die maximale Datengröße (in Byte) an, die für diese ausführbare Datei zulässig ist. Wenn der Wert 0 ist, wird die maximale Systemstandarddatengröße verwendet.
o_debugger Dieses Feld sollte 0 enthalten. Wenn ein Debug für ein geladenes Programm ausgeführt wird, kann das Speicherabbild dieses Felds von einem Debugger geändert werden, um eine Trapinstruktion einzufügen.
o_sntdata Gibt die Nummer der.tdataDateiabschnitt. (Dieses Feld enthält die Folgenummer des Dateiabschnittsheaders.)
o_sntbss Gibt die Nummer der.tbssDateiabschnitt. (Dieses Feld enthält die Folgenummer des Dateiabschnittsheaders.)
o_flags Besteht aus vier 1-Bit-Flags und einem 4-Bit-.tdataAusrichtung:
_AOUT_TLS_LE 0x80 (Höchstwertbit vono_flags)
Das Programm verwendet das Modell "local-exec" für lokalen Threadspeicher. Ein solches Programm kann nicht dynamisch geladen werden.
_AOUT_RAS 0x40
Gibt an, dass eine Kernelerweiterung sicher für Schlüssel und Wiederherstellung ist
_AOUT_ALGNTDATA (niedrigstwertige 4 Bit vono_flags)
Dieses Feld gibt die gewünschte Ausrichtung des threadlokalen Speichers des Moduls an. Der Wert dieser 4-Bit-Zahl wird wie folgt interpretiert:
Bit 0-8    Log (base 2) of desired alignment
Bit 9-11   Reserved.
Bit 12     4KB page alignment 
Bit 13     64KB page alignment 
Bit 14-15  Reserved.
o_textpsize Gibt die Größe der Seiten für den Exec-Text an Der Standardwert ist 0 (vom System ausgewählte Seitengröße).
o_datapsize Gibt die Größe der Seiten für die Exec-Daten an Der Standardwert ist 0 (vom System ausgewählte Seitengröße). Der Wert vono_datapsizeÜberschreibt die Datenanforderung für große Seiten (durch Festlegen des F_LPDATA-Bits in der XCOFF-Datei)
o_stackpsize Gibt die Größe der Seiten für den Stack an Der Standardwert ist 0 (vom System ausgewählte Seitengröße).
o_shmpsize64 Gibt die Größe der Seiten für dieexecgemeinsam genutzter Speicher. Der Standardwert ist 0 (vom System ausgewählte Seitengröße). Dieses Feld ist nur in der XCOFF64 -Definition vorhanden.
o_x64flags Besteht aus 16 Markierungsbits. Dieses Feld ist nur in der XCOFF64 -Definition vorhanden.
_AOUT_SHR_SYMTAB 0x8000
Fordert die Erstellung einer gemeinsam genutzten Symboltabelle für dieses Programm an, die von allen Instanzen des Programms auf dem System verwendet wird Dieses Flag wird in einer gemeinsam genutzten Bibliothek ignoriert.
_AOUT_FORK_POLICY 0x4000
Wenn das Flag _AOUT_FORK_POLICY gesetzt ist, wird eine explizite Forktree-Richtlinie angefordert. Das Flag _AOUT_FORK_COR bestimmt, welche Richtlinie angefordert wird. Dieses Flag wird in einer gemeinsam genutzten Bibliothek ignoriert.
_AOUT_FORK_COR 0x2000
Wenn die Flags _AOUT_FORK_POLICY und _AOUT_FORK_COR gesetzt sind, wird die Forktree-Richtlinie zum Kopieren auf Referenz angefordert. Wenn das Flag A_OUT_FORK_POLICY festgelegt ist, das Flag _AOUT_FORK_COR jedoch nicht, wird die Forktree-Richtlinie zum Kopieren beim Schreiben angefordert.

Wenn _AOUT_FORK_POLICY nicht festgelegt ist, ist das Flag _AOUT_FORK_COR für die zukünftige Verwendung reserviert und sollte auf 0 gesetzt sein. Dieses Flag wird in einer gemeinsam genutzten Bibliothek ignoriert.

Im Allgemeinen kann eine Objektdatei mehrere Abschnitte eines bestimmten Typs enthalten, aber in einem ladbaren Modul muss genau ein Abschnitt vorhanden sein.text,.data,.bssund.loaderein. Ein ladbares Objekt kann auch ein.tdataAbschnitt und eine.tbssein.

Abschnittsüberschriften (scnhdr.h)

Jeder Abschnitt einer XCOFF-Datei hat einen entsprechenden Abschnittsheader, obwohl einige Abschnittsheader möglicherweise keinen entsprechenden Rohdatenabschnitt haben. Ein Abschnittsüberschrift stellt Identifikations-und Dateizugriffsinformationen für jeden Abschnitt bereit, der in einer XCOFF-Datei enthalten ist. Jeder Abschnittsheader in einer XCOFF32 -Datei ist 40 Byte lang, während XCOFF64 Abschnittsheader 72 Byte lang sind. Die Struktur der Programmiersprache C für eine Abschnittsüberschrift finden Sie in der Datei scnhdr.h . Eine Abschnittsüberschrift enthält die in der folgenden Tabelle aufgeführten Felder.

Tabelle 3. Headerstruktur für Abschnitte (definiert in scnhdr.h)
Feldname und Beschreibung XCOFF32 XCOFF64
s_name
Abschnittsname
  • Versatz: 0
  • Länge: 8
  • Versatz: 0
  • Länge: 8
s_paddr+
Physische Adresse
  • Versatz: 8
  • Länge: 4
  • Versatz: 8
  • Länge: 8
s_vaddr+
Virtuelle Adresse (entspricht physischer Adresse)
  • Versatz: 12
  • Länge: 4
  • Versatz: 16
  • Länge: 8
s_size+
Abschnittsgröße
  • Versatz: 16
  • Länge: 4
  • Versatz: 24
  • Länge: 8
s_scnptr+
Offset in Datei zu Rohdaten für Abschnitt
  • Versatz: 20
  • Länge: 4
  • Versatz: 32
  • Länge: 8
s_relptr+
Offset in Datei zu Verlagerungseinträgen für Abschnitt
  • Versatz: 24
  • Länge: 4
  • Versatz: 40
  • Länge: 8
s_lnnoptr+
Offset in Datei zu Zeilennummerneinträgen für Abschnitt
  • Versatz: 28
  • Länge: 4
  • Versatz: 48
  • Länge: 8
s_nreloc+
Anzahl der Verlagerungseinträge
  • Versatz: 32
  • Länge: 2
  • Versatz: 56
  • Länge: 4
s_nlnno+
Anzahl Zeilennummerneinträge
  • Versatz: 34
  • Länge: 2
  • Versatz: 60
  • Länge: 4
s_flags+
Flags zum Definieren des Abschnittstyps
  • Versatz: 36
  • Länge: 2
  • Versatz: 64
  • Länge: 4
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist.

Felddefinitionen

Die folgenden Informationen definieren die Headerfelder des Abschnitts:

Element Beschreibung
s_name Gibt einen mit Nullen aufgefüllte Abschnittsnamen mit 8 Byte an. Ein 8-Byte-Abschnittsname enthält kein abschließendes Nullzeichen. Mithilfe ders_flagsFeld anstelle dess_nameFeld, um einen Abschnittstyp zu bestimmen Zwei Abschnitte desselben Typs können unterschiedliche Namen haben, sodass bestimmte Anwendungen zwischen ihnen unterscheiden können.
s_paddr Gibt die physische Adresse des Abschnitts an Dies ist die Adresse, die von den Compilern und dem Binder für das erste Byte des Abschnitts zugeordnet und verwendet wird. Dieses Feld sollte 0 für alle Abschnitte mit Ausnahme der.text,.dataund.bssAbschnitte.
s_vaddr Gibt die virtuelle Adresse des Abschnitts an. Dieses Feld hat denselben Wert wie das Felds_paddrerlaubt.
s_size Gibt die Größe (in Byte) dieses Abschnitts an
s_scnptr Gibt einen Dateizeiger (Byte-Offset vom Anfang der Datei) auf die Rohdaten dieses Abschnitts an Wenn dieses Feld 0 enthält, enthält dieser Abschnitt keine Rohdaten. Andernfalls muss die Größe der Rohdaten in ders_sizeerlaubt.
s_relptr Gibt einen Dateizeiger (relative Byteadresse vom Anfang der Datei) auf die Verlagerungseinträge für diesen Abschnitt an Enthält dieser Abschnitt keine Verlagerungseinträge, muss dieses Feld 0 enthalten.
s_lnnoptr Gibt einen Dateizeiger (Byte-Offset vom Anfang der Datei) auf die Zeilennummereinträge für diesen Abschnitt an. Wenn dieser Abschnitt keine Zeilennummerneinträge enthält, muss dieses Feld 0 enthalten.
s_nreloc Gibt die Anzahl der Verlagerungseinträge für diesen Abschnitt an Wenn in einer XCOFF32 -Datei mehr als 65.534 Verlagerungseinträge erforderlich sind, ist der Feldwert 65535 und die Abschnittsüberschrift STYP_OVRFLO enthält die tatsächliche Anzahl der Verlagerungseinträge in ders_paddrerlaubt. Weitere Informationen zu Überlauf-Headern finden Sie unter "Abschnitte und Abschnittsüberschriften" . Wenn dieses Feld auf 65535 gesetzt ist,s_nlnnomuss auch auf 65535 gesetzt werden.
s_nlnno Gibt die Anzahl der Zeilennummerneinträge für diesen Abschnitt an Wenn in einer XCOFF32 -Datei mehr als 65.534 Zeilennummerneinträge erforderlich sind, ist der Feldwert 65535 und ein STYP_OVRFLO -Abschnittsheader enthält die tatsächliche Anzahl der Zeilennummerneinträge in ders_vaddrerlaubt. Weitere Informationen zu Überlauf-Headern finden Sie unter "Abschnitte und Abschnittsüberschriften" . Wenn dieses Feld auf 65535 gesetzt ist,s_nrelocmuss auch auf 65535 gesetzt werden.
s_flags Gibt Flags an, die den Abschnittstyp definieren Ein Abschnittstyp identifiziert den Inhalt eines Abschnitts und gibt an, wie der Abschnitt vom Binder des Systemladeprogramms verarbeitet werden soll. Das Feld s_flags besteht aus zwei 16-Bit-Feldern. Die niederwertigen 16 Bit geben den primären Abschnittstyp an. In den niederwertigen 16 Bit sollte nur ein einziges Bit gesetzt werden. Die höherwertigen 16 Bit geben einen Abschnittssubtyp an. Für einen primären Abschnittstyp ohne Subtypen sollten die höherwertigen 16 Bit 0 sein.
Hinweis: Der Befehl strip löscht logischerweise eine Abschnittsüberschrift, indem er das Feld s_flags auf -1 setzt.

Gültige Bitwerte sind:

Wert
Flag
0x0000
Reserviert.
0x0001
Reserviert.
0x0002
Reserviert.
0x0004
Reserviert.
0x0008
STYP_PAD

Gibt einen Blockabschnitt an. Ein Abschnitt dieses Typs wird verwendet, um die Ausrichtungsauffüllung zwischen Abschnitten in einer ausführbaren XCOFF-Objektdatei bereitzustellen. Dieser Abschnittsheadertyp ist veraltet, da das Auffüllen in einer XCOFF-Datei ohne entsprechenden Auffüllabschnittsheader zulässig ist.

0x0010
STYP_ZWERG

Gibt einen DWARF-Debugabschnitt an, der Quellendatei-und Symbolinformationen für den symbolischen Debugger bereitstellt.

Es sind mehrere Typen von DWARF-Abschnitten definiert. Der Typ eines DWARF-Abschnitts wird mit den höchstwertigen 16 Bit des Felds s_flags angegeben. Gültige Subtypen sind:

     Value   |     Macro	      | Description
		-----------------------------------------------
		0x10000  | SSUBTYP_DWINFO   | DWARF info section
		0x20000  | SSUBTYP_DWLINE   | DWARF line-number section
		0x30000  | SSUBTYP_DWPBNMS  | DWARF public names section
		0x40000  | SSUBTYP_DWPBTYP  | DWARF public types section
		0x50000  | SSUBTYP_DWARNGE  | DWARF aranges section
		0x60000  | SSUBTYP_DWABREV  | DWARF abbreviation section
		0x70000  | SSUBTYP_DWSTR    | DWARF strings section
		0x80000  | SSUBTYP_DWRNGES  | DWARF ranges section
    0x90000  | SSUBTYPE_DWLOC   | DWARF location lists section
		0xA0000  | SSUBTYPE_DWFRAME | DWARF frames section
	  0xB0000  | SSUBTYPE_DWMAC   | DWARF macros section
0x0020
STYP_TEXT

Gibt einen ausführbaren Textabschnitt (Codeabschnitt) an Ein Abschnitt dieses Typs enthält die ausführbaren Anweisungen eines Programms.

0x0040
STYP_DATEN

Gibt einen initialisierten Datenabschnitt an Ein Abschnitt dieses Typs enthält die initialisierten Daten und das Inhaltsverzeichnis eines Programms.

0x0080
STYP_BSS

Gibt einen nicht initialisierten Datenabschnitt an. Ein Abschnittskopf dieses Typs definiert die nicht initialisierten Daten eines Programms.

0x0100
STYP_EXCEPT

Gibt einen Ausnahmeabschnitt an. Ein Abschnitt dieses Typs enthält Informationen zur Ermittlung der Ursache für das Auftreten eines Traps oder einer Ausnahmebedingung in einem ausführbaren Objektprogramm.

Element Beschreibung
 
0x0200
STIL-INFO

Gibt einen Kommentarabschnitt an. Ein Abschnitt dieses Typs stellt Kommentare oder Daten für spezielle Verarbeitungsdienstprogramme bereit.

0x0400
STYP_TDATEN

Gibt einen initialisierten Abschnitt für lokale Threaddaten an

0x0800
STYP_TBSS

Gibt einen nicht initialisierten Abschnitt für lokale Threaddaten an

s_flagsdauerhafter

Gültige Bitwerte sind:

Wert
Flag
0x1000
STYP_LOADER

Gibt einen Ladeprogrammabschnitt an. Ein Abschnitt dieses Typs enthält Objektdateiinformationen für das Systemladeprogramm, um eine ausführbare XCOFF-Datei zu laden. Die Informationen umfassen importierte Symbole, exportierte Symbole, Verlagerungsdaten, Typprüfungsinformationen und Namen gemeinsam genutzter Objekte.

0x2000
STYP_DEBUG

Gibt einen Debugabschnitt an. Ein Abschnitt dieses Typs enthält vom symbolischen Debugger verwendete stabstring-Informationen.

0x4000
STYP_TYPCHK

Gibt einen Typprüfungsabschnitt an. Ein Abschnitt dieses Typs enthält Parameter-/Argumenttypprüfzeichenfolgen, die vom Binder verwendet werden.

0x8000
STYP_OVRFLO
Hinweis: Eine XCOFF64 -Datei darf keinen Überlaufabschnittsheader enthalten.

Gibt einen Überlaufabschnitt für ein Verlagerungs-oder Zeilennummernfeld an Eine Abschnittsüberschrift dieses Typs enthält die Anzahl der Verlagerungseinträge und Zeilennummerneinträge für einen anderen Abschnitt. Diese Abschnittsüberschrift ist erforderlich, wenn einer der Zähler 65.534 überschreitet. Siehes_nrelocunds_nlnnoFelder in "Abschnitte und Abschnittsüberschriften" für weitere Informationen zu Überlaufüberschriften.

Abschnitte und Abschnittsüberschriften

Abschnittsüberschriften werden definiert, um eine Vielzahl von Informationen zum Inhalt einer XCOFF-Datei bereitzustellen. Programme, die XCOFF-Dateien verarbeiten, erkennen nur einige der gültigen Abschnitte.

Die folgenden Informationen enthalten weitere Informationen zu XCOFF-Dateiabschnitten:

Aktuelle Anwendungen verwenden nicht dies_nameum den Abschnittstyp zu bestimmen. Dennoch werden konventionelle Namen von Systemtools verwendet, wie in der folgenden Tabelle dargestellt.

Tabelle 4. Konventionelle Headernamen
Beschreibung Mehrere zulässig? s_flag (und seinen konventionellen Namen)
Textabschnitt Yes STYP_TEXT.text)
Datenabschnitt Yes STYP_DATA (.data)
BSS-Abschnitt Yes STYP_BSS (.bss)
Blockabschnitt Yes STYP_PAD (.pad)
Abschnitt für Ladeprogramm No STYP_LOADER (.loader)
Debugabschnitt No STYP_DEBUG (.debug)
Abschnitt "Typüberprüfung" Yes STYP_TYPCHK (.typchk)
Ausnahmeabschnitt No STYP_EXCEPT (.except)
Überlaufabschnitt Yes(eine pro.textoder.dataAbschnitt) STYP_OVRFLO (.ovrflo)
Kommentarabschnitt Yes STYP_INFO (.info)
Abschnitt "Tdata". Yes STYP_TDATA (.tdata)
Abschnitt TBSS Yes STYP_TBSS (.tbss)
DWARF, Abschnitt Yes STIL-DWARF
    SSUBTYPE_DWINFO (.dwinfo)
    SSUBTYPE_DWLINE (.dwline)
    SSUBTYPE_DWPBNMS (.dwpbnms)
    SSUBTYPE_DWBTYP (.dwpbtyp)
    SSUBTYPE_DWARNGE (.dwarnge)
    SSUBTYPE_DWABREV (.dwabrev)
    SSUBTYPE_DWSTR (.dwstr)
    SSUBTYPE_DWRNGES (.dwrnges)
    SSUBTYPE_DWLOC (.dwloc)
    SSUBTYPE_DWFRAME(.dwframe)
    SSUBTYPE_DWMAC (.dwmac)

Einige Felder einer Abschnittsüberschrift werden möglicherweise nicht immer verwendet oder haben eine besondere Verwendung. Dies betrifft die folgenden Felder:

Element Beschreibung
s_name Bei Eingabe vom Binder und Systemladeprogramm ignoriert. Bei der Ausgabe werden die konventionellen Namen (die in der Tabelle "Konventionelle Headernamen" angezeigt werden) verwendet.
s_scnptr Ignoriert für.bssAbschnitte.
s_relptr Anerkannt für.text ,.data ,.tdataund nur die Abschnitte STYP_DWARF .
s_lnnoptr Anerkannt für.textnur Abschnitt. Andernfalls muss der Wert 0 sein.
s_nreloc,s_nlnno Verarbeitet Überläufe von Verlagerungs-oder Zeilennummernfeldern in einer XCOFF32 -Datei. (XCOFF64 -Dateien enthalten möglicherweise keine Überlauf-Abschnittsüberschriften.) Wenn ein Abschnitt mehr als 65.534 Verlagerungseinträge oder Zeilennummerneinträge enthält, werden beide Felder auf den Wert65535. In diesem Fall eine Überlauf-Abschnittsüberschrift mit ders_flagsFeld, das STYP_OVRFLO entspricht, wird verwendet, um die Verlagerungs-und Zeilennummerninformationen zu enthalten. Die Felder im Header des Überlaufabschnitts sind wie folgt definiert:
s_nreloc
Gibt die Dateiabschnittsnummer der Abschnittskopfzeile an, die übergelaufen ist, d. h. die Abschnittskopfzeile, die einen Wert von65535in ders_nrelocunds_nlnnoFelder. Dieser Wert stellt einen Verweis auf die Kopfzeile des primären Abschnitts bereit. Dieses Feld muss denselben Wert wie das Felds_nlnnoerlaubt.
Hinweis: Im Header des primären Abschnitts gibt es keine Referenz, die den entsprechenden Header des Überlaufabschnitts angibt. Alle Abschnittsüberschriften müssen durchsucht werden, um eine Überlauf-Abschnittsüberschrift zu finden, die die richtige primäre Abschnittsüberschriftenreferenz in diesem Feld enthält.
s_nlnno
Gibt die Dateiabschnittsnummer der Abschnittsüberschrift an, die übergelaufen ist. Dieses Feld muss denselben Wert wie das Felds_nrelocerlaubt.
s_paddr
Gibt die Anzahl der tatsächlich erforderlichen Verlagerungseinträge an. Dieses Feld wird anstelle dess_nrelocFeld der Abschnittsüberschrift, die übergelaufen ist
s_vaddr
Gibt die Anzahl der tatsächlich erforderlichen Zeilennummerneinträge an. Dieses Feld wird anstelle dess_nlnnoFeld der Abschnittsüberschrift, die übergelaufen ist

Ders_sizeunds_scnptrFelder haben in einem Überlaufabschnittsheader den Wert 0. Ders_relptrunds_lnnoptrFelder müssen dieselben Werte wie in der entsprechenden Kopfzeile des primären Abschnitts haben.

Eine XCOFF-Datei bietet in den folgenden Abschnitten eine besondere Bedeutung:

  • Der.text,.dataund.bssAbschnitte und die optionalen.tdataund.tbssAbschnitte, definieren das Speicherabbild des Programms. Die Verlagerungsteile, die dem zugeordnet sind..textund.dataAbschnitte enthalten die vollständigen Informationen zur Binderverlagerung, damit sie für die Ersatzlinkbearbeitung verwendet werden können. Nur die.textist einem Zeilennummernteil zugeordnet. Die dem ausführbaren Code zugeordneten Teile werden von den Compilern und Assemblern erzeugt.
  • Der.padDer Abschnitt ist als ein mit Nullen ausgefüllter Abschnitt mit Rohdaten definiert, der verwendet wird, um einen nachfolgenden Abschnitt in der Datei an einer definierten Begrenzung, wie z. B. einer Dateiblockbegrenzung oder einer Systemseitenbegrenzung, auszurichten. Das Auffüllen ist in einer XCOFF-Datei ohne entsprechende Abschnittsüberschrift zulässig, sodass der Binder keine Auffüllabschnittsüberschriften generiert.
  • Der.loaderAbschnitt ist ein Abschnitt für Rohdaten, der die dynamischen Ladeprogramminformationen enthält. Dieser Abschnitt wird vom Binder generiert und verfügt über eine eigene eigenständige Symboltabelle und Verlagerungstabelle. Die XCOFF-Symboltabelle enthält keinen Verweis auf diesen Abschnitt.
  • Der.debugAbschnitt ist ein Abschnitt für Rohdaten, der so definiert ist, dass er die für den symbolischen Debugger erforderlichen Tabellen-(Symboltabelle) oder Wörterverzeichnisinformationen enthält.
  • Der.dwinfo,.dwline,.dwpbnms,.dwpbtyp,.dwarnge,.dwabrev,.dwstr,und.dwrngesAbschnitte sind Abschnitte mit Rohdaten, die so definiert sind, dass sie Symboltabellen-und Quellendateiinformationen für den symbolischen Debugger enthalten.
  • Der.typchksection ist ein Rohdatenabschnitt, der so definiert ist, dass er Parameter-und Argumenttypprüfzeichenfolgen enthält.
  • Der.exceptAbschnitt ist ein Rohdatenabschnitt, der so definiert ist, dass er die Ausnahmetabellen enthält, die verwendet werden, um die Ursachen für eine Ausnahmebedingung bei der Programmausführung zu identifizieren.
  • Der.infoKommentarabschnitt ist ein Rohdatenabschnitt, der so definiert ist, dass er Kommentare oder Daten enthält, die für spezielle Verarbeitungsdienstprogramme von Bedeutung sind.
  • Der.debug,.except,.infound.typchkAbschnitte werden von Compilern und Assembler erzeugt. Verweise auf diese Abschnitte oder auf Elemente in diesen Abschnitten stammen aus der XCOFF-Symboltabelle.

Weitere Informationen zu XCOFF-Dateiabschnitten finden Sie unter "Loader Section (loader.h)," "Debug Section," "Type-Check Section," "Exception Section," and "Comment Section."

Laderbereich ( loader.h )

Der Ladeprogrammabschnitt enthält Informationen, die das Systemladeprogramm benötigt, um ein ausführbares XCOFF-Objekt zu laden und zu verlagern. Der Ladeprogrammabschnitt wird vom Binder generiert. Der Ladeprogrammabschnitt hat einens_flagsAbschnittstypflag STYP_LOADER im XCOFF-Abschnittsheader. Nach Konvention.loaderDer Name des Ladeprogrammabschnitts. Die Daten in diesem Abschnitt werden nicht von Einträgen in der XCOFF-Symboltabelle referenziert.

Der Ladeprogrammabschnitt besteht aus den folgenden Teilen:

  • Headerfelder
  • Symboltabelle
  • Verlagerungstabelle
  • Dateien-ID-Zeichenfolgen importieren
  • Zeichenfolgentabelle für Symbolnamen

Die C-Sprachstruktur für den Ladeprogrammabschnitt finden Sie in der Datei loader.h .

Felddefinitionen für Ladeprogrammheader

In der folgenden Tabelle werden die Headerfelddefinitionen des Ladeprogrammabschnitts beschrieben.

Tabelle 5. Headerstruktur des Ladeprogrammabschnitts (definiert in loader.h)
Feldname und Beschreibung XCOFF32 XCOFF64
l_version
Versionsnummer des Ladeprogrammabschnitts
  • Versatz: 0
  • Länge: 4
  • Versatz: 0
  • Länge: 4
l_nsyms
Anzahl Symboltabelleneinträge
  • Versatz: 4
  • Länge: 4
  • Versatz: 4
  • Länge: 4
l_nreloc
Anzahl der Verlagerungstabelleneinträge
  • Versatz: 8
  • Länge: 4
  • Versatz: 8
  • Länge: 4
l_istlen
Länge der Zeichenfolgetabelle für die Importdatei-ID
  • Versatz: 12
  • Länge: 4
  • Versatz: 12
  • Länge: 4
l_nimpid
Anzahl der Importdatei-IDs
  • Versatz: 16
  • Länge: 4
  • Versatz: 16
  • Länge: 4
l_impoff+
Offset zum Start der Importdatei-IDs
  • Versatz: 20
  • Länge: 4
  • Versatz: 24
  • Länge: 8
l_stlen+
Länge der Zeichenfolgetabelle
  • Versatz: 24
  • Länge: 4
  • Versatz: 20
  • Länge: 4
l_stoff+
Offset zum Anfang der Zeichenfolgetabelle
  • Versatz: 28
  • Länge: 4
  • Versatz: 32
  • Länge: 8
l_symoff
Offset zum Anfang der Symboltabelle
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 40
  • Länge: 8
l_rldoff
Offset zu Beginn der Verlagerungseinträge
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 48
  • Länge: 8
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist.

Die folgenden Informationen definieren die Headerfelder des Ladeprogrammabschnitts:

Element Beschreibung
l_version Gibt die Versionsnummer des Ladeprogrammabschnitts an. Der Wert 1 wird für XCOFF32; und der Wert 1 oder 2 für XCOFF64unterstützt.
l_nsyms Gibt die Anzahl der Symboltabelleneinträge im Ladeprogrammabschnitt an. Dieser Wert ist die tatsächliche Anzahl der Symboltabelleneinträge im Ladeprogrammabschnitt und enthält nicht die fünf impliziten Einträge für die Symboleinträge .text, .data, .bss, .tdataund .tbss .
l_nreloc Gibt die Anzahl der Verlagerungstabelleneinträge im Ladeprogrammabschnitt an
l_istlen Gibt die Bytelänge der Zeichenfolgetabelle für die Importdatei-ID im Ladeprogrammabschnitt an.
l_nimpid Gibt die Anzahl der Importdatei-IDs in der Zeichenfolgetabelle für die Importdatei-ID an
l_impoff Gibt den Byteabstand vom Anfang des Ladeprogrammabschnitts zur ersten Importdatei-ID an.
l_stlen Gibt die Länge der Zeichenfolgetabelle für den Ladeprogrammabschnitt an.
l_stoff Gibt die relative Byteadresse vom Anfang des Ladeprogrammabschnitts zum ersten Eintrag in der Zeichenfolgetabelle an.
l_symoff Gibt die relative Byteadresse vom Anfang des Ladeprogrammabschnitts zum Anfang der Ladeprogrammsymboltabelle an (nur in XCOFF64 ). In XCOFF32folgt die Symboltabelle auf den Header des Ladeprogramms.
l_rldoff Gibt die relative Byteadresse vom Anfang des Ladeprogrammabschnitts zum Anfang der Verlagerungseinträge im Ladeprogrammabschnitt an (nur in XCOFF64 ). In XCOFF32folgen die Verlagerungseinträge unmittelbar nach der Symboltabelle des Ladeprogramms.

Felddefinitionen für Ladeprogrammsymboltabellen

Die Symboltabelle des Ladeprogrammabschnitts enthält die Symboltabelleneinträge, die das Systemladeprogramm für die Import-und Exportsymbolverarbeitung und die dynamische Verlagerungsverarbeitung benötigt.

Die Datei loader.h definiert die Symboltabellenfelder. Jeder Eintrag ist 24 Byte lang.

Es gibt fünf implizite externe Symbole, jeweils eines für die.text,.data,.bss,.tdataund.tbssAbschnitte. Diese Symbole werden von den Einträgen in der Umzugstabelle mit den Symboltabellen-Indexwerten 0, 1, 2, -1 bzw. -2 referenziert.

Tabelle 6: Symboltabelleneintragsstruktur des Ladeprogrammabschnitts
Feldname und Beschreibung XCOFF32 XCOFF64
l_name+
Symbolname oder Byteoffset in Zeichenfolgetabelle
  • Versatz: 0
  • Länge: 8
  • Versatz: Nicht zutreffend
  • Länge: N/A
l_zeroes+
Null gibt an, dass auf den Symbolnamen von l_offset verwiesen wird
  • Versatz: 0
  • Länge: 4
  • Versatz: Nicht zutreffend
  • Länge: N/A
l_offset+
Relative Byteadresse in Zeichenfolgetabelle des Symbolnamens
  • Versatz: 4
  • Länge: 4
  • Versatz: 8
  • Länge: 4
l_value+
Adressfeld
  • Versatz: 8
  • Länge: 4
  • Versatz: 0
  • Länge: 8
l_scnum
Abschnittsnummer mit Symbol
  • Versatz: 12
  • Länge: 2
  • Versatz: 12
  • Länge: 2
l_smtype
Symboltyp, Export, Importmarkierungen
  • Versatz: 14
  • Länge: 1
  • Versatz: 14
  • Länge: 1
l_smclas
Symbolspeicherklasse
  • Versatz: 15
  • Länge: 1
  • Versatz: 15
  • Länge: 1
l_ifile
ID der Importdatei; Ordinalzahl der Importdatei-IDs
  • Versatz: 16
  • Länge: 4
  • Versatz: 16
  • Länge: 4
l_parm
Parametertyp-Prüffeld
  • Offset:20
  • Länge: 4
  • Versatz: 20
  • Länge: 4
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist.

Die Symboltabellenfelder sind:

Element Beschreibung
l_name (NurXCOFF32 ) Gibt einen 8 Byte langen, mit Nullen aufgefüllte Symbolnamen an, wenn er maximal 8 Byte lang ist. Andernfalls wird das Feld wie die folgenden zwei 4-Byte-Ganzzahlen für den Zugriff auf den Symbolnamen behandelt:
l_zeroes
(NurXCOFF32 ) Der Wert 0 gibt an, dass der Symbolname in der Zeichenfolgetabelle des Ladeprogrammabschnitts enthalten ist. Dieses Feld überlagert das erste Wort desl_nameerlaubt. Einel_nameFeld mit den ersten 4 Byte (erstes Wort) gleich 0 wird verwendet, um anzugeben, dass die Namenszeichenfolge nicht in der Zeichenfolgetabelle enthalten ist, sondern in derl_nameerlaubt.
l_offset
(NurXCOFF32 ) Dieses Feld überlagert das zweite Wort desl_nameerlaubt. Der Wert dieses Felds ist die relative Byteadresse vom Anfang der Zeichenfolgetabelle des Ladeprogrammabschnitts zum ersten Byte des Symbolnamens (nicht zum Längenfeld).
l_offset (NurXCOFF64 ) Dieses Feld hat dieselbe Verwendung wie dasl_offsetFeld in XCOFF32.
l_value Gibt die virtuelle Adresse des Symbols an
l_scnum Gibt die Nummer des XCOFF-Abschnitts an, der das Symbol enthält. Wenn das Symbol nicht definiert oder importiert ist, ist die Abschnittsnummer 0. Andernfalls bezieht sich die Abschnittsnummer auf die.text,.dataoder.bssein. Abschnittsüberschriften werden beginnend mit 1 nummeriert.
l_smtype Gibt den Symboltyp, das Importflag, das Exportflag und das Eintragsflag an.

Die Bits 0-4 sind wie folgt definierte Markierungsbits:

Bit 0     0x80  Reserved.
Bit 1     0x40  Specifies an imported symbol.
Bit 2     0x20  Specifies an entry point descriptor symbol.
Bit 3     0x10  Specifies an exported symbol.
Bit 4     0x08  Specifies a weak symbol.
Bits 5-7  0x07 Symbol type--see below.

Die Bits 5-7 bilden ein 3-Bit-Symboltypfeld mit den folgenden Definitionen:

0
XTY_ER

Gibt eine externe Referenz an, die einen Symboltabelleneintrag für ein externes (globales) Symbol bereitstellt, das in einer anderen XCOFF-Objektdatei enthalten ist

1
XTY_SD

Gibt die Definition des csect-Abschnitts an, die die Definition der kleinsten initialisierten Einheit in einer XCOFF-Objektdatei bereitstellt.

2
XTY_LD@info:status

Gibt die Kennsatzdefinition an, die die Definition der globalen Eingangspunkte für initialisierte csects bereitstellt. Ein nicht initialisierter csect des Typs XTY_CM enthält möglicherweise keine Bezeichnungsdefinition.

3
XTY_CM

Gibt eine allgemeine (BSS nicht initialisierte Daten) csect-Definition an, die die Definition der kleinsten nicht initialisierten Einheit in einer XCOFF-Objektdatei bereitstellt.

4–7
Reserviert.
l_smclas
Gibt die Speicherzuordnungsklasse des Symbols an, wie in syms.h für diex_smclasFeld des csect-Hilfssymboltabelleneintrags. Werte haben das symbolische Format XMC_xx, wobei xx PR, RO, GL, XO, SV, SV64, SV3264, RW, TC, TD, DS, UA, BS, UC, TL oder UL ist. Weitere Informationen finden Sie unter "csect Auxiliary Entry for the C_EXT, C WEAKEXTund C_HIDEXT Symbols" .
l_ifile
Gibt die Zeichenfolge für die Importdatei-ID an Diese ganze Zahl ist der Ordinalwert für die Position der Zeichenfolge für die Importdatei-ID in der Zeichenfolgetabelle für die Importdatei-ID des Ladeprogrammabschnitts. Bei einem importierten Symbol gibt der Wert 0 in diesem Feld das Symbol als verzögerten Import in das Systemladeprogramm an. Ein verzögerter Import ist ein Symbol, dessen Adresse nach der Verarbeitung des Ladeprogramms unaufgelöst bleiben kann. Wenn das Symbol nicht importiert wurde, muss dieses Feld den Wert 0 enthalten.
l_parm
Gibt den Offset zur Parametertypprüfzeichenfolge an. Die relative Byteadresse bezieht sich auf den Anfang der Zeichenfolgetabelle des Ladeprogrammabschnitts. Die Byteadresse verweist auf das erste Byte der Parametertypprüfzeichenfolge (nicht auf das zugehörige Längenfeld). Weitere Informationen zur Zeichenfolge für die Parametertypprüfung finden Sie im Abschnitt Typüberprüfung . Der Wert 0 in derl_parmDieses Feld gibt an, dass die Zeichenfolge für die Überprüfung des Parametertyps für dieses Symbol nicht vorhanden ist und dass das Symbol als Symbol mit einem universellen Hashwert behandelt wird.

Felddefinitionen der Verlagerungstabelle für Ladeprogramm

Die Loader Section Relocation Table Structure enthält alle Verlagerungsinformationen, die das Systemladeprogramm benötigt, um eine ausführbare XCOFF-Datei ordnungsgemäß zu verlagern, wenn sie geladen wird. Die Datei loader.h definiert die Felder der Verlagerungstabelle. Jeder Eintrag in der Verlagerungstabelle für den Ladeprogrammabschnitt ist 12 Byte lang in XCOFF32und 16 Byte lang in XCOFF64. Die Felder l_vaddr, l_symndxundl_rtype haben dieselbe Bedeutung wie die entsprechenden Felder der regulären Verlagerungseinträge, die in der Datei reloc.h definiert sind. Weitere Informationen zu Verlagerungseinträgen finden Sie unter Verlagerungsinformationen für XCOFF-Datei (reloc.h).

Tabelle 7: Struktur des Tabelleneintrags für die Verlagerung des Ladeprogrammabschnitts
Feldname und Beschreibung XCOFF32 XCOFF64
l_vaddr+
Adressfeld
  • Versatz: 0
  • Länge: 4
  • Versatz: 0
  • Länge: 8
l_symndx+
Symboltabellenindex des Ladeprogrammabschnitts des referenzierten Elements
  • Versatz: 4
  • Länge: 4
  • Versatz: 12
  • Länge: 4
l_rtype
Verlagerungstyp
  • Versatz: 4
  • Länge: 4
  • Versatz: 8
  • Länge: 4
l_value+
Adressfeld
  • Versatz: 8
  • Länge: 2
  • Versatz: 8
  • Länge: 2
l_rsecnm
Nummer des Dateiabschnitts, der verlagert wird
  • Versatz: 10
  • Länge: 2
  • Versatz: 10
  • Länge: 2
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist.

Die Datei loader.h definiert die folgenden Felder:

Ihren Namen Beschreibung
l_vaddr Gibt die virtuelle Adresse der verschiebbaren Referenz an.
l_symndx Gibt den Index der Symboltabelle des Ladeprogrammabschnitts (n-ter Eintrag) des Symbols an, das referenziert wird. Die Werte 0, 1 und 2 sind implizite Verweise auf.text,.dataund.bssAbschnitte. Symbolindex 3 ist der Index für das erste Symbol, das tatsächlich in der Symboltabelle des Ladeprogrammabschnitts enthalten ist.
Hinweis: Ein Verweis auf ein exportiertes Symbol kann über die Abschnittsnummer des Symbols (Symbolnummer 0, 1 oder 2) oder über die tatsächliche Nummer des exportierten Symbols erfolgen.
l_rtype Gibt die Größe und den Typ der Verlagerung an. (Dieses Feld hat dieselbe Interpretation wie dasr_typein der Datei reloc.h .) Weitere Informationen zu Verlagerungseinträgen finden Sie unter Verlagerungsinformationen für XCOFF-Datei (reloc.h).
l_rsecnm Gibt die Abschnittsnummer der Abschnitte an, die verlagert werden. Dies ist ein einbasierter Index in den Abschnittsüberschriften.

Loader Import Datei ID Name Tabelle Definition

Die Zeichenfolgen für die ID der Importdatei im Ladeprogrammabschnitt eines Moduls enthalten eine Liste abhängiger Module, die das Systemladeprogramm laden muss, damit das Modul erfolgreich geladen werden kann. Diese Liste enthält jedoch nicht die Namen der Module, von denen die benannten Module abhängen.

Tabelle 8. Importdatei-IDs für Ladeprogrammabschnitt-Enthält Zeichenfolgen variabler Länge
Aufrechnung Länge in Byte Name und Beschreibung
0 n 1 l_impidpfad

Pfadzeichenfolge für Importdatei-ID, mit Nullbegrenzern

n 1 + 1 n 2 l_impidbase

Basiszeichenfolge für Importdatei-ID, mit Nullbegrenzern

n 1 + n 2 + 2 n 3 l_impidmem

Importdatei-ID-Memberzeichenfolge, mit Nullbegrenzern

    Felder wiederholen sich für jede Zeichenfolge.

Jeder Name einer Importdatei-ID besteht aus drei durch null begrenzten Zeichenfolgen.

Die erste Importdatei-ID ist ein Standardwert für LIBPATH , der vom Systemladeprogramm verwendet werden soll. Die LIBPATH -Informationen bestehen aus durch Doppelpunkte getrennten Dateipfaden. Es gibt keinen Basis-oder Archiveleintragungsnamen, daher folgen auf den Dateipfad drei Nullbytes.

Jeder Eintrag in der Tabelle mit den Namen der Importdatei-IDs besteht aus:

  • Pfadname der Importdatei-ID
  • Nullbegrenzer (ASCII-Nullzeichen)
  • Basisname der Importdatei-ID
  • Nullbegrenzer
  • Name des Archivdateimembers für die Importdatei-ID
  • Nullbegrenzer

Beispiel:

/usr/lib\0mylib.a\0shr.o\0

Zeichenfolgetabellendefinition für Ladeprogramm

Die Zeichenfolgetabelle des Ladeprogrammabschnitts enthält die Zeichenfolgen für die Parametertypprüfung, alle Symbolnamen für eine XCOFF64 -Datei und die Namen von Symbolen, die länger als 8 Byte sind, für eine XCOFF32 -Datei. Jede Zeichenfolge besteht aus einem 2-Byte-Längenfeld gefolgt von der Zeichenfolge.

Tabelle 9. Zeichenfolgetabelle für Ladeprogrammabschnitt
Aufrechnung Länge in Byte Beschreibung
0 2 Länge der Zeichenfolge.
2 n Symbolnamenszeichenfolge (nullbegrenzt) oder Parametertypzeichenfolge (nicht nullbegrenzt).
    Felder wiederholen sich für jede Zeichenfolge.

Symbolnamen enden auf null. Der Wert im Längenfeld enthält die Länge der Zeichenfolge plus die Länge des Nullabschlusszeichens, aber nicht die Länge des Längenfelds selbst.

Die Zeichenfolgen für die Parametertypüberprüfung enthalten Binärwerte und sind nicht auf null endend. Der Wert im Längenfeld enthält nur die Länge der Zeichenfolge, aber nicht die Länge des Längenfelds selbst.

Die Symboltabelleneinträge des Ladeprogrammabschnitts enthalten einen Byteoffsetwert, der auf das erste Byte der Zeichenfolge und nicht auf das Längenfeld verweist.

Inhalt der Abschnittsüberschrift für Ladeprogramm

Der Inhalt der Abschnittsheaderfelder für den Ladeprogrammabschnitt lautet wie folgt:

Ihren Namen Inhalt
s_name .loader
s_paddr 0
s_vaddr 0
s_size Die Größe des Ladeprogrammabschnitts (in Byte).
s_scnptr Offset vom Anfang der XCOFF-Datei zum ersten Byte der Daten des Ladeprogrammabschnitts
s_relptr 0
s_lnnoptr 0
s_nreloc 0
s_nlnno 0
s_flags STYP_LOADER

Allgemeine Informationen zum XCOFF-Dateiformat finden Sie unter "XCOFF-Objektdateiformat" .

Weitere Informationen zu XCOFF-Dateiabschnitten finden Sie unter "Abschnitte und Abschnittsüberschriften", "Abschnitt" Debug ", " Abschnitt "Typüberprüfung", " " Abschnitt "Ausnahme" und "Abschnitt" Kommentar ".

Debugabschnitt

Der Debugabschnitt enthält den symbolischen Debugger stabstrings (Symboltabellenzeichenfolgen). Sie wird von den Compilern und Assemblern generiert. Es stellt Symbolattributinformationen für die Verwendung durch den symbolischen Debugger bereit. Der Debugabschnitt hat das Abschnittstypflag STYP_DEBUG im XCOFF-Abschnittsheader. Nach Konvention.debugDer Name des Debugabschnitts. Die Daten in diesem Abschnitt werden von Einträgen in der XCOFF-Symboltabelle referenziert. Eine stabstring ist eine auf null endende Zeichenfolge. Jeder Zeichenfolge wird ein 2-Byte-Längenfeld in XCOFF32 oder ein 4-Byte-Längenfeld in XCOFF64vorangestellt.

Felddefinitionen

Die folgenden beiden Felder werden für jede symbolische Debuggerzeichenfolge wiederholt:

  • Ein Feld mit einer Länge von 2 Byte (XCOFF32) oder 4 Byte (XCOFF64), das die Länge der Zeichenfolge enthält. Der Wert im Längenfeld enthält die Länge des abschließenden Nullzeichens, aber nicht die Länge des Längenfelds selbst.
  • Die symbolische Debuggerzeichenfolge.

Informationen zum spezifischen Format der stabstrings finden Sie in den Erläuterungen zur Grammatik des symbolischen Debuggers stabstring .

Inhalt der Kopfzeile des Debugabschnitts

Der Inhalt der Abschnittsheaderfelder für den Debugabschnitt lautet wie folgt:

Ihren Namen Inhalt
s_name .debug
s_paddr 0
s_vaddr 0
s_size Die Größe des Debugabschnitts (in Byte).
s_scnptr Offset vom Anfang der XCOFF-Datei zum ersten Byte der Debugabschnittsdaten
s_relptr 0
s_lnnoptr 0
s_nreloc 0
s_nlnno 0
s_flags STIL-DEBUG

Allgemeine Informationen zum XCOFF -Dateiformat finden Sie unter "XCOFF Object File Format" .

Weitere Informationen zu XCOFF -Dateiabschnitten finden Sie unter "Abschnitte und Abschnittsüberschriften", "Debugabschnitt", "Typüberprüfungsabschnitt",, "Ausnahmeabschnitt" und "Kommentarabschnitt" .

DWARF-Abschnitte

Die DWARF-Abschnitte enthalten Debuginformationen für den symbolischen Debugger. DWARF ist ein alternatives Debugformat, das anstelle von Debuggerstabstrings verwendet wird. Der Inhalt der verschiedenen DWARF-Abschnitte wird im "DWARF Debugging Information Format" beschrieben, das von www.dwarfstd.orgabgerufen werden kann.

Alle DWARF-Abschnitte haben das primäre Abschnittstypflag STYP_DWARF in der XCOFF-Abschnittsüberschrift. Die Namen konventioneller Abschnitte sind unter "Konventionelle Headernamen"aufgeführt.

Inhalt der Abschnittsüberschrift für DWARF

Der Inhalt der Abschnittsheaderfelder für den Debugabschnitt lautet wie folgt:

Ihren Namen Inhalt
s_name Abhängig von s_flags
s_paddr 0
s_vaddr 0
s_size Die Größe des Abschnitts in Byte.
s_scnptr Offset vom Anfang der XCOFF-Datei bis zum ersten Byte der Abschnittsdaten.
s_relptr Offset vom Anfang der XCOFF-Datei zu den Verlagerungseinträgen für den Abschnitt.
s_lnnoptr 0
s_nreloc Die Anzahl der Verlagerungseinträge.
s_nlnno 0
s_flags STYP_DWARF mit einem DWARF-Subtypwert.

Abschnitt "Typüberprüfung"

Der Abschnitt 'type-check' enthält die Hashzeichenfolgen für die Typüberprüfung und wird von Compilern und Assemblern erzeugt. Sie wird vom Binder verwendet, um Variablenabweichungen und Argumentschnittstellenfehler zu erkennen, wenn separat kompilierte Objektdateien verknüpft werden. (Die Hashzeichenfolgen für die Typüberprüfung im Ladeprogrammabschnitt werden verwendet, um diese Fehler vor der Ausführung eines Programms zu erkennen.) Der Abschnitt "type-check" hat das Abschnittstypflag STYP_TYPCHK in der Abschnittsüberschrift XCOFF . Nach Konvention.typchkDer Name des Typprüfungsabschnitts. Die Zeichenfolgen in diesem Abschnitt werden von Einträgen in der Symboltabelle XCOFF referenziert.

Felddefinitionen

Die folgenden beiden Felder werden für jede Parametertypprüfzeichenfolge wiederholt:

  • Ein 2-Byte-Längenfeld, das die Länge der Typprüfzeichenfolge enthält. Der im Längenfeld enthaltene Wert enthält nicht die Länge des Längenfelds selbst.
  • Die Hashzeichenfolge für die Parametertypprüfung.

Typcodierung und -prüfung für Datenformat

Die Hashzeichenfolgen für die Typüberprüfung werden verwendet, um Fehler vor der Ausführung eines Programms zu erkennen. Informationen zu allen externen Symbolen (Daten und Funktionen) werden von den Compilern codiert und anschließend zur Bindezeit und Ladezeit auf Konsistenz überprüft. Die Zeichenfolgen für die Typüberprüfung sind so konzipiert, dass sie die maximale Überprüfung, die für die Semantik jeder einzelnen unterstützten Sprache erforderlich ist, erzwingen und Anwendungen schützen, die in mehreren Sprachen geschrieben sind.

Der Typcodierungs-und Prüfmechanismus verfügt über eine vierteilige Hashcodierung, die eine gewisse Flexibilität bei der Prüfung bietet. Der Mechanismus verwendet auch einen eindeutigen Wert, UNIVERSAL, der einem beliebigen Code entspricht. Der UNIVERSAL-Hashwert kann als Escapemechanismus für Assemblierprogramme oder für Programme verwendet werden, in denen Typinformationen oder Subroutinenschnittstellen möglicherweise nicht bekannt sind. Der UNIVERSAL-Hash besteht aus vier leeren ASCII-Zeichen (0x20202020) oder vier Nullzeichen (0x00000000).

Die folgenden Felder sind dem Typcodierungs-und Prüfmechanismus zugeordnet:

Element Beschreibung
Codelänge Ein 2-Byte-Feld mit der Länge des Hashwerts. Dieses Feld hat den Wert 10.
Sprachenkennung Ein 2-Byte-Code, der jede Sprache darstellt. Diese Codes sind mit denen identisch, die für diee_langFeld in den Informationen zum "Ausnahmeabschnitt" .
Allgemeiner Hashwert Ein 4-Byte-Feld, das die allgemeinste Form darstellt, mit der ein Datensymbol oder eine Funktion beschrieben werden kann. Dieses Formular wird am häufigsten in Sprachen verwendet, die von unterstützt werden. Wenn die Informationen unvollständig oder nicht verfügbar sind, sollte ein universeller Hashwert generiert werden. Der allgemeine Hashwert ist sprachunabhängig und muss übereinstimmen, damit die Bindung erfolgreich ist.
Hashwert für Sprache Ein 4-Byte-Feld, das eine detailliertere, sprachspezifische Darstellung dessen enthält, was im allgemeinen Hashwert enthalten ist. Sie ermöglicht die strengste Typüberprüfung, die für eine bestimmte Sprache erforderlich ist. Dieser Teil wird in der spracheninternen Bindung verwendet und nur dann geprüft, wenn beide Symbole dieselbe Sprachenkennung haben.

Inhalt der Abschnittsüberschrift

Der Inhalt der Abschnittsheaderfelder für den Typprüfungsabschnitt lautet wie folgt:

Ihren Namen Inhalt
s_name .typchk
s_paddr 0
s_vaddr 0
s_size Die Größe (in Byte) des Typprüfungsabschnitts.
s_scnptr Relative Position vom Anfang der XCOFF -Datei zum ersten Byte der Typüberprüfungsabschnittsdaten
s_relptr 0
s_lnnoptr 0
s_nreloc 0
s_nlnno 0
s_flags STYP_TYPCHK.

Allgemeine Informationen zum XCOFF -Dateiformat finden Sie unter "XCOFF Object File Format" .

Weitere Informationen zu XCOFF -Dateiabschnitten finden Sie unter "Abschnitte und Abschnittsüberschriften", "Abschnitt für Debugging", "Abschnitt für Typüberprüfung", "Abschnitt für Ausnahmen" und "Abschnitt für Kommentare" .

Ausnahmeabschnitt

Der Ausnahmeabschnitt enthält Adressen von Trapinstruktionen, Quellensprachenkennungscodes und Trapursachencodes. Dieser Abschnitt wird von Compilern und Assemblern erstellt und während oder nach der Laufzeit verwendet, um die Ursache für das Auftreten eines bestimmten Traps oder einer Ausnahmebedingung zu ermitteln. Der Ausnahmeabschnitt hat das Abschnittstypflag STYP_EXCEPT im XCOFF-Abschnittsheader. Nach Konvention.exceptist der Name des Ausnahmeabschnitts. Daten im Ausnahmeabschnitt werden von Einträgen in der XCOFF-Symboltabelle referenziert.

Ein Ausnahmetabelleneintrag mit dem Wert 0 in dere_reasonFeld enthält den Symboltabellenindex für den Symboltabelleneintrag C_EXT, C_WEAKEXT oder C_HIDEXT einer Funktion. Der Verweis von der Symboltabelle auf einen Eintrag in der Ausnahmetabelle erfolgt über den Eintrag der Zusatzsymboltabelle der Funktion. Weitere Informationen zu diesem Eintrag finden Sie unter "csect Auxiliary Entry for C_EXT, C_WEAKEXT and C_HIDEXT Symbols".

Die C-Sprachstruktur für die Ausnahmeabschnitteinträge finden Sie in der Datei exceptab.h .

Die Einträge im Ausnahmeabschnitt enthalten die Felder, die in den folgenden Tabellen aufgeführt sind.

Tabelle 10. Anfangseintrag: Struktur des Ausnahmebedingungsabschnitts
Feldname und Beschreibung XCOFF32 XCOFF64
e_addr.e_symndx+
Symboltabellenindex für Funktion
  • Versatz: 0
  • Länge: 4
  • Versatz: 0
  • Länge: 4
e_lang+
Code für Compilersprachen-ID
  • Versatz: 4
  • Länge: 1
  • Versatz: 8
  • Länge: 1
e_reason+
Wert 0 (Ursachencode für Ausnahmebedingung 0)
  • Versatz: 5
  • Länge: 1
  • Versatz: 9
  • Länge: 1
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist. Mite_addr.e_symndx, wird das Suffix hinzugefügt zue_addr(d. h.e_addr32.e_symndx).
Tabelle 11. Nachfolgender Eintrag: Struktur des Ausnahmebedingungsabschnitts
Feldname und Beschreibung XCOFF32 XCOFF64
e_addr.e_paddr+
Adresse der Trapinstruktion
  • Versatz: 0
  • Länge: 4
  • Versatz: 0
  • Länge: 8
e_lang+
Code für Compilersprachen-ID
  • Versatz: 4
  • Länge: 1
  • Versatz: 8
  • Länge: 1
e_reason+
Ursachencode für Trapausnahme
  • Versatz: 5
  • Länge: 1
  • Versatz: 9
  • Länge: 1
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist. Mite_addr.e_paddr, wird das Suffix hinzugefügt zue_addr(d. h.e_addr32.e_paddr).

Felddefinitionen

Im Folgenden werden die Felder definiert, die im Ausnahmeabschnitt aufgelistet sind:

Element Beschreibung
e_symndx Enthält eine ganze Zahl (überlagert diee_paddrFeld). Wenn diee_reasonFeld ist 0, dieses Feld ist der Symboltabellenindex der Funktion.
e_paddr Enthält eine virtuelle Adresse (überlagert diee_symndxFeld). Wenn diee_reasonFeld ungleich null ist, ist dieses Feld die virtuelle Adresse der Trap-Instruktion.
e_lang Gibt die Quellensprache an. Die folgende Liste definiert die möglichen Werte dere_langerlaubt.
ID
Language
0x00
C
0x01
FORTRAN
0x02
Pascal
0x03
Ada
0x04
PL/I
0x05
BASIC
0x06
Lisp
0x07
COBOL
0x08
Modula2
0x09
C++
0x0A
RPG
0x0B
PL8, PLIX
0x0C
Baugruppe
0x0D-0xFF
Reserviert
e_reason Gibt einen 8-Bit-Ursachencode für eine compilerabhängige Trapausnahmebedingung an. Null ist kein gültiger Ursachencode für eine Trapausnahmebedingung, da er den Anfang von Ausnahmetabelleneinträgen für eine neue Funktion angibt.

Inhalt der Abschnittsüberschrift

Die folgenden Felder sind der Inhalt der Abschnittsheaderfelder für den Ausnahmeabschnitt.

Ihren Namen Inhalt
s_name .außer
s_paddr 0
s_vaddr 0
s_size Die Größe des Ausnahmebedingungsabschnitts in Byte.
s_scnptr Relative Adresse vom Anfang der XCOFF -Datei bis zum ersten Byte der Ausnahmebedingungsabschnittsdaten
s_relptr 0
s_lnnoptr 0
s_nreloc 0
s_nlnno 0
s_flags STIL-EXCEPT

Allgemeine Informationen zum XCOFF -Dateiformat finden Sie unter "XCOFF Object File Format" .

Weitere Informationen zu XCOFF -Dateiabschnitten finden Sie unter "Abschnitte und Abschnittsüberschriften", "Abschnitt für Debugging", "Abschnitt für Typüberprüfung", "Abschnitt für Ausnahmen" und "Abschnitt für Kommentare" .

Kommentarabschnitt

Der Kommentarabschnitt enthält Informationen mit besonderer Verarbeitungsbedeutung für eine Anwendung. Dieser Abschnitt kann von Compilern und Assemblern erstellt und während oder nach der Laufzeit verwendet werden, um einen besonderen Verarbeitungsbedarf einer Anwendung zu erfüllen. Der Kommentarabschnitt hat das Abschnittstypflag STYP_INFO in der Abschnittsüberschrift XCOFF . Nach Konvention.infoist der Name des Kommentarabschnitts. Daten im Kommentarabschnitt werden aus C_INFO -Einträgen in der Symboltabelle XCOFF referenziert.

Der Inhalt eines Kommentarabschnitts besteht aus wiederholten Instanzen eines 4-Byte-lengthgefolgt von einer Bytefolge (die einen beliebigen Binärwert enthält). Die Länge der einzelnen Zeichenfolgen wird in den vorhergehenden 4 Byte gespeichert.lengtherlaubt. Die Bytefolge muss nicht durch ein Nullzeichen oder ein anderes Sonderzeichen beendet werden. Die angegebene Länge enthält nicht die Länge derlengthFeld selbst. Die Länge 0 ist zulässig. Das Format der Bytefolge ist nicht angegeben.

Auf eine Kommentarabschnittszeichenfolge wird von einem Eintrag in der Symboltabelle XCOFF verwiesen. Die Speicherklasse des Symbols, das einen Verweis erstellt, ist C_INFO. Weitere Informationen finden Sie unter "Symboltabellenfeldinhalte nach Speicherklasse" .

Ein Symbol C_INFO ist dem nächsten vorangestellten Symbol C_FILE, C_EXT, C_WEAKEXToder C_HIDEXT zugeordnet.

Inhalt der Abschnittsüberschrift

Die folgenden Felder sind der Inhalt der Abschnittsüberschriftenfelder für den Kommentarabschnitt.

Ihren Namen Inhalt
s_name .info (.info)
s_paddr 0
s_vaddr 0
s_size Die Größe (in Byte) des Kommentarabschnitts
s_scnptr Offset vom Anfang der Datei XCOFF zum ersten Byte der Kommentarabschnittsdaten
s_relptr 0
s_lnnoptr 0
s_nreloc 0
s_nlnno 0
s_flags STIL-INFO

Allgemeine Informationen zum XCOFF -Dateiformat finden Sie unter "XCOFF Object File Format" .

Weitere Informationen zu XCOFF-Dateiabschnitten finden Sie unter "Abschnitte und Abschnittsüberschriften", "Abschnitt" Debug ", " Abschnitt "Typüberprüfung", " " Abschnitt "Ausnahme" und "Abschnitt" Kommentar ".

Verlagerungsinformationen für XCOFF-Datei (reloc.h)

Einige Abschnitte enthalten Informationen zur Verlagerung. Ders_relptrFeld in der Abschnittsüberschrift gibt den Dateioffset zu den Verlagerungseinträgen für den Abschnitt an. Der Binder verwendet die Verlagerungsinformationen zum Ändern von Adresskonstanten und anderen verschiebbaren Werten, wenn einzelne XCOFF-Objektdateien verknüpft werden, um eine ausführbare XCOFF-Datei zu erstellen.

Compiler und Assembler generieren die Verlagerungseinträge für die Informationen für Abschnitte. Der Binder generiert Verlagerungsinformationen, die in der.loaderAbschnitt, wie vom Systemladeprogramm benötigt.

Jeder Verlagerungseintrag ist 10 Byte lang (14 für XCOFF64). (Ein Verlagerungseintrag in der.loaderDer Abschnitt ist 12 Byte lang (16 für XCOFF64) und wird in der Beschreibung des Ladeprogrammabschnitts in diesem Dokument erläutert. Weitere Informationen finden Sie unter Felddefinitionen für Verlagerungstabelle . Sie finden die Struktur der Programmiersprache C für einen Verlagerungseintrag in der Datei reloc.h . Ein Verlagerungseintrag enthält die in der folgenden Tabelle aufgeführten Felder.

Tabelle 12. Struktur des Verlagerungseintrags
Feldname und Beschreibung XCOFF32 XCOFF64
r_vaddr+
Virtuelle Adresse (Position) im zu verlagernden Abschnitt
  • Versatz: 0
  • Länge: 4
  • Versatz: 0
  • Länge: 8
r_symndx+
Symboltabellenindex des Elements, auf das verwiesen wird
  • Versatz: 4
  • Länge: 4
  • Versatz: 8
  • Länge: 4
r_rsize+
Verlagerungsgröße und -informationen
  • Versatz: 8
  • Länge: 1
  • Versatz: 12
  • Länge: 1
r_rtype+
Verlagerungstyp
  • Versatz: 9
  • Länge: 1
  • Versatz: 13
  • Länge: 1
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist.

Die Verlagerungseinträge für einen Abschnitt müssen in aufsteigender Adressreihenfolge angegeben werden.

(Der Ladeprogrammabschnitt enthält eine einzelne Gruppe von Verlagerungseinträgen, die vom Systemladeprogramm verwendet werden. Daher ist in jedem Verlagerungseintrag eine Abschnittsnummer erforderlich, um den Abschnitt zu identifizieren, der geändert werden muss.)

Felddefinitionen

Im Folgenden werden die Felder für Verlagerungsinformationen definiert:
Element Beschreibung
r_vaddr Gibt die virtuelle Adresse des Werts an, der vom Binder geändert werden muss. Der Byteoffsetwert für die Daten, die am Anfang des Abschnitts, der die Daten enthält, geändert werden müssen, kann wie folgt berechnet werden:

offset_in_section = r_vaddr - s_paddr

r_symndx Gibt einen Index mit der Basis null in der Symboltabelle XCOFF an, um das referenzierte Symbol zu lokalisieren. Der Symboltabelleneintrag enthält eine Adresse, die verwendet wird, um einen Änderungswert zu berechnen, der auf dier_vaddrVerlagerungsadresse.
r_rsize Gibt die Verlagerungsgröße und das Vorzeichen an. Ihre Inhalte sind in der folgenden Liste aufgeführt:
0x80 (1 Bit)
Gibt an, ob die Verlagerungsreferenz signiert (1) oder nicht signiert (0) ist.
0x40 (1 Bit)
Wenn dieses Feld eins ist, gibt es an, dass der Binder die ursprüngliche Anweisung durch eine geänderte Anweisung ersetzt hat.
0x3F(6 Bit)
Gibt die Bitlänge der verschiebbaren Referenz minus eins an. Die aktuelle Architektur ermöglicht die Versetzung von Feldern mit bis zu 32 Bit (XCOFF32) oder 64 Bit (XCOFF64).
r_rtype Gibt ein 8-Bit-Verlagerungsfeld an, das dem Binder anzeigt, welcher Verlagerungsalgorithmus für die Berechnung des Änderungswerts verwendet werden soll. Dieser Wert wird an der verlagerbaren Referenzposition angewendet, die durch dier_vaddrerlaubt. Die folgenden Verlagerungstypen sind definiert:
0x00
R_POS

Gibt eine positive Verlagerung an. Gibt die Adresse des Symbols an, das durch dier_symndxerlaubt.

0x01
R_NEG

Gibt eine negative Verlagerung an. Gibt den negativen Wert der Adresse des Symbols an, das durch dier_symndxerlaubt.

0x02
R_REL (REL)

Gibt die relative Selbstverlagerung an. Gibt einen Verschiebungswert zwischen der Adresse des Symbols an, das durch dier_symndxFeld und die Adresse des zu ändernden csect.

0x03
R_Inhaltsverzeichnis

Gibt eine Verlagerung relativ zum Inhaltsverzeichnis an. Stellt einen Verschiebungswert bereit, der die Differenz zwischen dem Adresswert im Symbol, das durch das Feld r_symndx angegeben wird, und der Adresse des TOC-Anker-csect darstellt. Der TOC-Anker csect ist ein Symbol mit einer Speicherzuordnungsklasse, die als XMC_TC0 definiert ist und eine Länge von 0 hat. Pro XCOFF-Abschnitt ist höchstens ein TOC-Anker-csect zulässig.

Ein Linkeditor ist berechtigt, die Anweisung zu transformieren, auf die das Feld r_vaddr verweist. Das im Feld r_symndxangegebene Symbol ist ein TOC-Symbol, wenn seine Speicherzuordnungsklasse XMC_TC ist, und das TOC-Symbol enthält die Adresse eines anderen Symbols, das sich innerhalb von 32.768 Bit des TOC-Ankers oder der threadlokalen Speicherbasis befindet. Wenn es sich bei der referenzierten Anweisung um eine Ladeanweisung handelt und das im Feld r_symndx angegebene Symbol ein TOC-Symbol ist, kann die Ladeanweisung daher in eine Anweisung zum sofortigen Hinzufügen konvertiert werden. Diese Transformation eliminiert einen Speicherverweis während der Ausführung. Wenn die Anweisung umgesetzt wird, wird der Verlagerungstyp R_TOC durch einen Verlagerungstyp R_TRLA ersetzt, wenn die Ausgabedatei geschrieben wird. Dies ermöglicht eine Umkehrtransformation, wenn das Objekt erneut verknüpft wird.

0x12
R_TRL

Gibt eine Verlagerung relativ zum Inhaltsverzeichnis an. Dieser Verlagerungseintrag wird wie ein R_TOC-Verlagerungseintrag behandelt, mit der Ausnahme, dass Linkeditoren die Anweisung nicht von einer Anweisung zum Laden in eine Anweisung zum sofortigen Hinzufügen konvertieren dürfen.

0x13
R_TRLA

Gibt eine Verlagerung an, die entweder relativ zum Inhaltsverzeichnis oder relativ zur threadlokalen Speicherbasis ist. Die im Feld r_vaddr angegebene Anweisung ist eine Anweisung zum sofortigen Hinzufügen und das im Feld r_symndx angegebene Symbol muss ein TOC-Symbol sein, was bedeutet, dass die zugehörige Speicherzuordnungsklasse XMC_TC ist. Diese Anweisung wird zuvor von einem Linkeditor aus einer Ladeanweisung in eine Anweisung zum Hinzufügen sofort umgesetzt. Der Linkeditor wandelt die Anweisung zurück in eine Ladeanweisung und ändert den Verlagerungstyp von R_TRLA in R_TOC. Die Anweisung kann wie für den Eintrag R_TOC relocation beschrieben erneut umgesetzt werden.

Compiler dürfen diesen Verlagerungstyp nicht generieren.

r_rtypedauerhafter
0x05
R_GL

Gibt Global Linkage-External TOC address relocation an. Gibt die Adresse des Inhaltsverzeichnisses an, das einem definierten externen Symbol zugeordnet ist Das externe Symbol mit der erforderlichen TOC-Adresse wird durch dier_symndxFeld des Verlagerungseintrags. Dieser Verlagerungseintrag bietet eine Methode für den Zugriff auf die Adresse des Inhaltsverzeichnisses, das in derselben ausführbaren Datei enthalten ist,r_symndxExternes Symbol ist definiert.

0x06
R_TCL

Gibt die Verschiebung der Inhaltsverzeichnisadresse des lokalen Objekts an. Gibt die Adresse des Inhaltsverzeichnisses an, das einem definierten externen Symbol zugeordnet ist Das externe Symbol, für das die TOC-Adresse erforderlich ist, wird von derr_symndxFeld des Verlagerungseintrags. Das externe Symbol wird lokal in der resultierenden ausführbaren Datei definiert. Dieser Verlagerungseintrag bietet eine Methode für den Zugriff auf die Adresse des Inhaltsverzeichnisses, das in derselben ausführbaren Datei enthalten ist,r_symndxExternes Symbol ist definiert.

0x0C
R_RL

Wird wie der Verlagerungstyp R_POS behandelt.

0x0D
R_RLA (R)

Wird wie der Verlagerungstyp R_POS behandelt.

0x0F
R_REF

Gibt einen Verweis ohne Verlagerung an, um die Garbage-Collection (durch den Binder) eines Symbols zu verhindern. Dieser Verlagerungstyp dient dazu, Compilern und Assemblern eine Methode zur Verfügung zu stellen, mit der angegeben werden kann, dass ein bestimmter csect von einem anderen csect abhängig ist, ohne dass Speicherplatz im tatsächlichen csect verwendet wird. Der Grund für die Erstellung der Abhängigkeitsreferenz besteht darin, zu verhindern, dass der Binder einen csect, für den ein anderer csect eine implizite Abhängigkeit hat, Garbage-Collection (Eliminierung) verhindert.

0x08
R_BA

Wird wie der Verlagerungstyp R_RBA behandelt.

0x18
R_RBA

Gibt die absolute Verlagerung der Verzweigung an. Gibt die Adresse des Symbols an, das durch dier_symndxFeld als Zieladresse einer Verzweigungsinstruktion. Die Anweisung kann in eine (relative) Verzweigungsanweisung geändert werden, wenn die Zieladresse verschiebbar ist.

0x0A
R_BR

Wird wie der Verlagerungstyp R_RBR behandelt.

0x1A
R_RBR

Gibt die (relative) Verlagerung der Verzweigung an Gibt einen Verschiebungswert zwischen der Adresse des Symbols an, das durch dier_symndxFeld und die Adresse des csect, der die zu ändernde Verzweigungsanweisung enthält Die Anweisung kann in eine absolute Verzweigungsanweisung geändert werden, wenn die Zieladresse nicht verschiebbar ist.

Der Verlagerungstyp R_RBR ist der Standardverlagerungstyp für Verzweigungen, der von Compilern und Assemblern für verwendet wird. Dieser Verlagerungstyp ermöglicht zusammen mit glink -Code einer ausführbaren Objektdatei einen Textabschnitt, der positionsunabhängig ist.

r_rtypedauerhafter
0x20
R_TLS

Gibt die Verlagerung des threadlokalen Speichers unter Verwendung des allgemeinen dynamischen Modells an. Stellt einen Offset in den threadlokalen Speicher für das Modul bereit.

0x21
R_TLS_IE

Entspricht R_TLS, mit der Ausnahme, dass das Modell initial-exec verwendet wird. Das heißt, das Symbol, auf das verwiesen wird, muss vom Hauptprogramm oder einem Modul exportiert werden, das zur Ausführungszeit geladen wird.

0x22
R_TLS_LD@info:status

Entspricht R_TLS, mit der Ausnahme, dass das lokale dynamische Modell verwendet wird. Das heißt, das referenzierte Symbol muss sich im referenzierenden Modul befinden.

0x23
R_TLS_LE

Entspricht R_TLS, mit der Ausnahme, dass das Modell "local-exec" verwendet wird Das heißt, sowohl die Referenz als auch das Symbol, auf das verwiesen wird, müssen sich im Hauptprogramm befinden.

0x24
R_TLSM (TLSM)

Gibt die Verlagerung des threadlokalen Speichers an Stellt eine Kennung für den threadlokalen Speicher der referenzierten Variablen bereit. Die Kennung wird von der pthread-Laufzeit verwendet, um den lokalen Threadspeicher zu lokalisieren.

0x25
R_TLSML

Gibt die Verlagerung des threadlokalen Speichers an Stellt eine Kennung für das Modul bereit, das die Referenz enthält. Derr_symndxFeld muss den Symboltabellenindex des csect-Symbols angeben, das die Referenz enthält

0x30
R_TOCU

Gibt die höherwertigen 16 Bit einer TOC-relativen Verlagerung an. Ähnlich wie bei der R_TOC-Verlagerung wird ein Verschiebungswert berechnet. Der Verschiebungswert ist die Differenz zwischen dem Adresswert im Symbol, das im Feld r_symndx angegeben ist, und der Adresse des TOC-Ankerabschnitts. Die höherwertigen 16 Bit der Verschiebung werden zur Aktualisierung der Anweisung verwendet. Diese Verlagerung kann zu einem Überlauf führen, wenn das Inhaltsverzeichnis größer als 231 Byte ist.

0x31
R_TOCL

Gibt die niederwertigen 16 Bit einer TOC-relativen Verlagerung an. Ähnlich wie bei der R_TOC-Verlagerung wird ein Verschiebungswert berechnet. Der Verschiebungswert ist die Differenz zwischen dem Adresswert im Symbol, das im Feld r_symndx angegeben ist, und der Adresse des TOC-Ankerabschnitts. Die niederwertigen 16 Bit der Verschiebung werden zur Aktualisierung der Anweisung verwendet.

Zusätzliche Verlagerungsfunktionen

Standardverfahren ist es, Verlagerungsinformationen nur für nicht aufgelöste Referenzen oder Referenzen zwischen unterschiedlichen Abschnitten aufzubewahren. Sobald eine Referenz aufgelöst ist, werden die Verlagerungsinformationen gelöscht. Dies ist für eine inkrementelle Bindung und ein festes Adressraummodell ausreichend. Um die Funktionalität zum erneuten Binden und zum Verarbeiten eines verschiebbaren Adressraummodells bereitzustellen, werden die Verlagerungsinformationen nicht aus einer XCOFF -Datei gelöscht.

Allgemeine Informationen zum XCOFF -Dateiformat finden Sie unter "XCOFF Object File Format" .

Weitere Informationen zu Definitionen von Verlagerungsfeldtabellen finden Sie unter "Verlagerungstabellenfelddefinitionen" im Abschnitt zum Ladeprogramm.

Zeilennummer-Informationen für XCOFF-Datei (linenum.h)

Zeilennummerneinträge werden vom symbolischen Debugger verwendet, um Code auf Quellenebene zu debuggen. Wenn vorhanden, gibt es einen einzelnen Zeilennummerneintrag für jede Quellenzeile, die einen symbolischen Debugger-Unterbrechungspunkt haben kann. Die Zeilennummern werden nach Funktion gruppiert. Der Anfang jeder Funktion wird durch diel_lnnoFeld mit dem Wert 0. Das erste Feld,l_symndxist der Symboltabellenindex für den Symboltabelleneintrag C_EXT, C_WEAKEXToder C_HIDEXT für die Funktion.

Jeder Zeilennummerneintrag ist sechs Byte lang. Die C-Sprachstruktur für einen Zeilennummerneintrag finden Sie in der Datei linenum.h . Ein Zeilennummerneintrag enthält die in den folgenden Tabellen gezeigten Felder.

Tabelle 13. Ursprünglicher Zeilennummernstruktureintrag für Funktion
Feldname und Beschreibung XCOFF32 XCOFF64
l_ addr.l_ symndx+
Symboltabellenindex für Funktion
  • Versatz: 0
  • Länge: 4
  • Versatz: 0
  • Länge: 4
l_ lnno +
Wert 0 (Zeilennummer 0)
  • Versatz: 4
  • Länge: 2
  • Versatz: 8
  • Länge: 4
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist. Mitl_addr.l_symndx, wird das Suffix hinzugefügt zul_addr(d. h.l_addr32.l_symndx).
Tabelle 14. Nachfolgende Zeilennummerneinträge für Funktion
Feldname und Beschreibung XCOFF32 XCOFF64
l_ paddr+
Adresse, an der der Unterbrechungspunkt eingefügt werden kann
  • Versatz: 0
  • Länge: 4
  • Versatz: 0
  • Länge: 8
l_ lnno +
Zeilennummer relativ zum Anfang der Funktion
  • Versatz: 4
  • Länge: 2
  • Versatz: 8
  • Länge: 4
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist. Mitl_addr.l_paddr, wird das Suffix hinzugefügt zul_addr(d. h.l_addr32.l_paddr).

Felddefinitionen

Die folgende Liste definiert die Zeilennummerneinträge:

Element Beschreibung
l_symndx Gibt den Symboltabellenindex für den Funktionsnamen an (überlagert diel_paddrFeld). Wenn diel_lnnoFeld ist 0, diese Interpretation des Felds wird verwendet.
l_paddr Gibt die virtuelle Adresse der ersten Instruktion des Codes an, der der Zeilennummer zugeordnet ist (überlagert diel_symndxFeld). Wenn diel_lnnoFeld ist nicht 0, diese Interpretation des Felds wird verwendet.
l_lnno Gibt entweder die Zeilennummer relativ zum Anfang einer Funktion oder 0 an, um den Anfang einer Funktion anzugeben.
Hinweis: Wenn ein Teil einer anderen Funktion als der Anfang aus einer Include-Datei stammt, sind die Zeilennummern absolut und nicht relativ zum Anfang der Funktion. (Weitere Informationen finden Sie in den Symboltypen C_BINCL und C_EINCL unter "Storage Classes by Usage and Symbol Value Classification".

Allgemeine Informationen zum XCOFF -Dateiformat finden Sie unter "XCOFF Object File Format" .

Informationen zum Debugging finden Sie im Abschnitt 'Debug' .

Informationen zur Symboltabelle

Für eine XCOFF -Datei ist eine zusammengesetzte Symboltabelle definiert. Die Symboltabelle enthält Informationen, die sowohl vom Binder (externe Symbole) als auch vom symbolischen Debugger (Funktionsdefinitionen und interne und externe Symbole) benötigt werden.

Die Symboltabelle besteht aus einer Liste von 18-Byte-Einträgen mit fester Länge. Jedes Symbol, das in der Symboltabelle dargestellt wird, besteht aus mindestens einem Eintrag mit fester Länge, auf den einige Hilfseinträge gleicher Größe folgen.

Weitere Informationen zur Symboltabelle finden Sie in den folgenden Abschnitten:

Für jedes externe Symbol ist mindestens ein Hilfseintrag erforderlich, der zusätzliche Informationen zum externen Symbol enthält. Es gibt drei Haupttypen externer Symbole, die für den Binder von Interesse sind und die folgenden Funktionen ausführen:

  • Definieren Sie austauschbare Einheiten oder csects.
  • Definieren Sie die externen Namen für Funktionen oder Eingangspunkte in csects.
  • Verweisen Sie auf die Namen externer Funktionen in einem anderen XCOFF -Objekt.

Für Symbole, die eine austauschbare Einheit (csect) definieren, definiert ein csect-Zusatzeintrag die Länge und die Speicherzuordnungsklasse des csect. Für Symbole, die externe Namen für Funktionen in einem csect definieren, zeigt der csect-Zusatzeintrag auf den übergeordneten csect, die Informationen zur Parametertypprüfung und die symbolischen Debuggerinformationen für die Funktion. Bei Symbolen, die auf den Namen einer externen Funktion verweisen, identifiziert ein csect-Hilfseintrag das Symbol als externe Referenz und verweist auf Informationen zur Parametertypprüfung.

Symboltabelleninhalt

Eine XCOFF-Symboltabelle hat den folgenden allgemeinen Inhalt und die folgende Reihenfolge:

  • Die Symboltabelleneinträge C_FILE , die zum Einklammern aller Symboltabelleneinträge verwendet werden, die einer bestimmten Quellendatei zugeordnet sind.
  • Die Symboltabelleneinträge des Kommentarabschnitts C_INFO , die den Geltungsbereich der Quellendatei haben. Diese folgen dem Eintrag C_FILE , aber vor dem ersten Eintrag in der Symboltabelle der csect-Definition.
  • Die symbolischen Debuggersymboltabelleneinträge, die sich im Dateibereich befinden. Diese folgen dem Eintrag C_FILE , aber vor dem ersten csect-Eintrag.
  • Die C_DWARF -Symbole für DWARF -Debuginformationen. Diese folgen dem Eintrag C_FILE und zwischen dem Eintrag C_FILE und den zugehörigen C_DWARF -Symbolen sollten keine csect-Symbole angezeigt werden.
  • Einträge in der Symboltabelle für die csect-Definition, die zum Definieren und Einklammern aller Symbole verwendet werden, die in einem csect enthalten sind.
  • C_INFO Symboltabelleneinträge im Kommentarabschnitt, die auf einen Symboltabelleneintrag in der Csect-Definition folgen, werden diesem Csect zugeordnet.
  • Alle symbolischen Debugger-Symboltabelleneinträge, die auf einen Eintrag in der Symboltabelle für die csect-Definition oder einen Bezeichnungssymboltabelleneintrag folgen, werden diesem csect oder dieser Bezeichnung zugeordnet.

Die Reihenfolge der Symboltabelle muss von den Compilern und Assemblern so angeordnet werden, dass sie sowohl die Anforderungen des symbolischen Debuggers erfüllen als auch eine effektive Verwaltung der verschiedenen Abschnitte der Objektdatei durch den Binder als Ergebnis solcher Binderaktionen wie Garbage-Collection, inkrementelles Binden und erneutes Binden ermöglichen. Diese Reihenfolge ist für den Binder erforderlich, damit beim Löschen oder Ersetzen eines csect alle Symboltabelleninformationen, die dem csect zugeordnet sind, ebenfalls gelöscht oder ersetzt werden können. Wenn alle csects, die einer Quellendatei zugeordnet sind, gelöscht oder ersetzt werden, können alle Symboltabellen und zugehörigen Informationen, die der Datei zugeordnet sind, ebenfalls gelöscht oder ersetzt werden.

Symboltabellenlayout

Das folgende Beispiel zeigt die allgemeine Reihenfolge der Symboltabelle.

un_external      Undefined global symbols

.file                Prolog --defines stabstring compaction level
.file                Source file 1
  .info              Comment section reference symbol with file scope
  stab               Global Debug symbols of a file
  dwarf	             DWARF Information of a file
  csect              Replaceable unit definition (code)
     .info           Comment section reference symbol with csect scope
     function        Local/External function
         stab        Debug and local symbols of function
     function        Local/External function
         stab        Debug and local symbols of function
  ..............
  csect              Replaceable unit definition (local statics)
         stab        Debug and local statics of file
  ..............
  csect              Relocatable unit definition (global data)
         external    Defined global symbol
         stab        Debug info for global symbol
  ..............
.file                Source file 2
  stab               Global Debug symbols of a file
  dwarf	             DWARF Information of a file
  csect              Replaceable unit definition (code)
         function    Local/External function
             stab    Debug and local symbols of function
  ..............
  csect              Replaceable unit definition (local statics)
      stab           Debug and Local statics of file
  ..............
  csect              Replaceable unit definition (global data)
      external       Defined global symbol
          stab       Debug info for global symbol
.file                Source file
  ..............

Symboltabelleneintrag (syms.h)

Jedes Symbol hat unabhängig von Speicherklasse und -typ einen Eintrag im festen Format in der Symboltabelle. Außerdem können einige Symboltypen zusätzliche (zusätzliche) Symboltabelleneinträge enthalten, die unmittelbar auf den Eintrag im festen Format folgen. Jeder Eintrag in der Symboltabelle ist 18 Byte lang. Die C-Sprachstruktur für einen Symboltabelleneintrag befindet sich in der Datei syms.h . Der Index für den ersten Eintrag in der Symboltabelle ist 0. Die folgende Tabelle zeigt die Struktur des Teils mit festem Format jedes Symbols in der Symboltabelle.

Tabelle 15. Symboltabelleneintragsformat
Feldname und Beschreibung XCOFF32 XCOFF64
n_name
Symbolname (belegt dieselben 8 Byte wie n_zeroes und n_offset)
  • Versatz: 0
  • Länge: 8
  • Versatz: Nicht zutreffend
  • Länge: N/A
n_zeroes
Null, gibt den Namen in der Zeichenfolgetabelle oder im Abschnitt .debug an (überlagert die ersten 4 Byte von n_name).
  • Versatz: 0
  • Länge: 4
  • Versatz: Nicht zutreffend
  • Länge: N/A
n_offset+
Offset des Namens in Zeichenfolgetabelle oder .debug -Abschnitt (in XCOFF32: überlagert die letzten 4 Byte von n_name)
  • Versatz: 4
  • Länge: 4
  • Versatz: 8
  • Länge: 4
n_value+
Symbolwert; speicherklassenabhängig
  • Versatz: 8
  • Länge: 4
  • Versatz: 0
  • Länge: 8
n_scnum
Abschnittsnummer des Symbols
  • Versatz: 12
  • Länge: 2
  • Versatz: 12
  • Länge: 2
n_type
Grundlegende und abgeleitete Typspezifikation
  • Versatz: 14
  • Länge: 2
  • Versatz: 14
  • Länge: 2
n_lang
Quellensprachen-ID (überlagert das erste Byte von 'n_type')
  • Versatz: 14
  • Länge: 1
  • Versatz: 14
  • Länge: 1
n_cpu
CPU-Typ-ID (überlagert zweites Byte von n_type)
  • Versatz: 15
  • Länge: 1
  • Versatz: 15
  • Länge: 1
n_sclass
Speicherklasse des Symbols
  • Versatz: 16
  • Länge: 1
  • Versatz: 16
  • Länge: 1
n_numaux
Anzahl Zusatzeinträge
  • Versatz: 17
  • Länge: 1
  • Versatz: 17
  • Länge: 1
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist.

Felddefinitionen

Im Folgenden werden die Eingabefelder der Symboltabelle definiert:

Element Beschreibung
n_name Wird nur von XCOFF32 verwendet Gibt einen 8-Byte-Symbolnamen mit Nullen aufgefüllt oder einen symbolischen Debuggerstabstring an. Das Speicherklassenfeld wird verwendet, um festzustellen, ob es sich bei dem Feld um einen Symbolnamen oder um eine symbolische Debuggerzeichenfolge handelt. Konventionsgemäß gibt ein Speicherklassenwert mit dem höchstwertigen Bit on an, dass dieses Feld eine symbolische Debuggerzeichenfolge ist.

Wenn der Symbolname XCOFF32 länger als 8 Byte ist, wird das Feld als die folgenden beiden Felder interpretiert:

n_zeroes
Der Wert 0 gibt an, dass sich der Symbolname in der Zeichenfolgetabelle befindet..debugAbschnitt (überlagert das erste Wort vonn_name).
n_offset
Gibt die relative Byteadresse zum Symbolnamen in der Zeichenfolgetabelle an oder.debugAbschnitt (überlagert die letzten 4 Byte vonn_name). Die relative Byteadresse ist relativ zum Anfang der Zeichenfolgetabelle oder.debugein. Ein Byte-Offset-Wert von 0 ist ein Symbolname mit der Länge null oder null.
n_offset Für XCOFF64: Gibt den Byte-Offset zum Symbolnamen in der Zeichenfolgetabelle an oder.debugein. Die relative Byteadresse ist relativ zum Anfang der Zeichenfolgetabelle oder.debugein. Ein Byte-Offset-Wert von 0 ist ein Symbolname mit der Länge null oder null. (Nur für XCOFF32 , verwendet in Verbindung mitn_zeroes. Siehe Eintrag direkt oben.
n_value Gibt den Symbolwert an. Der Inhalt des Symbolwertfelds ist speicherklassenabhängig, wie in den folgenden Definitionen gezeigt:
Inhalt
Speicherklasse
Verlagerbare Adresse
C_EXT, C_WEAKEXT, C_HIDEXT, C_FCN, C_BLOCK, C_STAT
Null
C_GSYM, C_BCOMM, C_DECL, C_ENTRY, C_ESTAT, C_ECOMM
Versatz in csect
C_FUN, C_STSYM
Offset in Datei
C_BINCL, C_EINCL
Offset im Kommentarabschnitt
c_info
Symboltabellenindex
C_DATEI, C_BSTAT
Offset relativ zum Stack-Frame
C_LSYM, C_PSYM
Registernummer
C_RPSYM, C_RSYM
Offset innerhalb des gemeinsamen Blocks
C_ECOML
Offset innerhalb des entsprechenden DWARF-Abschnitts
C_ZWERG
n_scnum Gibt eine Abschnittsnummer an, die einem der folgenden Symbole zugeordnet ist:
-2
Gibt N_DEBUGan, ein spezielles symbolisches Debugging-Symbol.
-1
Gibt N_ABSan, ein absolutes Symbol. Das Symbol hat einen Wert, ist aber nicht verschiebbar.
0
Gibt N_UNDEFan, ein nicht definiertes externes Symbol.
Jeder andere Wert
Gibt die Nummer des Abschnitts an, in dem das Symbol definiert wurde
n_type Die Verwendung dieses Felds hängt von der Speicherklasse des Symbols ab. Informationen zu C_FILE-Symbolen finden Sie unter "Dateihilfseintrag für das Symbol C_FILE " .

Für die Symbole C_EXT, C_HIDEXTund C_WEAKEXTn_typehat zwei Interpretationen in XCOFF32und eine einzige Interpretation in XCOFF64. Die alte Interpretation wird in XCOFF32 verwendet, wenn der Wert dero_vstampFeld im Zusatzheader ist 1.

In der alten XCOFF32 -Interpretation kann Bit 10 (0x0020) gesetzt werden, wenn das Symbol eine Funktion ist. Andernfalls sollte Bit 10 0 sein. Die übrigen Bits sind in der Datei COFF definiert, um Typinformationen darzustellen, und werden nicht länger verwendet.

In XCOFF64 und der neuen Interpretation von XCOFF32_typewird für den Symboltyp und die Sichtbarkeit wie folgt verwendet:

Bit 0-3
Symbolsichtbarkeit. Das Makro SYM_V_MASK mit dem Wert 0xF000kann verwendet werden, um Bits in dern_typeFeld, das keine Sichtbarkeit angibt. Die folgenden Sichtbarkeiten sind definiert:
0x1000	SYM_V_INTERNAL
0x2000	SYM_V_HIDDEN
0x3000	SYM_V_PROTECTED
0x4000	SYM_V_EXPORTED
Bit 10
Optional auf 1 gesetzt, wenn das Symbol eine Funktion ist. Andernfalls wird er auf 0 gesetzt.
Bits 4–9, 11–15
Für künftige Verwendung reserviert.

Die Symbolsichtbarkeit wird im Befehl ld beschrieben.

Hinweis: Für alle anderen Speicherklassenn_typeFeld ist für zukünftige Verwendung reserviert und sollte 0 enthalten.
n_sclass Gibt die Speicherklasse des Symbols an. Die Dateien storclass.h und dbxstclass.h enthalten die Definitionen der Speicherklassen. Weitere Informationen finden Sie unter "Symboltabellenfeldinhalte nach Speicherklasse" .
n_numaux Gibt die Anzahl der Hilfseinträge für das Symbol an. In XCOFF64haben Hilfssymbole einen identifizierenden Typ, aber in XCOFF32gibt es kein Typfeld. Wenn also mehr als ein Hilfseintrag für ein Symbol erforderlich ist, wird die Reihenfolge der Hilfseinträge nach Konvention festgelegt.

Allgemeine Informationen zum XCOFF-Dateiformat finden Sie unter "XCOFF-Objektdateiformat" .

Zusätzliche Informationen zur Symboltabelle

Die Symboltabelle enthält zusätzliche Einträge, die ergänzende Informationen zu einem Symbol bereitstellen. Die Zusatzeinträge für ein Symbol folgen dem zugehörigen Symboltabelleneintrag. Die Länge jedes Zusatzeintrags entspricht der eines Symboltabelleneintrags (18 Byte). Das Format und die Menge der Zusatzeinträge hängen von der Speicherklasse ab (n_sclass) und Typ (n_type) des Symboltabelleneintrags.

In XCOFF32müssen Symbole mit der Speicherklasse C_EXT, C_WEAKEXT oder C_HIDEXT und mehreren Zusatzeinträgen den Zusatzeintrag csect als letzten Zusatzeintrag haben. In XCOFF64x_auxtypeFeld jedes Hilfssymboltabelleneintrags unterscheidet die Symbole, aber die Konvention besteht darin, den csect-Hilfssymboltabelleneintrag zuletzt zu generieren.

Dateihilfseintrag für C_FILE-Symbole

Der Eintrag für die Zusatzsymboltabelle der Datei ist so definiert, dass er den Namen der Quellendatei und die compilerbezogenen Zeichenfolgen enthält. Ein Dateihilfseintrag ist optional und wird zusammen mit einem Symboltabelleneintrag mit dem Speicherklassenwert C_FILEverwendet. Die C-Sprachstruktur für einen Dateihilfseintrag befindet sich in der Struktur x_file in der Datei syms.h .

Das Symbol C_FILE stellt Informationen zum Quellendateinamen, zur Quellensprachen-ID und zur CPU-Versions-ID sowie optional zur Compilerversion und zur Zeitmarke bereit.

Dern_typeFeld des Symboltabelleneintrags gibt die Quellensprache der Quellendatei und die CPU-Versions-ID der kompilierten Objektdatei an. Die Feldinformationen lauten wie folgt:

Element Beschreibung
Source Language ID Überlagert das höchstwertige Byte dern_typeerlaubt. Dieses Feld enthält die Quellensprachenkennung. Die Werte für dieses Feld sind in dere_langin "Ausnahmeabschnitt" . Dieses Feld kann von den symbolischen Debuggern verwendet werden, um die Quellensprache zu bestimmen.

Die optionalen Werte für dieses Feld sind 248 (TB_OBJECT) für Symbole aus Objektdateien ohne Symboltabelleneintrag C_FILE oder 249 (TB_FRONT) oder 250 (TB_BACK) für generierte Einträge, die zur Bereitstellung von Debuginformationen verwendet werden. Wenn die Quellensprache TB_FRONT oder TB_BACK ist, beginnt das achtstellige Namensfeld mit' '(Leerzeichen), '\0' (NULL). Wenn die Quellensprache TB_FRONT ist, ist das dritte Byte die Komprimierungsstufe stabstring für die Objektdatei, und das Feld n_offset enthält den Symboltabellenindex des Symboltabelleneintrags TB_BACK, falls vorhanden, oder andernfalls 0.

CPU Version ID Definiert als niedrigstwertiges Byte dern_typeerlaubt. Schreibt die Art von Anweisungen, die für die Datei generiert wurden. Die folgenden Werte sind definiert:
0
Reserviert.
1
Gibt den 32-Bit-Modus an.
2
Reserviert.
3
Gibt die gemeinsame Schnittmenge von 32 -Bit-und -Prozessor an
4
Gibt den -Prozessor an
5
Gibt eine Mischung von Anweisungen zwischen verschiedenen Architekturen an
6
Gibt eine Mischung aus -und -Anweisungen an ()
7-223
Reserviert.
224
Gibt -Anweisungen an.
225–255
Reserviert.

Wenn beide Felder 0 sind, werden keine Informationen zur Quellensprache bereitgestellt.

Format des Zusatzeintrags für Dateinamen
Aufrechnung
Länge in Byte
Ihren Namen
Beschreibung
0
14
x_fname
Quellendateizeichenfolge
0
4
x_zeroes
Null, gibt Dateizeichenfolge in Zeichenfolgetabelle an (überlagert die ersten 4 Byte vonx_fname)
4
4
x_offset
Offset der Dateizeichenfolge in Zeichenfolgetabelle (überlagert 5th-8th Byte vonx_fname)
14
1
x_ftype
Dateizeichenfolgetyp
15
2
Reserviert. Muss 0 enthalten.
17
1
x_auxtype
Typ des Hilfssymbols (nurXCOFF64 )

Felddefinitionen

Im Folgenden werden die oben aufgeführten Felder definiert:

Element Beschreibung
x_fname Gibt den Namen der Quellendatei oder die compilerbezogene Zeichenfolge an.

Wenn der Dateiname oder die Zeichenfolge länger als 8 Byte ist, wird das Feld wie folgt interpretiert:

x_zeroes
Der Wert 0 gibt an, dass sich die Quellendateizeichenfolge in der Zeichenfolgetabelle befindet (überlagert die ersten 4 Byte vonx_fname).
x_offset
Gibt den Offset vom Anfang der Zeichenfolgetabelle zum ersten Byte der Quellendateizeichenfolge an (überlagert die letzten 4 Byte vonx_fname).
x_ftype Gibt den Zeichenfolgedatentyp der Quellendatei an.
0 XFT_FN
Gibt den Namen der Quellendatei an.
1 XFT_CT
Gibt die Zeitmarke des Compilers an.
2 XFT_CV
Gibt die Versionsnummer des Compilers an.
128 XFT_CD
Gibt vom Compiler definierte Informationen an.
(kein Name) Reserviert. Dieses Feld muss 2 Byte von 0 enthalten.
x_auxtype (NurXCOFF64 ) Gibt den Typ des Hilfseintrags an. Enthält _AUX_FILE für diesen Zusatzeintrag

Wird der Dateizusatzeintrag nicht verwendet, ist der Symbolname der Name der Quellendatei. Wird der Zusatzeintrag für die Datei verwendet, muss der Symbolname.file, und der erste zusätzliche Dateieintrag (nach Konvention) enthält den Namen der Quellendatei. Für einen bestimmten Symboltabelleneintrag sind mehrere zusätzliche Dateieinträge zulässig. Dern_numauxenthält die Anzahl der zusätzlichen Dateieinträge.

csect-Zusatzeintrag für die Symbole C_EXT, C_WEAKEXT und C_HIDEXT

Der Zusatzeintrag csect gibt csects (Abschnittsdefinitionen), Eingangspunkte (Beschriftungsdefinitionen) und externe Referenzen (Beschriftungsdeklarationen) an. Für jeden Symboltabelleneintrag mit dem Speicherklassenwert C_EXT, C_WEAKEXToder C_HIDEXTist ein csect-Zusatzeintrag erforderlich. Weitere Informationen finden Sie unter "Symboltabelleneintrag (syms.h)" Gemäß Konvention muss der csect-Zusatzeintrag in einer XCOFF32 -Datei der letzte Zusatzeintrag für jedes externe Symbol sein, das mehrere Zusatzeinträge enthält. Die C-Sprachstruktur für einen csect-Hilfseintrag finden Sie in der Struktur x_csect in der Datei syms.h .

Tabelle 16. csect-Zusatzeintragsformat
Feldname und Beschreibung XCOFF32 XCOFF64
x_scnlen
(Siehe Abschnitt zur Felddefinition)
  • Versatz: 0
  • Länge: 4
  • Versatz: Nicht zutreffend
  • Länge: N/A
x_scnlen_lo
(Siehe Felddefinitionsabschnitt) Niedrige 4 Byte Abschnittslänge
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 0
  • Länge: 4
x_parmhash
Offset des Parametertyps-Hashwert für Prüfung im Abschnitt .typchk
  • Versatz: 4
  • Länge: 4
  • Versatz: 4
  • Länge: 4
x_snhash
.typchk Abschnittsnummer
  • Versatz: 8
  • Länge: 2
  • Versatz: 8
  • Länge: 2
x_smtyp
Symbolausrichtung und 3-Bit-Symbolausrichtung (Protokoll 2) 3-Bit-Symboltyp
  • Versatz: 10
  • Länge: 1
  • Versatz: 10
  • Länge: 1
x_smclas
Speicherzuordnungsklasse
  • Versatz: 11
  • Länge: 1
  • Versatz: 11
  • Länge: 1
x_stab
Reserviert
  • Versatz: 12
  • Länge: 4
  • Versatz: Nicht zutreffend
  • Länge: N/A
x_snstab
Reserviert
  • Versatz: 16
  • Länge: 2
  • Versatz: Nicht zutreffend
  • Länge: N/A
x_scnlen_hi
(Siehe Felddefinitionsabschnitt) Hohe 4 Byte Abschnittslänge
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 12
  • Länge: 4
(Block)
Reserviert
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 16
  • Länge: 1
x_auxtype
Enthält _AUX_CSECT; gibt den Typ des Hilfseintrags an.
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 17
  • Länge: 1

Felddefinitionen

Im Folgenden werden die oben aufgeführten Felder definiert:
Element Beschreibung
x_scnlen Gibt eine Bedeutung an, die vonx_smtypwie folgt:
Wenn
Dann
XTY_SD
x_scnlenenthält die csect-Länge.
XTY_LD@info:status
x_scnlenenthält den Symboltabellenindex des enthaltenden csect.
XTY_CM
x_scnlenenthält die csect-Länge.
XTY_ER
x_scnlenenthält 0.
Im XCOFF64 -Format ist der Wert vonx_scnlenist in zwei Felder unterteilt:x_scnlen_hi, die die oberen 4 Byte des Werts darstellen, undx_scnlen_lo, die die unteren 4 Byte des Werts darstellen.
x_parmhash Gibt die relative Byteadresse der Parametertypprüfzeichenfolge in der.typchkein. Die relative Byteadresse bezieht sich auf den Anfang der.typchkAbschnitt in einer XCOFF-Datei. Die Byteadresse verweist auf das erste Byte der Parametertypprüfzeichenfolge (nicht auf das zugehörige Längenfeld). Weitere Informationen finden Sie unter "Type-Check Section" . Der Wert 0 in derx_parmhashDieses Feld gibt an, dass die Zeichenfolge für die Überprüfung des Parametertyps für dieses Symbol nicht vorhanden ist und dass das Symbol als Symbol mit einem universellen Hashwert behandelt wird. Der Wert für C_HIDEXT -Symbole sollte 0 sein.
x_snhash Gibt die.typchkAbschnittsnummer. Die XCOFF-Abschnittsnummer, die die Zeichenfolgen für die Parametertypüberprüfung enthält Die Abschnittsnummern basieren auf 1. Aus Gründen der Kompatibilität mit Objektdateien, die von einigen Compilern generiert werden, wennx_parmhashist ungleich 0, aberx_snhashist gleich 0, dann die erste.typchkAbschnitt in der Datei verwendet wird. Der Wert für C_HIDEXT -Symbole sollte 0 sein.
x_smtyp Gibt Symbolausrichtung und -typ an:
Bit 0-4
Enthält einen 5-Bit-Ausrichtungswert für csect-Adressen (Protokollbasis 2). Der Wert 3 in diesem Feld gibt beispielsweise 23 oder 8 an, was bedeutet, dass der csect auf einen 8-Byte-Adresswert ausgerichtet werden soll. Der Ausrichtungswert wird nur verwendet, wenn der Wert der Bits 5-7 derx_smtypFeld ist entweder XTY_SD oder XTY_CM.
Bit 5-7
Enthält ein 3-Bit-Symboltypfeld. Siehe die Definitionen für Bit 5-7 derl_smtypeFeld in "Ladeprogrammabschnitt" für weitere Informationen.
x_smclas Gibt die csect-Speicherzuordnungsklasse an. Dieses Feld ermöglicht dem Binder, csects nach ihrer Speicherzuordnungsklasse anzuordnen. Derx_smclasFeld wird nur verwendet, wenn der Wert der Bits 5-7 derx_smtypFeld ist entweder XTY_SD oder XTY_CM.

Die folgenden Speicherzuordnungsklassen sind schreibgeschützt und werden normalerweise der.textAbschnitt:

Wertklasse
Beschreibung
0 XMC_PR
Gibt den Programmcode an. Der csect enthält die ausführbaren Anweisungen des Programms.
1 XMC_RO
Gibt eine schreibgeschützte Konstante an. Der csect enthält Daten, die konstant sind und sich während der Ausführung des Programms nicht ändern.
2 XMC-DB
Gibt die Debugwörterbuchtabelle an. Der csect enthält symbolische Debugdaten oder Daten zur Ausnahmebedingungsverarbeitung. Diese Speicherzuordnungsklasse wurde so definiert, dass Compiler mit speziellen Anforderungen für symbolisches Debugging oder Ausnahmebedingungsverarbeitung Daten in csects speichern können, die während der Ausführung geladen werden, aber getrennt vom ausführbaren Code des Programms erfasst werden können.
6 XMC_GL
Gibt die globale Verbindung an. Der csect stellt den Schnittstellencode bereit, der erforderlich ist, um relative csect-Aufrufe an ein Zielsymbol zu verarbeiten, das sich außerhalb des Moduls befinden kann. Dieser globale Verbindungsabschnitt hat denselben Namen wie das Zielsymbol und wird zum lokalen Ziel der relativen Aufrufe. Daher verwaltet der csect positionsunabhängigen Code innerhalb der.textAbschnitt der ausführbaren XCOFF-Objektdatei.
7 XMC_XO
Gibt die erweiterte Operation an. Ein csect dieses Typs hat keine Abhängigkeit vom Inhaltsverzeichnis (verweist über). Sie soll sich an einer festen Adresse im Speicher befinden, sodass sie das Ziel einer absoluten Verzweigungsinstruktion sein kann.
12 XMC_TI
Reserviert.
13 XMC_TB
Reserviert.

Die folgenden Speicherzuordnungsklassen sind Schreib-/Leseklassen und werden normalerweise dem.dataoder.bssAbschnitt:

Wertklasse
Beschreibung
5 XMC_RW
Gibt Lese-/Schreibdaten an. Ein csect dieses Typs enthält initialisierte oder nicht initialisierte Daten, die während der Programmausführung geändert werden dürfen. Wenn dasx_smtypWert ist XTY_SD, der csect enthält initialisierte Daten und wird dem.dataein. Wenn dasx_smtypWert ist XTY_CM, der csect ist nicht initialisiert und wird dem.bssein. Normalerweise sind alle initialisierten statischen Daten aus einer C-Quellendatei in einem einzelnen csect dieses Typs enthalten. Der csect hätte den Speicherklassenwert C_HIDEXT. Eine initialisierte Definition für einen globalen Datenskalar oder eine Struktur aus einer C-Quellendatei ist in einem eigenen csect dieses Typs enthalten. Der csect hätte den Speicherklassenwert C_EXT. Auf einen csect dieses Typs kann über Namensverweise aus anderen Objektdateien zugegriffen werden.
x_smclasdauerhafter
Wertklasse
Beschreibung
15 XMC_TC0
Gibt den TOC-Anker für die Adressierbarkeit des Inhaltsverzeichnisses an Dies ist ein csect mit einer Länge von null, dessenn_valueaddress gibt die Basisadresse für die relative TOC-Adressierbarkeit an. Pro Abschnitt einer XCOFF-Objektdatei ist nur ein csect des Typs XMC_TC0 zulässig. In Implementierungen, die es Compilern und Assemblern ermöglichen, mehrere.dataAbschnitte, muss ein csect des Typs XMC_TC0 in jedem Abschnitt vorhanden sein, der Daten enthält, auf die (über einen Verlagerungseintrag) als TOC-relatives Datenelement verwiesen wird. Einige Hardwarearchitekturen begrenzen den Wert, den ein Feld für relative Verschiebung in einer Ladeanweisung enthalten kann. Dieser Grenzwert wird dann zu einem inhärenten Grenzwert für die Größe eines Inhaltsverzeichnisses für ein ausführbares XCOFF-Objekt. Für RS/6000 beträgt diese Grenze 65.536 Bytes oder 16.384 4-Byte-TOC-Einträge.
3 XMC-TC
22 XMC_TE
Gibt allgemeine TOC-Einträge an Csects dieses Typs haben dieselbe Größe wie ein Zeiger und enthalten die Adresse anderer csects oder globaler Symbole. Diese csects bieten Adressierbarkeit für andere csects oder Symbole. Die Symbole können sich im lokalen ausführbaren XCOFF-Objekt oder einem anderen ausführbaren XCOFF-Objekt befinden. Der Binder verwendet eine spezielle Verarbeitungssemantik, um doppelte TOC-Einträge wie folgt zu entfernen:
  • Symbole mit dem Speicherklassenwert C_EXT sind globale Symbole und müssen Namen haben (ungleich null).n_nameFeld). Diese Symbole erfordern keine spezielle TOC-Verarbeitungslogik, um doppelte Einträge zu kombinieren. Doppelte Einträge mit demselbenn_namewerden zu einem einzigen Eintrag kombiniert.
  • Symbole mit dem Speicherklassenwert C_HIDEXT sind keine globalen Symbole und doppelte Einträge werden nach Kontext aufgelöst. Zwei beliebige Symbole werden als Duplikate definiert und zu einem einzigen Eintrag kombiniert, wenn die folgenden Bedingungen erfüllt sind:
    • Dern_nameFelder sind identisch. Das heißt, sie haben entweder einen Nullnamen oder dieselbe Namenszeichenfolge.
    • Jeder hat dieselbe Größe wie ein Zeiger.
    • Jeder hat einen einzelnen RLD-Eintrag, der auf externe Symbole mit demselben Namen verweist.

Um die Anzahl der doppelten TOC-Einträge zu minimieren, die der Binder nicht kombinieren kann, sollten Compiler und Assembler eine allgemeine Namenskonvention für TOC-Einträge einhalten. Gemäß Konvention erzeugen Compiler und Assembler TOC-Einträge mit dem Speicherklassenwert C_HIDEXT und einemn_nameZeichenfolge, die mit dern_nameWert für das Symbol, das der TOC-Eintrag adressiert.

Die Speicherzuordnungsklassen XMC_TC und XMC_TE sind äquivalent, außer dass der Binder XMC_TE -Symbole nach XMC_TC -und XMC_TD -Symbolen zuordnen sollte.

x_smclasdauerhafter
Wertklasse
Beschreibung
16 XMC_TD
Gibt einen skalaren Dateneintrag im Inhaltsverzeichnis an. Ein csect, bei dem es sich um eine Sonderform eines XMC_RW -Csect handelt, auf den vom Compiler generierter Code direkt über das Inhaltsverzeichnis zugegriffen wird. Dadurch kann auf einige häufig verwendete Globol-Symbole direkt aus dem Inhaltsverzeichnis und nicht indirekt über einen Adresszeiger csect zugegriffen werden, der im Inhaltsverzeichnis enthalten ist. Ein csect des Typs XMC_TD weist die folgenden Merkmale auf:
  • Der Compiler generiert Code, der ein Inhaltsverzeichnis (TOC) relativ zum direkten Zugriff auf die Daten ist, die im csect des Typs XMC_TDenthalten sind.
  • Sie ist maximal 4 Byte lang.
  • Es hat Daten initialisiert, die bei der Ausführung des Programms geändert werden können.
  • Wenn ein gleichnamiges csect des Typs XMC_RW oder XMC_UA vorhanden ist, wird es durch den csect XMC_TD ersetzt.

Für die Fälle, in denen sich TOC-Skalar nicht im Inhaltsverzeichnis befinden kann, muss der Binder in der Lage sein, die vom Compiler generierte relative TOC-Instruktion in eine konventionelle indirekte Adressierungsinstruktionssequenz zu transformieren. Diese Transformation ist erforderlich, wenn der skalare TOC in einem gemeinsam genutzten Objekt enthalten ist.

10 XMC_DS
Gibt einen csect mit einem Funktionsdeskriptor an, der die folgenden drei Werte enthält:
  • Die Adresse des ausführbaren Codes für eine Funktion.
  • Die Adresse des TOC-Ankers (TOC-Basisadresse) des Moduls, das die Funktion enthält
  • Der Umgebungszeiger (verwendet von Sprachen wie Pascal und PL/I ).

Es gibt nur einen Funktionsdeskriptor csect für eine Funktion, und er muss in derselben ausführbaren Datei enthalten sein wie die Funktion selbst. Der Funktionsdeskriptor hat den Speicherklassenwert C_EXT und hat einenn_nameWert, der dem Namen der Funktion in der Quellendatei entspricht. Die Adressen von Funktionsdeskriptoren werden in eine ausführbare XCOFF-Datei importiert und aus dieser exportiert.

8 XMC_SV
Gibt den 32-Bit-Supervisoraufrufdeskriptor csect an. Die Supervisoraufrufdeskriptoren sind im Betriebssystemkernel enthalten. Für ein Anwendungsprogramm wird die Referenz auf einen Supervisoraufrufdeskriptor als Referenz auf einen regulären Funktionsdeskriptor behandelt. Über den Import-/Exportmechanismus wird ein Funktionsdeskriptor als Supervisoraufrufdeskriptor behandelt. Diese Symbole sind nur für 32-Bit-Programme verfügbar.
17 XMC_SV64
Gibt den 64-Bit-Supervisoraufrufdeskriptor csect an. Informationen zum Supervisoraufruf finden Sie unter XMV_SV . Diese Symbole sind nur für 64-Bit-Programmen verfügbar.
18 XMC_SV3264
Gibt den Deskriptor des Supervisoraufrufs csect für 32-Bit und 64-Bit an. Informationen zum Supervisoraufruf finden Sie unter XMV_SV . Diese Symbole sind für 32 -Bit-und 64-Bit-Programme verfügbar.
4 XMC_UA
Nicht klassifiziert. Dieser csect wird als Schreib-/Lesevorgang behandelt. Dieser csect wird häufig von einem Assembler-oder Objektdateiumsetzungsprogramm erstellt, das die wahre Klassifikation des resultierenden csect nicht ermitteln kann.
9 XMC_BS
Gibt die BSS-Klasse an (nicht initialisierte statische interne Klasse) Ein csect dieses Typs ist nicht initialisiert und soll dem zugeordnet werden..bssein. Dieser Typ von csect muss einenx_smtypWert von XTY_CM.
x_smclasdauerhafter
Wertklasse
Beschreibung
11 XMC_UC
Gibt nicht benannte FORTRAN-allgemeine an. Ein csect dieses Typs ist für einen nicht benannten und nicht initialisierten FORTRAN-Common bestimmt. Es ist für die Zuordnung in die.bssein. Dieser Typ von csect muss einenx_smtypWert von XTY_CM.

Die folgende Speicherzuordnungsklasse hat Schreib-/Lesezugriff und ist der.tdataAbschnitt:

20 XMC_TL
Gibt lokale Lese-/Schreibthreaddaten an. Ein csect dieses Typs enthält initialisierte Daten, die für jeden Thread in einem Prozess lokal sind. Wenn ein neuer Thread erstellt wird, wird ein csect mit dem Typ XMC_TL verwendet, um die threadlokalen Daten für den Thread zu initialisieren.

Die folgende Speicherzuordnungsklasse hat Schreib-/Lesezugriff und ist der.tbssAbschnitt:

21 XMC_UL
Gibt lokale Lese-/Schreibthreaddaten an. Ein csect dieses Typs enthält nicht initialisierte Daten, die für jeden Thread in einem Prozess lokal sind. Wenn ein neuer Thread erstellt wird, wird der threadlokale Speicher für einen csect dieses Typs mit null initialisiert.
x_stab Reserviert (für 64 Bit nicht verwendet).
x_snstab Reserviert (für 64 Bit nicht verwendet).

Zusatzeinträge für die Symbole C_EXT, C_WEAKEXT und C_HIDEXT

Einträge in der Zusatzsymboltabelle werden in XCOFF definiert und enthalten Referenz-und Größeninformationen, die einer definierten Funktion zugeordnet sind. Diese Zusatzeinträge werden durch Compiler und Assembler zur Verwendung durch die symbolischen Debugger erzeugt. In XCOFF32enthält ein Symboltabelleneintrag für Hilfsfunktionen die erforderlichen Informationen. In XCOFF64kann sowohl ein externer Funktionseintrag als auch ein externer Zusatzeintrag erforderlich sein. Wenn beide Hilfseinträge für ein einzelnes Symbol C_EXT, C_WEAKEXToder C_HIDEXT generiert werden,x_sizeundx_endndxFelder müssen dieselben Werte haben.

Der Eintrag für die Funktionszusatzsymboltabelle ist in der folgenden Tabelle definiert.

Tabelle 17. Format des zusätzlichen Funktionseintrags
Feldname und Beschreibung XCOFF32 XCOFF64
x_exptr
Dateioffset zu Ausnahmetabelleneintrag
  • Versatz: 0
  • Länge: 4
  • Versatz: Nicht zutreffend
  • Länge: N/A
x_fsize
Größe der Funktion in Byte
  • Versatz: 4
  • Länge: 4
  • Versatz: 8
  • Länge: 4
x_lnnoptr
Dateizeiger auf Zeilennummer
  • Versatz: 8
  • Länge: 4
  • Versatz: 0
  • Länge: 8
x_endndx
Symboltabellenindex des nächsten Eintrags über diese Funktion hinaus
  • Versatz: 12
  • Länge: 4
  • Versatz: 12
  • Länge: 4
(Block)
Nicht verwendet
  • Versatz: 16
  • Länge: 2
  • Versatz: 16
  • Länge: 1
x_auxtype
Enthält _AUX_FCN; Typ des Hilfseintrags
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 17
  • Länge: 1

Felddefinitionen

Im Folgenden werden die Felder definiert, die in der Tabelle "Format des zusätzlichen Funktionseintrags" aufgelistet sind:

Element Beschreibung
x_exptr (NurXCOFF32 ) Dieses Feld ist ein Dateizeiger auf einen Ausnahmetabelleneintrag. Der Wert ist die relative Byteadresse vom Anfang der XCOFF-Objektdatei. In einer XCOFF64 -Datei befinden sich die Offsets der Ausnahmetabelle in einem externen Symboltabelleneintrag für Ausnahmebedingungen.
x_fsize Gibt die Größe der Funktion in Byte an.
x_lnnoptr Gibt einen Dateizeiger auf die Zeilennummer an. Der Wert ist die relative Byteadresse vom Anfang der XCOFF-Objektdatei.
x_endndx Gibt den Symboltabellenindex des nächsten Eintrags nach dieser Funktion an.

Der Eintrag für die Zusatzsymboltabelle für Ausnahmebedingungen, der nur in XCOFF64 definiert ist, wird in der folgenden Tabelle gezeigt.

Tabelle 18. Format des externen Ausnahmebedingungseintrags (nurXCOFF64 )
Aufrechnung Länge Name und Beschreibung
0 8
x_exptr
Relative Position der Datei zum Ausnahmetabelleneintrag.
8 4
x_fsize
Größe der Funktion in Byte
12 4
x_endndx
Symboltabellenindex des nächsten Eintrags über diese Funktion hinaus
16 1
(Block)
Nicht verwendet
17 1
x_auxtype
Enthält _AUX_EXCEPT; Typ des Hilfseintrags

Felddefinitionen

Im Folgenden werden die Felder definiert, die in der Tabelle "Exception Auxiliary Entry Format" aufgelistet sind:

Element Beschreibung
x_exptr Dieses Feld ist ein Dateizeiger auf einen Ausnahmetabelleneintrag. Der Wert ist die relative Byteadresse vom Anfang der XCOFF-Objektdatei.
x_fsize Gibt die Größe der Funktion in Byte an.
x_endndx Gibt den Symboltabellenindex des nächsten Eintrags nach dieser Funktion an.

Zusätzliche Einträge für die Symbole C_BLOCK und C_FCN blockieren

Der Symboleintrag für die Zusatzsymboltabelle wird in XCOFF definiert, um Informationen zu den Anfangs-und Endblöcken von Funktionen bereitzustellen. Der Symbolhilfssymboltabelleneintrag wird von Compilern zur Verwendung durch die symbolischen Debugger erzeugt.

Tabelle 19. Tabelleneintragsformat
Feldname und Beschreibung XCOFF32 XCOFF64
(kein Name)
Reserviert
  • Versatz: 0
  • Länge: 2
  • Versatz: Nicht zutreffend
  • Länge: N/A
x_lnnohi
Höchstordnung 2 Byte der Quellenzeilennummer
  • Versatz: 2
  • Länge: 2
  • Versatz: Nicht zutreffend
  • Länge: N/A
x_lnno
Niedrigstordnung 2 Byte der Quellenzeilennummer
  • Versatz: 4
  • Länge: 2
  • Versatz: Nicht zutreffend
  • Länge: N/A
x_lnno
Quellzeilennummer
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 0
  • Länge: 4
(kein Name)
Reserviert
  • Versatz: 6
  • Länge: 12
  • Versatz: 4
  • Länge: 13
x_auxtype
Enthält _AUX_SYM; Typ des Hilfseintrags
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 17
  • Länge: 1

Felddefinitionen

Im Folgenden werden die obigen Felder definiert:

Element Beschreibung
(kein Name) Reserviert.
x_lnnohi Gibt für XCOFF32die höherwertigen 16 Bit einer Zeilennummer in der Quellendatei an.
x_lnno Gibt die Zeilennummer einer Quellendatei an Der Maximalwert für dieses Feld ist 65535 für XCOFF64 und 232 für XCOFF64.

Zusatzeintrag im Abschnitt für das Symbol C_STAT

Die ID des Eintrags für die Zusatzsymboltabelle für Abschnitte wird in XCOFF32 definiert, um Informationen in der Symboltabelle über die Größe von Abschnitten bereitzustellen, die von einem Compiler oder Assembler erzeugt wurden. Die Generierung dieser Informationen durch einen Compiler ist optional und wird vom Binder ignoriert und entfernt.

Anmerkung: Das + nach x_scnlen und x_nreloc sollte hochgestellt sein. Weitere Instanzen dieses Hochscripts finden Sie in der vorhandenen Dokumentation.
Tabelle 20. Section Auxiliary Entry Format (nurXCOFF32 )
Aufrechnung Länge in Byte Name und Beschreibung
0 4
x_scnlen
Abschnittslänge
4 2
x_nreloc
Anzahl der Verlagerungseinträge
6 2
x_nlinno
Anzahl der Zeilennummern
8 10
(kein Name)
Reserviert

Felddefinitionen

Die folgende Liste definiert die Felder:

Element Beschreibung
x_scnlen Gibt die Abschnittslänge in Byte an
x_nreloc Gibt die Anzahl der Verlagerungseinträge an. Der Maximalwert für dieses Feld ist 65535.
x_nlinno Gibt die Anzahl der Zeilennummern an Der Maximalwert für dieses Feld ist 65535.
(kein Name) Reserviert.

Allgemeine Informationen zum XCOFF-Dateiformat finden Sie unter "XCOFF-Objektdateiformat" . Weitere Informationen zur Symboltabelle finden Sie unter "Symboltabelleninformationen" .

Informationen zum Debugging finden Sie im Abschnitt 'Debug' .

SECT-Zusatzeintrag für das Symbol C_DWARF

Der Eintrag für die SECT-Zusatzsymboltabelle wird definiert, um in der Symboltabelle Informationen zur Größe des Abschnitts bereitzustellen, der durch das Symbol C_DWARF dargestellt wird.

Tabelle 21. Section Auxiliary Entry Format für C_DWARF-Symbole
Feldname und Beschreibung XCOFF32 XCOFF64
x _scnlen+
Länge des Abschnitts des Abschnitts, der durch das Symbol dargestellt wird.
  • Versatz: 0
  • Länge: 4
  • Versatz: 0
  • Länge: 8
(kein Name)
Reserviert
  • Versatz: 4
  • Länge: 4
  • Versatz: Nicht zutreffend
  • Länge: N/A
x_nreloc +
Anzahl der Verlagerungseinträge im Abschnitt
  • Versatz: 8
  • Länge: 4
  • Versatz: 8
  • Länge: 8
(kein Name)
Reserviert
  • Versatz: 12
  • Länge: 4
  • Versatz: Nicht zutreffend
  • Länge: N/A
(kein Name)
Reserviert
  • Versatz: 16
  • Länge: 2
  • Versatz: 16
  • Länge: 1
x_auxtyp
Enthält _AUX_SECT; Typ des Hilfseintrags
  • Versatz: Nicht zutreffend
  • Länge: N/A
  • Versatz: 17
  • Länge: 1
Hinweis:+Verwenden Sie das Suffix "32" oder "64", wenn __XCOFF_HYBRID__ definiert ist.

Felddefinitionen

Die folgende Liste definiert die Felder:

Element Beschreibung
(no name) Reserviert
x_scnlen Die Größe des Abschnitts, der durch dieses Symbol dargestellt wird.
x_nreloc Anzahl der Verlagerungseinträge für dieses Symbol. Der Binder setzt dieses Feld auf 0.

Symboltabellenfeldinhalt nach Speicherklasse

Dieser Abschnitt definiert den Inhalt der Symboltabellenfelder für jede der definierten Speicherklassen (n_sclass) die in XCOFF verwendet werden. In der folgenden Tabelle sind Speicherklasseneinträge in alphabetischer Reihenfolge aufgelistet. Weitere Informationen finden Sie unter "Symboltabelleneintrag (syms.h)"

Tabelle 22. Symboltabelle nach Speicherklasse
Klassendefinition Feldinhalt
C_BCOMM 135 Anfang des gemeinsamen Blocks
Name
Name des allgemeinen Blocks *
N-Wert
0, nicht definiert
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_BINCL 108 Anfang der Include-Datei
Name
Quellenname der Include-Datei * *
N-Wert
Dateizeiger
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_BLOCK 100 Anfang oder Ende des inneren Blocks
Name
.bb oder .eb
N-Wert
Verlagerbare Adresse
n_SCNr
N_SCNUM
In: Aux. Einstiegsspeichermedien
BLOCK
C_BSTAT 143 Beginn des statischen Blocks
Name
.bs
N-Wert
Symboltabellenindex
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_DECL 140 Deklaration des Objekts (Typ)
Name
Debugger-stabstring *
N-Wert
0, nicht definiert
n_SCNr
N_SCNUM
In: Aux. Einstiegsspeichermedien
C_DWARF 112 DWARF-Symbol
Name
Entspricht dem Namen des entsprechenden DWARF -Abschnitts
N-Wert
Verschiebbarer Offset in entsprechenden Abschnitt DWARF
n_SCNr
Abschnittsnummer eines DWARF -Abschnitts
In: Aux. Einstiegsspeichermedien
SEKT
C_ECOML 136 Lokales Member des allgemeinen Blocks
Name
Debugger-stabstring *
N-Wert
Offset innerhalb des gemeinsamen Blocks
n_SCNr
N_ABS
In: Aux. Einstiegsspeichermedien
C_ECOMM 137 Ende des gemeinsamen Blocks
Name
Debugger-stabstring *
N-Wert
0, nicht definiert
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_EINCL 109 Ende der Include-Datei
Name
Quellenname der Include-Datei * *
N-Wert
Dateizeiger
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_ENTRY 141 Alternativeintrag
Name
*
N-Wert
0, nicht definiert
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_ESTAT 144 Ende des statischen Blocks
Name
.es
N-Wert
0, nicht definiert
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_EXT 2 Externes Symbol (externe Symbole für Binderverarbeitung definieren)
Name
Symbolname * *
N-Wert
Verlagerbare Adresse
n_SCNr
N_SCNUM oder N_UNDEF
In: Aux. Einstiegsspeichermedien
FUNKTION CSECT
C_FCN 101 Anfang oder Ende der Funktion
Name
.bf oder .ef
N-Wert
Verlagerbare Adresse
n_SCNr
N_SCNUM
In: Aux. Einstiegsspeichermedien
BLOCK
C_FILE 103 Quellendateiname und Compilerinformationen
Name
.file oder Quellendateiname (wenn keine Zusatzeinträge vorhanden sind) * *
N-Wert
Symboltabellenindex
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
DATEI
C_FUN 142 Funktion oder Prozedur
Name
Debugger-stabstring *
N-Wert
Offset innerhalb des enthaltenden csect
n_SCNr
N_ABS
In: Aux. Einstiegsspeichermedien
C_GSYM 128 Globale Variable
Name
Debugger-stabstring *
N-Wert
0, nicht definiert
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_GTLS 145 Globale Thread-lokale Variable
Name
Debugger-stabstring *
N-Wert
0, nicht definiert
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_HIDEXT 107 Nicht benanntes externes Symbol
Name
Symbolname oder Null * *
N-Wert
Verlagerbare Adresse
n_SCNr
N_SCNUM
In: Aux. Einstiegsspeichermedien
FUNKTION CSECT
C_INFO 100 Referenz für Kommentarabschnitt
Name
Info Name Identifier oder null * *
N-Wert
Offset im Kommentarabschnitt
n_SCNr
N_SCNUM
In: Aux. Einstiegsspeichermedien
C_LSYM 129 Automatische Variable im Stack zugeordnet
Name
Debugger-stabstring *
N-Wert
Offset relativ zum Stack-Frame
n_SCNr
N_ABS
In: Aux. Einstiegsspeichermedien
C_NULL 0 Symboltabelleneintrag zum Löschen markiert.
Name
N-Wert
0x00DE1E00
n_SCNr
In: Aux. Einstiegsspeichermedien
Beliebig
C_PSYM 130 Argument für Subroutine im Stack zugeordnet
Name
Debugger-stabstring *
N-Wert
Offset relativ zum Stack-Frame
n_SCNr
N_ABS
In: Aux. Einstiegsspeichermedien
C_RPSYM 132 Im Register gespeichertes Argument für Funktion oder Prozedur
Name
Debugger-stabstring *
N-Wert
Registernummer
n_SCNr
N_ABS
In: Aux. Einstiegsspeichermedien
C_RSYM 131 Registervariable
Name
Debugger-stabstring *
N-Wert
Registernummer
n_SCNr
N_ABS
In: Aux. Einstiegsspeichermedien
C_STAT 3 Statisches Symbol (Unbekannt. Einige Compiler generieren diese Symbole in der Symboltabelle, um die Größe der.text,.dataund.bssAbschnitte. Nicht verwendet oder durch Bindemittel konserviert.)
Name
Symbolname * *
N-Wert
Verlagerbare Adresse
n_SCNr
N_SCNUM
In: Aux. Einstiegsspeichermedien
Abschnitt
C_STSYM 133 Statisch zugeordnetes Symbol
Name
Debugger-stabstring *
N-Wert
Offset innerhalb csect
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_STTLS 146 Statischer Thread-lokale Variable
Name
Debugger-stabstring *
N-Wert
0, nicht definiert
n_SCNr
N_DEBUG
In: Aux. Einstiegsspeichermedien
C_TCSYM 134 Reserviert
Name
Debugger-stabstring *
N-Wert
n_SCNr
In: Aux. Einstiegsspeichermedien
C_WEAKEXT 111 Schwache externe Symbole (schwache externe Symbole für Binderverarbeitung definieren)
Name
Symbolname * *
N-Wert
Verlagerbare Adresse
n_SCNr
N_SCNUM oder N_UNDEF
In: Aux. Einstiegsspeichermedien
FUNKTION CSECT
Hinweis:
  1. *Bei ausgeschriebenen Namenn_offsetWert ist ein Offset in die.debugein.
  2. ** Bei ausgeschriebenen Namenn_offsetvalue ist ein Offset in der Zeichenfolgetabelle.

Speicherklassen nach Verwendung und Symbolwertklassifizierung

Im Folgenden sind die Speicherklassen aufgeführt, die vom Binder verwendet und verlagert wurden. Die Symbolwerte (n_value) sind Adressen.

Klasse Beschreibung
C_EXT Gibt ein externes oder globales Symbol an
C_WEAKEXT Gibt ein externes oder globales Symbol mit schwacher Bindung an
C_HIDEXT Gibt ein internes Symbol an
C_BLOCK Gibt den Anfang oder das Ende eines inneren Blocks an (.bboder.eb)
C_FCN Gibt den Anfang oder das Ende einer Funktion an (.bfoder.ef(SCHREIBGESCHÜTZT)
C_STAT Gibt ein statisches Symbol an (in statics csect enthalten).

Nachfolgend sind Speicherklassen aufgeführt, die vom Binder und symbolischen Debugger oder von anderen Dienstprogrammen für den Dateigeltungsbereich und den Dateizugriff verwendet werden:

Klasse Beschreibung
C_DATEI Gibt den Namen der Quellendatei an. Dern_valueenthält den Symbolindex des nächsten Dateieintrags. Dern_nameFeld ist der Name der Datei.
C_BINCL Gibt den Anfang der Kopfdatendatei an. Dern_valueFeld ist die relative Position des Zeilennummernbyte in der Objektdatei zur ersten Zeilennummer der Include-Datei.
C_EINCL Gibt das Ende der Kopfdatendatei an. Dern_valueFeld ist die relative Byteadresse der Zeilennummer in der Objektdatei bis zur letzten Zeilennummer aus der Include-Datei.
c_info Gibt die Position einer Zeichenfolge im Abschnitt comment an. Dern_valuefield ist der Offset zu einer Bytefolge im angegebenen Abschnitt STYP_INFO . Der Zeichenfolge geht ein 4-Byte-Zeichen voraus.lengtherlaubt. Dern_nameFeld wird vom Binder beibehalten. Ein anwendungsdefinierter eindeutiger Name in diesem Feld kann verwendet werden, um den Zugriff nur auf die Kommentarabschnittszeichenfolgen zu filtern, die für die Anwendung bestimmt sind.
C_ZWERG Gibt den Abschnitt DWARF an, der für das aktuelle Symbol C_FILE gilt. Dern_valueFeld enthält den Offset mit dem Abschnitt zu dem Teil des Abschnitts, der durch dieses Symbol dargestellt wird. Dern_scnlenFeld im Zusatzeintrag SECT enthält die Länge des Abschnitts, der durch dieses Symbol dargestellt wird.

Im Folgenden sind die Speicherklassen aufgeführt, die nur für das symbolische Debugging vorhanden sind:

Klasse Beschreibung
C_BPROM Gibt den Anfang eines allgemeinen Blocks an Dern_valueFeld ist bedeutungslos; der Name ist der Name des allgemeinen Blocks.
C_ECOML Gibt ein lokales Member eines allgemeinen Blocks an Dern_valueFeld ist Byte-Offset innerhalb des gemeinsamen Blocks.
C_ECOMM Gibt das Ende eines allgemeinen Blocks an. Dern_valueFeld ist bedeutungslos.
C_BSTAT Gibt den Anfang eines statischen Blocks an Dern_valueFeld ist der Symboltabellenindex des csect mit den statischen Symbolen; der Name ist .bs.
C_ESTAT Gibt das Ende eines statischen Blocks an. Dern_valueFeld ist bedeutungslos; der Name ist .es.
C_DECL Gibt eine Deklaration des Objekts an (Typendeklarationen) Dern_valueFeld ist nicht definiert
C_ENTRY Gibt einen alternativen Eintrag (FORTRAN) an und hat ein entsprechendes Symbol C_EXT oder C_WEAKEXT . Dern_valueFeld ist nicht definiert
C_FUN Gibt eine Funktion oder Prozedur an Kann über ein entsprechendes Symbol C_EXT oder C_WEAKEXT verfügen. Dern_valueFeld ist Byte-Offset innerhalb des übergeordneten csect.
C_GSYM Gibt eine globale Variable an und hat ein entsprechendes Symbol C_EXT oder C_WEAKEXT . Dern_valueFeld ist nicht definiert
C_LSYM Gibt eine auf dem Stack zugeordnete automatische Variable an. Dern_valueFeld ist Byte-Offset relativ zum Stack-Frame (plattformabhängig).
C_PSYM Gibt ein Argument für eine Subroutine an, die im Stack zugeordnet ist. Dern_valueFeld ist relative Byteadresse relativ zum Stack-Frame (plattformabhängig).
C_RSYM Gibt eine Registervariable an Dern_valueFeld ist die Registernummer.
C_RPSYM Gibt ein Argument für eine Funktion oder Prozedur an, die in einem Register gespeichert ist. Dern_valueFeld ist die Registernummer, in der das Argument gespeichert wird.
C_STSYM Gibt ein statisch zugeordnetes Symbol an Dern_valueFeld ist Byte-Offset innerhalb des csect, auf den durch den Eintrag C_BSTAT verwiesen wird.
C_GTLS Gibt eine globale threadlokale Variable an und folgt auf ein Symbol C_EXT oder C_WEAKEXT mit demselben Namen. Dern_valueFeld ist nicht definiert
C_STTLS Gibt eine statische threadlokale Variable an und folgt dem Symbol C_HIDEXT mit demselben Namen. Dern_valueFeld ist nicht definiert

Allgemeine Informationen zum XCOFF-Dateiformat finden Sie unter "XCOFF-Objektdateiformat" . Weitere Informationen zur Symboltabelle finden Sie unter "Symboltabelleninformationen" .

Informationen zum Debugging finden Sie im Abschnitt 'Debug' .

Zeichenfolgetabelle

In XCOFF32enthält die Zeichenfolgetabelle die Namen von Symbolen, die länger als 8 Byte sind. In XCOFF64enthält die Zeichenfolgetabelle die Namen aller Symbole. Wenn die Zeichenfolgetabelle vorhanden ist, enthalten die ersten 4 Byte die Länge (in Byte) der Zeichenfolgetabelle einschließlich der Länge dieses Längenfelds. Der Rest der Tabelle ist eine Folge von auf null endenden ASCII-Zeichenfolgen. Wenn dasn_zeroesFeld im Symboltabelleneintrag ist 0, dann wird dien_offsetgibt die relative Byteadresse in der Zeichenfolgetabelle des Namens des Symbols an.

Wenn eine Zeichenfolgetabelle nicht verwendet wird, kann sie vollständig weggelassen werden oder es kann eine Zeichenfolgetabelle verwendet werden, die nur aus dem Längenfeld (mit dem Wert 0 oder 4) besteht. Der Wert 4 ist vorzuziehen. Die folgende Tabelle zeigt die Organisation der Zeichenfolgetabelle.

Tabelle 23. Zeichenfolgetabellenorganisation
Aufrechnung Länge in Byte Beschreibung
0 4 Länge der Zeichenfolgetabelle.
4 n Symbolnamenszeichenfolge, auf null endend.
    Das Feld wird für jeden Symbolnamen wiederholt.

Allgemeine Informationen zum XCOFF -Dateiformat finden Sie unter "XCOFF Object File Format" .

dbx-Stabstrings

Der Debugabschnitt enthält den symbolischen Debugger stabstrings (Symboltabellenzeichenfolgen). Sie wird von den Compilern und Assemblern generiert. Es stellt Symbolattributinformationen für die Verwendung durch den symbolischen Debugger bereit.

Eine allgemeine Beschreibung finden Sie im Abschnitt "Debug" .

Stabstring-Terminalsymbole

In der stabstring-Grammatik gibt es fünf Typen von Terminalsymbolen, die in Großbuchstaben geschrieben werden. Diese Symbole werden durch die regulären Ausdrücke in der folgenden Liste beschrieben:
Hinweis: [] (eckige Klammern) stehen für eine Instanz, [] * (eckige Stern) für null oder mehr Instanzen, [] + (eckige Klammern Pluszeichen) für eine oder mehrere Instanzen, () (runde Klammern) bezeichnen null oder eine Instanz, .* (Punktstern) steht für eine Folge von null oder mehr Byte und | (Pipe) für Alternativen.
Symbol Regulärer Ausdruck
Name [ ^ ;: ' "] (Ein Name besteht aus einer beliebigen nicht leeren Gruppe von Zeichen mit Ausnahme von ;: ' oder ".)
string '.*' | ".*", wobei \", \'oder \\ innerhalb der Zeichenfolge verwendet werden können

Innerhalb einer Zeichenfolge kann der Backslash (\) eine besondere Bedeutung haben. Wenn das Zeichen nach \ ein anderes \ ist, wird einer der umgekehrten Schrägstriche ignoriert. Wenn das nächste Zeichen das für die aktuelle Zeichenfolge verwendete Anführungszeichen ist, wird die Zeichenfolge so interpretiert, dass sie ein eingebettetes Anführungszeichen enthält. Andernfalls wird das Zeichen \ wörtlich interpretiert. Wenn das abschließende Anführungszeichen jedoch das letzte Zeichen in der stabstring ist und ein \ unmittelbar vor dem Anführungszeichen steht, wird das \ wörtlich interpretiert. Diese Verwendung wird nicht empfohlen.

\ darf nur in den folgenden Fällen in Anführungszeichen gesetzt werden:

  • Das Zeichen \ ist das letzte Zeichen in der Zeichenfolge (damit das abschließende Anführungszeichen nicht mit Escapezeichen versehen wird).
  • Auf das Zeichen \ folgt das aktuelle Anführungszeichen.
  • Auf \ folgt ein weiterer \.

Ein Anführungszeichen mit Escapezeichen ist nur erforderlich, wenn eine einzelne Zeichenfolge sowohl ein einfaches Anführungszeichen als auch ein Anführungszeichen enthält. Andernfalls muss die Zeichenfolge in Anführungszeichen gesetzt werden, wenn sie nicht in den Zeichenfolgen enthalten ist.

Eine Zeichenfolge kann eingebettete Nullzeichen enthalten, sodass Dienstprogramme, die stabstrings verarbeiten, das Längenfeld verwenden müssen, um die Länge einer stabstring zu bestimmen.

INTEGER (-) [0-9] +
HEXINTEGER [0-9A-F] +

Die Hexadezimalziffern A-F müssen in Großbuchstaben angegeben werden.

Tatsächlich [ H | D |DD]([ +- ][ 0 -9 ]+(. )[ 0 -9 ]*([ eEqQ ]( +- )[ 0 -9 ]+) | ( +- ) INF | QNAN | SNAN )

Stabstring-Grammatik

REALs können Leerzeichen vorangestellt werden und STRINGs können beliebige Zeichen enthalten, einschließlich Null und Leerzeichen. Andernfalls enthält eine stabstring-Zeichenfolge keine Null-oder Leerzeichen.

Lange Tabellenzeichenfolgen können zur einfacheren Handhabung auf mehrere Symboltabelleneinträge aufgeteilt werden. In der stabstring-Grammatik gibt ein # (Nummernzeichen) einen Punkt an, an dem eine stabstring fortgesetzt werden kann. Eine Fortsetzung wird durch die Verwendung des? (Fragezeichen) oder \ als letztes Zeichen in der Zeichenfolge. Der nächste Teil der Tabellenzeichenfolge ist der Name des nächsten Symboltabelleneintrags. Wenn eine Alternative für eine Produktion leer ist, zeigt die Grammatik das Schlüsselwort/*EMPTY*/.

Die folgende Liste enthält die stabstring-Grammatik:

Stabstring:
Basisstruktur von stabstring:
NAME: Klasse
Name des Objekts gefolgt von Objektklassifikation
:Klasse
Nicht benannte Objektklassifikation.
Klasse:
Objektklassifikationen:
c = Konstante ;
Konstantenobjekt
NamedType
Benutzerdefinierte Typen und Tags
Parameter
Argument für Unterprogramm
Prozedur
Unterprogrammdeklaration
Variable
Variable im Programm
Kennsatz
Objekt beschriften.
Konstante:
Konstantendeklarationen
b OrdValue
Boolesche Konstante
OrdValue
Zeichenkonstante
e TypeID, OrdValue
Aufzählungskonstante
i GANZZAHL
Ganzzahlige Konstante
REAL
Dezimale oder binäre Gleitkommakonstante
s ZEICHENFOLGE
Zeichenfolgekonstante
C REAL, REAL
Komplexe Konstante
S TypeID, NumElements, NumBits, BitPattern
Konstante festlegen.
OrdValue:
Zugeordneter numerischer Wert: INTEGER
NumElements:
Anzahl der Elemente in der Gruppe: INTEGER
NumBits:
Anzahl der Bits im Element: INTEGER
NumBytes:
Anzahl Byte im Element: INTEGER
BitPattern:
Hexadezimale Darstellung, bis zu 32 Byte: HEXINTEGER
NamedType:
Benutzerdefinierte Typen und Tags:
TypeID
Benutzerdefinierter Typ (TYPE oder typedef), mit Ausnahme derjenigen, die für T TypeID gültig sind
T TypeID
Struct-, union-, class-oder enumeration-Tag
Parameter:
Argument für Prozedur oder Funktion:
TypeID
Nach Referenz im allgemeinen Register übergeben
p TypeID
Übergeben nach Wert im Stack
v TypeID
Nach Referenz im Stack übergeben
C TypeID
Konstante, nach Wert im Stack übergeben
D TypeID
Nach Wert im Gleitkommaregister übergeben
R TypeID
Nach Wert im allgemeinen Register übergeben
X TypeID
Nach Wert im Vektorregister übergeben
Vorgehensweise:
Prozedur-oder Funktionsdeklaration:
Proz
Prozedur auf aktueller Scoping-Stufe
Proc , NAME: NAME
Prozedur mit dem Namen 1. NAME, lokal für 2. NAME, wobei 2. NAME sich vom aktuellen Geltungsbereich unterscheidet.
Variable:
Variable im Programm:
TypeID
Lokale (automatische) Variable des Typs TypeID
d TypeID
Variable Registervariable vom Typ TypeID
hTypeID
Statische threadlokale Variable des Typs TypeID
r TypeID
Registriervariable des Typs TypeID
x TypeID
Vektorregistervariable des Typs TypeID
G TypeID
Globale (externe) Variable des Typs TypeID
H TypeID
Globale (externe) Threadlokale Variable des Typs TypeID
S TypeID
Modulvariable des Typs TypeID (C statisch global)
Version TypeID
Eigene Variable des Typs TypeID (C statisch lokal)
Y
Zeigervariable FORTRAN
Z TypeID NAME
FORTRAN, Pointee-Variable
Bezeichnung:
Bezeichnung:
L
Bezeichnungsname.
Prozedur:
Verschiedene Arten von Funktionen und Prozeduren:
f TypeID
Private Funktion des Typs TypeID
g TypeID
Generische Funktion (FORTRAN)
m TypeID
Modul (Modula-2, ext. Pascal)
J TypeID
Interne Funktion des Typs TypeID
F TypeID
Externe Funktion des Typs TypeID
I
(Kapital i) Internes Verfahren
P
Externe Prozedur
Q
Privates Verfahren
TypeID:
Typdeklarationen und Kennungen:
INTEGER
Typennummer des zuvor definierten Typs
INTEGER = TypeDef
Neue Typennummer, beschrieben von TypeDef
INTEGER = TypeAttrs TypeDef
Neuer Typ mit speziellen Typattributen
TypeAttrs:
@ TypeAttrList ;
Hinweis: Typattribute (TypeAttrs) sind zusätzliche Informationen, die einem Typ zugeordnet sind, wie z. B. Ausrichtungseinschränkungen oder Zeigerprüfungssemantik. Das Programm dbx erkennt nur das Attribut size und das Attribut packed . Das Attribut size gibt die Gesamtgröße eines aufgefüllte Elements in einem Array an. Das Attribut packed gibt an, dass ein Typ ein gepackter Typ ist. Alle anderen Attribute werden von dbxignoriert.
TypeAttrList:
Liste der Attribute des Sondertyps:
TypeAttrList ;
@ TypeAttr TypeAttr
TypeAttr:
Spezielle Typattribute:
INTEGER
Begrenzung ausrichten
s INTEGER
Größe in Bit
p GANZZAHL
Zeigerklasse (zur Überprüfung)
P
Gepackter Typ
Sonstige
Alles, was nicht abgedeckt ist, wird vollständig übersprungen
TypeDef:
Basisbeschreibungen von Objekten
INTEGER
Typennummer eines zuvor definierten Typs
b TypeID; # NumBytes
Pascal-Space-Typ
TypeID ; # NumBits
Komplexer Typ TypeID
d TypeID
Datei des Typs TypeID
e EnumSpec;
Aufzählungstyp (Standardgröße, 32 Bit)
g TypeID; # NumBits
Gleitkommatyp der Größe NumBits
D TypeID; # NumBits
Dezimaler Gleitkommatyp der Größe NumBits

Bei i -Typen bezieht sich ModuleName auf das Modul Modula-2 , aus dem es importiert wird.

i NAME: NAME;
Importierter Typ Modulname:Name
i NAME: NAME, TypeID ;
Importierter Typ ModuleName:Name des Typs TypeID
k TypeID
C + + -Konstantentyp
l; #
Verwendung-ist-Index; spezifisch für COBOL
m OptVBaseSpec OptMultiBaseSpec TypeID: TypeID: TypeID;
C + + -Zeiger auf Mitgliedstyp; die erste TypeID ist der Mitgliedstyp; die zweite ist der Typ der Klasse
n TypeID; # NumBytes
Zeichenfolgedatentyp, wobei die maximale Zeichenfolgelänge durch NumBytes angegeben wird
o NAME;
Nicht transparenter Typ
o NAME, TypeID
Nicht transparenter Typ mit Definition von TypeID
w TypeID
Breitzeichen
z TypeID; # NumBytes
Pascal-gstring-Typ
Nutzung
COBOL Bild
I NumBytes # PicSize
(Großbuchstabe i) Index ist Typ; spezifisch für COBOL
K CobolFileDesc;
COBOL Dateideskriptor
M TypeID ; # Gebunden
Typ mit mehreren Instanzen von ' TypeID ' mit einer durch 'Gebunden' angegebenen Länge
N
Pascal Zeichenfolgezeiger
S TypeID
Typgruppe TypeID
* TypeID
Zeiger des Typs TypeID
& TypeID
C + + -Referenztyp
Version TypeID
Flüchtiger C + + -Typ
Z
C + + -Parametertyp mit Auslassungspunkten
Array-Teilbereich ProcedureType
Für Funktionstypen anstelle von Deklarationen
Datensatz
Datensatz-, Struktur-, Union-oder Gruppentypen
EnumSpec:
Liste der aufgezählten Skalare:
EnumList
Aufzählungstyp (C und andere Sprachen)
TypeID : EnumList
C + + -Aufzählungstyp mit sich wiederholendem ganzzahligen Typ
EnumList: Aufzählung
EnumList Aufzählung
Aufzählung:
Beschreibung des skalaren Aufzählungswerts: NAME : OrdValue , #
Array:
Array-Beschreibungen:
TypeID # TypeID
Array; FirstTypeID ist der Index-Typ
Eine TypeID
Array von TypeID öffnen
D INTEGER,TypeID
N-dimensionale dynamische Feldgruppe von TypeID
E INTEGER, TypeID
N-dimensionale dynamische Subarray von TypeID
O INTEGER, TypeID
Neues geöffnetes Array
P TypeID; # TypeID
Gepacktes Array
Unterbereich:
Unterbereichsbeschreibungen:
r TypeID ; # Gebunden ; # Gebunden
Unterbereichstyp (z. B. char, int, \,), Unter-und Obergrenze
Gebunden
Beschreibung der Ober-und Untergrenze
INTEGER
Konstante gebunden
Boundtyp INTEGER
Variable oder dynamische Bindung; Wert ist Adresse oder Offset zur Bindung
J
Grenze ist unbestimmbar (keine Grenzen)
Grenztyp:
Anpassbare Unterbereichsbeschreibungen:
A
Gebunden durch Referenz im Stack übergeben
S
Gebunden nach Wert im statischen Speicher
T
Gebunden durch Wert im Stack übergeben
a
Gebunden durch Referenz im Register übergeben
t
Gebunden durch Wert im Register übergeben
ProcedureType:
Funktionsvariablen (nur 1. Typ C; andere Modula-2 & Pascal)
f TypeID;
Funktionsrückgabetyp TypeID
f TypeID, NumParams; TParamList;
Funktion von N Parametern, die Typ TypeID zurückgeben
p NumParams; TParamList;
Prozedur für N Parameter
R NumParams; NamedTParamList
Pascal, Subroutinenparameter
F TypeID, NumParams; NamedTParamList;
Pascal, Funktionsparameter
NumParams:
Anzahl Parameter in Routine:

GANZE ZAHL.

TParamList:
Typen von Parametern in der Funktionsvariablen Modula-2 :
Parameter
Typ des Parameters und übergehende Methode
Parameter:
Typ und Methode übergeben

TypeID , PassBy ; #

NamedTParamList:
Typen von Parametern in Pascal-Routinenvariable:/*EMPTY*/ NamedTPList
NamedTPList:
NamedTParam NamedTPList NamedTParam
NamedTParam:
Benannter Typ und übergebene Methode: Name : TypeID , PassBy InitBody ; # : TypeID , PassBy InitBody ; # Nicht benannter Parameter
Datensatz:
Typen von Strukturdeklarationen:
  • s NumBytes # FieldList ;
  • Struktur-oder Datensatzdefinition
  • u NumBytes # FieldList ;
  • Union
  • v NumBytes # FieldListVariantPart ;
  • Variantendatensatz
  • Y NumBytes ClassKey OptPBV OptBaseSpecList ( ExtendedFieldListOptNameResolutionList;
  • C++-Klasse
  • G Neudefinition, n NumBits # FieldList ;
  • COBOL Gruppe ohne Bedingungen

Gn NumBitsFieldList ;

  • G Neudefinition, c NumBits # CondFieldList;
  • COBOL Gruppe mit Bedingungen

Gc NumBits CondFieldList;

OptVBaseSpec:
v
ptr-to-mem-Klasse hat virtuelle Basen.
/*LEER*/
Klasse hat keine virtuellen Basen.
OptMultiBaseSpec:
m
Die Klasse ist mehrfachbasiert.
/*LEER*/
Die Klasse ist nicht multibasiert.
OptPBV:
V
Klasse wird immer nach Wert übergeben.
/*LEER*/
Klasse wird nie nach Wert übergeben.
ClassKey:
s
Struct
u
Datentypvariable
c
Klasse
OptBaseSpecList:
/*LEER*/ BaseSpecList
BaseSpecList:
BaseSpec BaseSpecList , BaseSpec
BaseSpec:
VirtualAccessSpec BaseClassOffset : ClassTypeID
BaseClassOffset:
INTEGER
Basisdatensatz-Offset in Byte
ClassTypeID:
TypeID
ID des Basisklassentyps
VirtualAccessSpec:
v AccessSpec
Virtuell
v
Virtuell

AccessSpec

/*LEER*/

GenSpec:
c
Vom Compiler generiert

/*LEER*/

AccessSpec:
i #
Nicht öffentlich
o #
Protected
u #
Öffentliche
AnonSpec:
a
Anonymes Gewerkschaftsmitglied

/*LEER*/

VirtualSpec:
v p
Rein virtuell
v
Virtuell
/*LEER*/
ExtendedFieldList:
ExtendedFieldExtendedFieldList /*LEER*/
ExtendedField:
GenSpec AccessSpec AnonSpec DataMember GenSpec VirtualSpec AccessSpec OptVirtualFuncIndex MemberFunction AccessSpec AnonSpec NestedClass AnonSpec FriendClass AnonSpec FriendFunction
DataMember:
MemberAttrs : Feld ;
MemberAttrs:
IsStatic IsVtblPtr IsVBasePtr
IsStatic:
/*LEER*/
s
Das Member ist statisch.
IsVtblPtr:
/*LEER*/
p INTEGER NAME
Mitglied ist vtbl-Zeiger; NAME ist der externe Name der v-Tabelle.
IsVBasePtr:
/*LEER*/
b
Mitglied ist vbase-Zeiger.
r
Mitglied ist vbase-Selbstzeiger.
Memberfunktion:
[ FuncType MemberFuncAttrs: NAME : TypeID; #
MemberFuncAttrs:
IsStatic IsInline IsConst IsVolatile
IsInline:
/*LEER*/
i
Inline-Funktion
IsConst:
/*LEER*/
k
const (Memberfunktion)
IsVolatile:
/*LEER*/
V
Funktion für flüchtige Member
NestedClass:
N TypeID ; #
FriendClass:
( TypeID ; #
FriendFunction:
] NAME : TypeID ; #
OptVirtualFuncIndex:
/*EMPTY*/GANZZAHL
FuncType:
f
Member-Funktion
c
Konstruktor
d
Destruktor
InitBody:
STRING/*EMPTY*/
OptNameResolutionList:
/*LEER*/ ) NameResolutionList
NameResolutionList: NameResolution
NameResolution , NameResolutionList
NameResolution: MemberName : ClassTypeID
Der Name wird vom Compiler aufgelöst.
Mitgliedsname:
Der Name ist mehrdeutig.
MemberName:
Name
FieldList:
Strukturinhaltsbeschreibungen:
Feld
/*LEER*/
FeldFieldList
Mitglied des Datensatzes oder der Union.
Feld:
Beschreibung des Strukturteildateityps:

NAME : TypeID , BitOffset , NumBits ; #

VariantPart:
Variantenabschnitt des Variantendatensatzes:
[ VTag VFieldList ]
Beschreibung der Variante
VTag:
Datensatzvariantentag:
( Feld
Element des Variantendatensatzes
(NAME:; #
Name des Variantenschlüssels
VFieldList:
Beschreibung des Inhalts von Variantendatensätzen:
VList VFieldList VList
Element des Variantendatensatzes
VList:
Felder für Variantendatensätze:
VField VField VariantPart
Element des Variantendatensatzes
VFeld:
Beschreibung des Elementtyps des Variantendatensatzes:
( VRangeList : FieldList
Variante mit Feldliste
VRangeList:
Liste der Variantenfeldbeschriftungen:
VRange VRangeList, VRange
Element des Variantendatensatzes
VRange:
Beschreibung der Variantenfelder
b OrdValue
Boolesche Variante
OrdValue
Zeichenvariante
e TypeID, OrdValue
Aufzählungsvariante
i GANZZAHL
Ganzzahlige Variante
r TypeID ; Gebunden : Gebunden
Unterbereichsvariante
CondFieldList:
Conditions,#FieldList FeldListe#;
Bedingungen:
/*Empty*/ Bedingung
BitOffset:
Offset in Bit vom Anfang der Struktur: INTEGER
Syntax:
Cobol-Verwendungsbeschreibung: PICStorageType NumBits , EditDescription , PicSize ; Redefinition , PICStorageType NumBits , EditDescription , PicSize ; PICStorageType NumBits , EditDescription , PicSize , # Condition ; Redefinition , PICStorageType NumBits , EditDescription , PicSize , # Bedingung ;
Neudefinition:
COBOL-Neudefinition: r NAME
PICStorageType:
Cobol PICTURE-Typen:
a
Alphabetisch
b
Alphabetisch, bearbeitet
c
Alphanumerisch
d
Alphanumerisch, bearbeitet
e
Numerisch, mit Vorzeichen, nachgestellt, eingeschlossen
f
Numerisch, signiert, abschließend, getrennt
g
Numerisch, mit Vorzeichen, führend, eingeschlossen
h
Numerisch, mit Vorzeichen, führend, getrennt
i
Numerisch, mit Vorzeichen, Standardwert, Firma
j
Numerisch, ohne Vorzeichen, Standardwert, comp
k
Numerisch, gepackt, dezimal, mit Vorzeichen
l
Numerisch, gepackt, dezimal, ohne Vorzeichen
m
Numerisch, ohne Vorzeichen, comp-x
n
Numerisch, ohne Vorzeichen, comp-5
o
Numerisch, signiert, comp-5
p
Numerisch, editiert
q
Numerisch, ohne Vorzeichen
s
Indexiertes Element
t
Zeiger
EditDescription:
COBOL-Editierbeschreibung:
ZEICHENFOLGE
Zeichen in einem Alpha-PIC bearbeiten
INTEGER
Position des Dezimalzeichens in einer numerischen PIC
PicSize:
Länge der COBOL-Beschreibung:
INTEGER
Anzahl wiederholter '9' in numerischer Klausel oder Länge des Editierformats für editierte numerische Zeichen
Bedingung:
Beschreibungen bedingter Variablen:

NAME : INTEGER = q ConditionType, ValueList; #

ConditionType:
Bedingungsbeschreibungen:

ConditionPrimitive , KanjiChar

ConditionPrimitive:
Primitiver Typ der Bedingung:
n Zeichen DecimalSite
Numerisch bedingt
a
Alphanumerisch bedingt
f
Figurativ bedingt
Vorzeichen:
Für Typen mit explizitem Vorzeichen:
+
Positiv
-
Negativ
[^+-]
Nicht angegeben
DecimalSite:
Anzahl der linken Stellen für impliziertes Dezimalzeichen:

INTEGER

KanjiChar:
0 nur, wenn Kanji-Zeichen im Wert: INTEGER
ValueList
Werte, die Bedingungsnamen zugeordnet sind
Wert ValueList Wert
Wert
Den Bedingungsnamen zugeordnete Werte:
INTEGER: ArbitraryCharacters #
Ganze Zahl gibt Länge der Zeichenfolge an
CobolFileDesc:
COBOL Dateibeschreibung: Organisation AccessMethod NumBytes
Unternehmen:
COBOL Dateibeschreibung Organisation:
i
Indiziert
l
Zeile sequenziell
r
Relativ
s
Sequenziell
AccessMethod:
COBOL Dateibeschreibung Zugriffsmethode:
d
Dynamisch
o
Sortieren
r
Zufall
s
Sequenziell
PassBy:
Parameterübergabe:
INTEGER
0 = nach Referenz übergeben; 1 = nach Wert übergeben