Lazarus als IDE für LLVM (llvm-pascal)

Für Dinge rund um die Unterstützung des offizielen Lazarusprojekts, wie Übersetzungsabsprachen und anderem.

Re: Lazarus als IDE für LLVM (llvm-pascal)

Beitragvon mschnell » 9. Jan 2015, 12:05 Re: Lazarus als IDE für LLVM (llvm-pascal)

marcov hat geschrieben: Hieß früher Gimple

Off Topik:
Vielen Dank für den Hinweis !

Jetzt weiß ich endlich was der "Gimple Error" zu bedeuten hat, den mir der Compiler unter bestimmten Bedingungen (die meist irgendwie mit volatile-Definitionen zu tun haben) beim Compilieren eines 68K Programms auswirft und die - mangels Beschreibung, mit was der gnu Compiler da nicht klarkommt (während ein MRI-Compiler es übersetzt) - äußerst schwer zu beheben sind.

-Michael
Zuletzt geändert von mschnell am 9. Jan 2015, 13:08, insgesamt 1-mal geändert.
mschnell
 
Beiträge: 3226
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon MitjaStachowiak » 9. Jan 2015, 12:08 Re: Lazarus als IDE für LLVM (llvm-pascal)

lli sieht für mich jetzt nicht nach einer virtuellen Maschine aus. Kann es sein, dass die den LLVM-Code direkt in x86 übersetzen, ohne Optimierungen, und das dann auf der physischen CPU laufen lassen?
Weil dann könnte man ja durchaus auch DLLs laden...

Und was Debugging betrifft: LLVM übersetzt hier auch die Debugger-Befehle nach x86 und der Debugger muss dann direkt am ausführbaren Programm arbeiten?
Also er bekommt nicht vorgegaukelt, dass der LLVM-Code ausgeführt wird?
MitjaStachowiak
 
Beiträge: 336
Registriert: 15. Mai 2010, 12:46
CPU-Target: 64 bit
Nach oben

Beitragvon mschnell » 9. Jan 2015, 13:06 Re: Lazarus als IDE für LLVM (llvm-pascal)

mse hat geschrieben:http://llvm.org/docs/CommandGuide/lli.html

-> "executes it using a just-in-time compiler, if one is available for the current architecture, or an interpreter."

Klingt so als gäbe es einen Interpreter für jede Architektur, für die LLVM (native code compiler) verfügbar ist.

-Michael
mschnell
 
Beiträge: 3226
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon mse » 9. Jan 2015, 13:07 Re: Lazarus als IDE für LLVM (llvm-pascal)

MitjaStachowiak hat geschrieben:lli sieht für mich jetzt nicht nach einer virtuellen Maschine aus.

Wie kommst du darauf?
https://github.com/llvm-mirror/llvm/blo ... cution.cpp
Kann es sein, dass die den LLVM-Code direkt in x86 übersetzen, ohne Optimierungen, und das dann auf der physischen CPU laufen lassen?
Weil dann könnte man ja durchaus auch DLLs laden...

Falls für die entsprechende Plattform eine JIT Compiler Implementation zur Verfügung steht wird sie von lli verwendet.
Und was Debugging betrifft: LLVM übersetzt hier auch die Debugger-Befehle nach x86 und der Debugger muss dann direkt am ausführbaren Programm arbeiten?
Also er bekommt nicht vorgegaukelt, dass der LLVM-Code ausgeführt wird?

Meinst du LLVM Bitcode? Dafür gibt es so viel ich weiss keinen Debugger, bin mir aber nicht sicher.
mse
 
Beiträge: 1987
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon mschnell » 9. Jan 2015, 13:10 Re: Lazarus als IDE für LLVM (llvm-pascal)

MitjaStachowiak hat geschrieben:lli sieht für mich jetzt nicht nach einer virtuellen Maschine aus.


LLVM heißt doch "Low Level Virtual Machine"

-Michael
mschnell
 
Beiträge: 3226
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon MitjaStachowiak » 9. Jan 2015, 14:45 Re: Lazarus als IDE für LLVM (llvm-pascal)

LLVM heißt doch "Low Level Virtual Machine"

Ja, schon, aber ob diese virtuelle Maschine auch einen virtuellen Prozessor simuliert, wie bei Java, oder ob der LLVM-Bitcode immer per JIT-Compiler oder Interpreter in x86 übersetzt wird und dann auf der Physischen CPU läuft - das ist hier die Frage...

Ich dachte bislang eher an Letzteres, denn bei Java kann man ja nicht direkt auf externe DLLs zugreifen, außer die JRE bietet dafür eine spezielle Funktion.

