Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen RevisionVorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
software:deep:dev:crosscompiler:linker32 [2014-02-10 13:19] grafsoftware:deep:dev:crosscompiler:linker32 [2014-02-10 13:21] graf
Zeile 93: Zeile 93:
 Finally, the target image is put together. For each method of each class and for each constant block (one for each class, array or interface) a target segment is created and inserted into a list. Finally, the target image is put together. For each method of each class and for each constant block (one for each class, array or interface) a target segment is created and inserted into a list.
  
----- 
  
-===== Verwendung von index, offset und address der Klasse Item ===== 
-Die Felder //index//, //offset// und //address// der Klasse ''ch.ntb.inf.deep.classItems.Item'' werden, je nach dem was Item repräsentiert, anders verwendet. Die untenstehende Liste gibt einen Überblick, wann welches Feld wie verwendet wird. 
- 
-**Bemerkung:** Angaben in Eckigen Klammern bezeichnen den Typ. Beispiel: [Class] bedeutet das dieses Objekt vom Typ ''ch.ntb.inf.deep.classItems.Class'' ist. 
- 
-==== Klassen [Class] ==== 
-  * //index//: Wird verwendet, um Interfaces für Interfacemethoden zu nummerieren. 
-  * //offset//: Wird nicht verwendet, ist immer -1. 
-  * //address//: Die absolute Adresse des Typdescriptors (des Eintrags //size//). 
- 
-==== Arrays [Array] ==== 
-  * //index//: Wird nicht verwendet, ist immer -1. 
-  * //offset//: Offset des Typdescriptors im Segment. 
-  * //address//: Die absolute Adresse des Typdescriptors. 
- 
-==== Methoden [Method] ==== 
-  * //index//: Bei Instanzmethoden der Index der Methode in der Methodentabelle (beginnend bei 0). Bei Klassenmethoden ist //index// immer -1. -> Wird vom CFR gesetzt. 
-  * //offset//: Byteoffset der Methode ausgehend von der Startadresse des Codes der Klasse. 
-  * //address//: Absolute Adresse der Methode. 
- 
-==== Felder [DataItem] ==== 
-<box right 30% | IMPORTANT Konstante Referenzen> 
-**Achtung:** bei konstanten, statischen Referenzen ist das Const-Flag (dpfConst) __nicht__ gesetzt, da diese wie normale, nicht konstante statische Felder zu behandeln sind. Dies weil auf solche Felder ein einmaliger Zugriff aus dem Klassenkonstruktor stattfindet! 
- 
-**Beispiel:** 
-  static final Object o = new Object(); 
-</box> 
-  - **Klassen-Felder [DataItem]:** 
-    - Konstante Felder [NamedConst]: 
-      * //index//: Wird nicht verwendet, ist immer -1; 
-      * //offset//: Wird nicht verwendet, ist immer -1; 
-      * //address//: Wird nicht verwendet, ist immer -1; 
-    - Nicht konstante Felder [DataItem]: 
-      * //index//: Wird nicht verwendet, ist immer -1. 
-      * //offset//: Byteoffset des Feldes (beginnend bei 0 für das erste Feld). 
-      * //address//: Absolute Adresse des Feldes. 
-  - **Instanz-Felder [DataItem]:** 
-    * //index//: Wird nicht verwendet, ist immer -1; 
-    * //offset//: Byteoffset des Feldes beginnend bei 0 (inkl. Berücksichtung der Felder der Oberklassen). 
-    * //address//: Wird nicht verwendet, ist immer -1; 
- 
-==== Konstanten [Constant] ==== 
-  - **Zahlen [StdConstant]:** 
-    * //index//: Wenn die Konstante vom Typ //float// oder //double// ist, ist //index// der Index der Konstante im Konstantenpool. Ansonsten immer -1; 
-    * //offset//: Wenn die Konstante vom Typ //float// oder //double// ist, ist //offset// der Byteoffset der Konstante im Konstantenpool. Ansonsten immer -1; 
-    * //address//: Wenn es sich um eine Konstante vom Typ //float// oder //double// handelt, ist //address// die absolute Adresse der Konstante (direkt im Konstantenblock). Ansonsten immer -1. 
-  - **Stings [StringLiteral]:** 
-    * //index//: Wenn es sich bei der Konstante um einen String handelt, so wird in //index// der Index des Strings im Stringpool abgelegt. 
-    * //offset//: Wenn es sich bei der Konstante um einen String handelt, so wird in //offset// der Byteoffset des Strings im Stringpool abgelegt. 
-    * //address//: Absolute Adresse des konstanten Strings (direkt im Konstantenblock).