next up previous
Nächste Seite: Fehlerdatei und Fehlermeldungen Aufwärts: Dateiformate Vorherige Seite: Objektdatei

Symbol-/Referenzdatei

Die Symboldatei wird vom Compiler erzeugt und auch von diesem verwendet. Sie enthält in codierter Form alle wichtigen Angaben eines Definitionsmoduls.

Die ebenfalls vom Compiler erzeugte Referenzdatei wird in erster Linie vom Debugger verwendet. Sie enthält die vom Debugger benötigten Informationen über die Lage der Variablen im Speicher, sowie die Positionen der -Anweisungen innerhalb des Codes. Des weiteren greifen der Profiler und der Objekt-Decoder auf die Referenzdatei zu.


\begin{ebnf}{ReferenceFile}
\item[ReferenceFile]
{\ttREFFILE ModAnchor \{ModAnc...
...\}.} \\
,,{\ttlength}\lq\lq  zeigt die L\uml {a}nge der Zeichenkette an.
\end{ebnf}

Alle oben nicht ausdrücklich aufgeführten Symbole sind Zahlen, die nach einem speziellen, platzsparenden Verfahren kodiert sind. Dabei richtet sich die Anzahl der verwendeten Byte nicht nach dem möglichen Maximum, sondern nach dem effektiven Wert.

Zahlen im Bereich von -32 bis +31 werden in einem Byte kodiert. Dazu werden nur sechs Bit benötigt. Die höchstwertigen zwei Bit tragen so nicht zum Wert bei. Sie enthalten beide Null und geben somit an, dass die Zahl in einem Byte kodiert wurde.

Zahlen innerhalb des Bereichs von -16384 - -257 und 256 - 16383 werden in zwei Byte kodiert. Dazu werden 14 Bit benötigt, und die beiden verbleibenden höchstwertigen Bit geben wiederum das Format an. Sie haben den Wert 01 um anzugeben, dass es sich um eine Zahl handelt, die zwei Byte belegt.

Zahlen, die für ihre Darstellung 17 - 22 Bit benötigen, werden in drei Byte abgelegt. Die beiden höchstwertigen Bit haben den Wert 10 in Dualdarstellung.

Für alle anderen Zahlen wird im ersten Byte nur die Länge in Byte der Zahl abgelegt. Die Länge wird in den sechs niederwertigsten Bit des höchstwertigen Byte vermerkt. Die restlichen zwei Bit enthalten den Wert 11, um diese Art der Codierung zu identifizieren. Auf dieses erste Byte folgen soviele Byte wie verlangt.


\begin{example}
\begin{table}[h]
\begin{tabular}{rrl}
Zahl & Codierung (Hex) & C...
...C20ED4 & 1100 0010 0000 1110 1101 0100 \\
\end{tabular}\end{table}\end{example}

,,PCPos`` stellt davon eine Ausnahme dieser Codierung dar. Zahlen des Bereichs -32 - 31 werden nicht in einem einzigen Byte, sondern in 2 Byte codiert. So wird etwa die Zahl drei als C103 abgelegt.6.3 Auf diese Weise ist es möglich, einen ,,PC``-Block von den anderen Elementen der ,,ObjList`` zu unterscheiden, ohne dass ein zusätzliches Byte vor einem ,,PC``-Block stehen muss.

Alle Namen, die mit ,,Ref`` enden, stellen Referenzen auf Strukturen dar. Die Strukturen werden fortlaufend numeriert, wobei die Werte 1 bis 23 vordefinierten Typen entsprechen. Alle in der Symboldatei selbst auftretenden Strukturdefinitionen werden vom Wert 32 an aufsteigend numeriert. Wird eine Referenz auf eine solche Struktur benötigt, ist in der Symboldatei die Nummer der Struktur abgelegt. Beim Einlesen der Datei wird daraus ein Zeiger auf die entsprechende Struktur erzeugt. Die vordefinierten Strukturen sind in der Tabelle 6.2 angegeben.


Tabelle 6.2: Vordefinierte Strukturen
1 Undefiniert 13 BYTE
2 BOOLEAN 14 WORD
3 CHAR 15 LONDCARD
4 INTEGER 16 UniversalInteger
5 CARDINAL 17 UniversalReal
6 LONGINT 18 FFP
7 REAL 19 LONGSET
8 LONGREAL 20 SHORTCARD
9 BITSET 21 SHORTINT
10 PROC 22 BPTR
11 String 23 SHORTSET
12 ADDRESS    


Die Strukturen 1, 11, 16 und 17 werden nur intern gebraucht und stellen keine vordefinierten Typen dar.

Die Symboldatei stellt die Symboltabelle des Compilers dar. In ihr sind alle deklarierten Objekte -- Variablen, Typen, Prozeduren -- und deren Strukturen -- ARRAY, RECORD usw. -- abgelegt. Die gewählte Darstellung erlaubt eine effiziente Rekonstruktion der Symboltabelle beim Einlesen der Symboldatei.


next up previous
Nächste Seite: Fehlerdatei und Fehlermeldungen Aufwärts: Dateiformate Vorherige Seite: Objektdatei
Claudio Nieder 2000-11-12