Exceptions werden von vielen modernen Programmiersprachen zur Fehlerbehandlung eingesetzt. Das Werfen und Fangen von Exceptions erfordert das Zusammenspiel verschiedener Komponenten, sowohl im Compiler als auch in der Laufzeitbibliothek. In der Zwischensprache des Compilers muss sowohl der normale Steuerfluss als auch der Exception-Steuerfluss korrekt abgebildet werden. Weiterhin müssen spezielle Codebereiche, sogenannte Landing-Pads, erzeugt werden, die im Exception-Fall ausgeführt werden. Landing-Pads entsprechen in etwa den catch-Blöcken im Quellprogramm. Während der Code-Erzeugung müssen zusätzliche Informationen in den Activation-Records von Funktionen hinterlegt werden, die später von der Laufzeitbibliothek benötigt werden.
Der Compiler kann nicht wissen, wohin ein Programm beim Auslösen einer Exception verzweigen soll, da dies vom aktuellen Aufruf-Stack abhängt. Daher wird zur Laufzeit beim Werfen einer Exception eine Laufzeitbibliothek aktiv. Die Laufzeitbibliothek sucht einen passenden Exception-Handler und geht dafür der Reihe nach alle aktuell aktiven Funktionen auf dem Aufruf-Stack durch (sogenanntes Stack-Unwinding). Dafür werden die im Activation-Record hinterlegten Zusatz-Informationen benötigt.
In libFIRM und liboo, einer Hilfsbibliothek für objektorientierte Sprachkonstrukte, existieren bisher nur Ansätze zur Unterstützung von Exceptions. Ziel der Arbeit ist es, Zero-Cost-Exceptions in libFIRM/liboo zu implementieren. Die Eigenschaft von Zero-Cost-Exceptions ist, dass der generierte Code im Normalfall, also wenn keine Exception auftritt, kaum oder gar nicht langsamer läuft als Code, der Exceptions gar nicht beachtet. Die Implementierung soll zunächst in bytecode2firm, ein Java-Bytecode-Frontend für FIRM, integriert werden und damit getestet werden. Anschließend soll auch X10i, ein X10-Frontend für FIRM, so erweitert werden, dass Exceptions korrekt unterstützt werden.
Aufgabe:
- Sie implementieren Unterstützung für Zero-Cost-Exceptions in FIRM/liboo.
- Sie erweitern bytecode2firm, so dass Eingabeprogramme, die Exceptions verwenden, korrekt funktionieren.
- Sie erweitern X10i, so dass Eingabeprogramme, die Exceptions verwenden, korrekt funktionieren.
- Sie evaluieren die Laufzeitkosten von Exception-Unterstützung und stellen sicher, dass der generierte Code vergleichbare Performance mit Code ohne Exception-Unterstützung aufweist.
Voraussetzungen
- Programmierkenntnisse in C
- Kenntnisse in Compilerbau (z.B. Compilervorlesung) vorteilhaft
- Erfahrung mit libFIRM (z.B. aus Compilerpraktikum) vorteilhaft
Literatur
- Itanium C++ ABI zu Exceptions
- LLVM Exception Handling
- Libunwind
- FIRM
- libFIRM
- libOO
- Bytecode2firm
- X10i
Veröffentlichungen
Veröffentlichung |
Exception Support in Graph-Based Intermediate Representation |
Betreuer
Ehemalige Mitarbeiter |
---|
Dr.-Ing. Manuel Mohr |
Dipl.-Inform. Sebastian Buchwald |
Studenten
Ehemalige Studenten |
---|
Jonas Haag |