lli interpretiert bzw. compiliert anscheinend nicht den Assembercode (LLVM IR), sondern tatsächlich die Maschinensprache. Innerhalb dieses Bitcodes muss es folglich auch Debuggerbefehle geben, die gdb dann lernen müsste, oder sogar schon kann (http://lldb.llvm.org/lldb-gdb.html). Wenn ich Mattias' Präsentation beim letzten Forumtreffen (http://mitjastachowiak.de?sonstiges/lazarusforumtreffen2014) richtig in Erinnerung habe, arbeitet man bei Freepascal bereits an einem eigenen Debugger.
MitjaStachowiak
 
Beiträge: 336
Registriert: 15. Mai 2010, 12:46
CPU-Target: 64 bit
Nach oben

Beitragvon mse » 9. Jan 2015, 15:25 Re: Lazarus als IDE für LLVM (llvm-pascal)

MitjaStachowiak hat geschrieben:
LLVM heißt doch "Low Level Virtual Machine"

Ja, schon, aber ob diese virtuelle Maschine auch einen virtuellen Prozessor simuliert, wie bei Java, oder ob der LLVM-Bitcode immer per JIT-Compiler oder Interpreter in x86 übersetzt wird und dann auf der Physischen CPU läuft - das ist hier die Frage...

Ich dachte bislang eher an Letzteres, denn bei Java kann man ja nicht direkt auf externe DLLs zugreifen, außer die JRE bietet dafür eine spezielle Funktion.

lli interpretiert bzw. compiliert anscheinend nicht den Assembercode (LLVM IR), sondern tatsächlich die Maschinensprache.

Nochmals: Wie kommst du darauf?
https://github.com/llvm-mirror/llvm/blo ... cution.cpp
Innerhalb dieses Bitcodes muss es folglich auch Debuggerbefehle geben, die gdb dann lernen müsste, oder sogar schon kann

Wie bereits geschrieben, die mittels Metadata an den Eingabecode gebundene Debuginformationen werden von llc in DWARF-Form in den Objektdateien abgelegt.
mse
 
Beiträge: 1987
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon MitjaStachowiak » 9. Jan 2015, 15:57 Re: Lazarus als IDE für LLVM (llvm-pascal)

... komme ich worauf? Dass LLVM keinen virtuellen Prozessor simuliert? Die Execution.cpp könnte auf den ersten Blick das eine oder andere machen...

Wenn ein virtueller Prozessor simuliert wird, würde doch der JIT-Compiler keinen Sinn machen, jedenfalls wenn ich das richtig verstehe und dieser nach x86, ARM, usw. compiliert. Weil wozu einen komplizierten Prozessor, wie x86 simulieren?
MitjaStachowiak
 
Beiträge: 336
Registriert: 15. Mai 2010, 12:46
CPU-Target: 64 bit
Nach oben

Beitragvon mse » 9. Jan 2015, 16:05 Re: Lazarus als IDE für LLVM (llvm-pascal)

Was verstehst du denn unter just-in-time Kompilierung? Die übliche Verwendung des Begriffes ist etwa "übersetze in Maschinencode sobald die Routine gebraucht wird und führe den übersetzten Code aus". Warum? Weil das viel schneller läuft als das interpretieren eines IR.
mse
 
Beiträge: 1987
Registriert: 16. Okt 2008, 09:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0) | 
CPU-Target: x86,x64,ARM
Nach oben

Beitragvon mschnell » 9. Jan 2015, 16:53 Re: Lazarus als IDE für LLVM (llvm-pascal)

MitjaStachowiak hat geschrieben: Weil wozu einen komplizierten Prozessor, wie x86 simulieren?

Wer simuliert in diesem Zusammenhang einen x86 ?

-Michael
mschnell
 
Beiträge: 3226
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon mschnell » 9. Jan 2015, 16:58 Re: Lazarus als IDE für LLVM (llvm-pascal)

mse hat geschrieben:Die übliche Verwendung des Begriffes ist etwa "übersetze in Maschinencode sobald die Routine gebraucht wird und führe den übersetzten Code aus".


... und halte die übersetze Version in einem Cache, falls sie bald noch einmal gebraucht wird.

Das führt dazu dass (nicht allzu große) C# Programme in CIL-Form mit dem JIT Compiler nur langsamer laden, aber nicht langsamer laufen, als wenn man sie mit dem (ebenfalls existierenden, aber selten verwendeten) Compiler von CIL in native Code übersetzt und dann die native-Datei startet.

-Michael
mschnell
 
Beiträge: 3226
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon MitjaStachowiak » 9. Jan 2015, 17:25 Re: Lazarus als IDE für LLVM (llvm-pascal)

Was verstehst du denn unter just-in-time Kompilierung? Die übliche Verwendung des Begriffes ist etwa "übersetze in Maschinencode sobald die Routine gebraucht wird und führe den übersetzten Code aus".


Genau, also kein virtueller Prozessor.

Wer simuliert in diesem Zusammenhang einen x86?


Wie ich vermutet habe: Niemand. Der übersetzte Code läuft dann direkt auf der physischen CPU. Das ist ein etwas anderes Konzept, als bei Java, oder diversen Scriptsprachen, die JIT-Compiling verwenden.

Heißt das dann, es gibt einen zweistufigen Debugger? Also im JIT-compilierten x86-Code befindet sich ein Haltepunkt. Ein "Backend-Debugger" erkennt diesen und unterbricht das Programm. Dann wird im LLVM-Bitcode das Erreichen des äquivalenten Haltepunktes simuliert und ein zweiter "Frontend-Debugger" erkennt dies und markiert in der IDE die entsprechende Zeile?
MitjaStachowiak
 
Beiträge: 336
Registriert: 15. Mai 2010, 12:46
CPU-Target: 64 bit
Nach oben

Beitragvon mschnell » 10. Jan 2015, 00:13 Re: Lazarus als IDE für LLVM (llvm-pascal)

MitjaStachowiak hat geschrieben:Genau, also kein virtueller Prozessor.

Äääh doch ?!?!? Der ausgeführte (ausgelieferte) Binär-Code wird nicht von einem Hardware-Prozessor, sondern für einen Virtuellen (in Software realisierten) Prozessor ausgeführt. Wie diese Software das macht (rein interpretativ oder durch einen nachgeschalteten Übersetzungsvorgang für den lokalen Hardware-Prozessor) ist egal.

-Michael
mschnell
 
Beiträge: 3226
Registriert: 11. Sep 2006, 09:24
Wohnort: Krefeld
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ) | 
CPU-Target: X32 / X64 / ARMv5
Nach oben

Beitragvon MitjaStachowiak » 10. Jan 2015, 00:32 Re: Lazarus als IDE für LLVM (llvm-pascal)

Wirklich?

Also bei einer JIT-Compilation denke ich, dass der erzeugte Code vor dem Laden in den Prozessor als "ausführbar" markiert wird, weil ansonsten die Data Execution Prevention greifen müsste. Der vollständig compilierte Code müsste dann auch anderen Prozessen Messages schicken können, auf Hardware zugreifen, MMF verwenden, usw. Bei einer richtigen, virtuellen Umgebung, wie JRE oder einem modernen Webbrowser, bleibt auch der compilierte Code ein Datenblock, nur der virtuelle Prozessor kann ihn ausführen, bietet dabei aber keine Interaktionsmöglichkeit mit anderen Prozessen oder dem System, außer vielleicht über spezielle Interfaces.

Im Prinzip könnte man natürlich sagen, dass jeder Prozess in einer Art virtuellen Maschine läuft, da er ja eine eigene Pagetable bekommt, aber ob das Betriebssystem diese Maschine ist, oder ob dazwischen eine weitere Abstraktionsebene liegt... Gerade wenn es um Cuda oder die Frage, ob man von lli aus die Windows-API verwenden kann, geht, ist das schon relevant.
MitjaStachowiak
 
Beiträge: 336
Registriert: 15. Mai 2010, 12:46
CPU-Target: 64 bit
Nach oben

Beitragvon marcov » 10. Jan 2015, 00:43 Re: Lazarus als IDE für LLVM (llvm-pascal)

MitjaStachowiak hat geschrieben:
Was verstehst du denn unter just-in-time Kompilierung? Die übliche Verwendung des Begriffes ist etwa "übersetze in Maschinencode sobald die Routine gebraucht wird und führe den übersetzten Code aus".


Genau, also kein virtueller Prozessor.


Man kann ein virtueller Prozessor haben ohne JIT. Beispiel: Java 1.0 (rein interpretiert, und (assembler Ebene) Typen explizit in Opcodes codiert).
marcov
 
Beiträge: 1032
Registriert: 5. Aug 2008, 08:37
Wohnort: Eindhoven (Niederlande)
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk) | 
CPU-Target: 32/64,PPC(+64), ARM
Nach oben

» Weitere Beiträge siehe nächste Seite »
VorherigeNächste

Zurück zu Unterstützung Lazarusproject



Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast

porpoises-institution
accuracy-worried