Was heißt freepascal Internal Error 200301081???

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Anonymus
Beiträge: 31
Registriert: Di 15. Dez 2015, 10:36

Was heißt freepascal Internal Error 200301081???

Beitrag von Anonymus »

Was bedeutet diese Meldung.

Welcher Fehler liegt vor? Was also läuft falsch?

Ich habe alle Bereichsprüfungen eingeschaltet.

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Was heißt freepascal Internal Error 200301081???

Beitrag von theo »

Ein Compilerfehler von 2003 :wink:
http://bugs.freepascal.org/view.php?id=4493

In welcher Version trifft der auf?

Anonymus
Beiträge: 31
Registriert: Di 15. Dez 2015, 10:36

Re: Was heißt freepascal Internal Error 200301081???

Beitrag von Anonymus »

theo hat geschrieben:Ein Compilerfehler von 2003 :wink:
http://bugs.freepascal.org/view.php?id=4493

In welcher Version trifft der auf?


In der Version 3.0.0 ! Habe ein Programm mit Assembleranweisungen aus der Turbo Pascal Zeit, das ich nach Windows portieren will. Wegen Übersetzungsproblemen zunächst mit Übersetzung für Go32v2 versucht, Windows folgt später, da muss einiges umgestellt werden.

Hatte deshalb auch Bereichsfehler getippt, weil ich ja die Assemblerteile zuerst mal auf 32 Bit umstellen muss. Der Fehler kam dann bei einer Zuweisung dieser Art:

Code: Alles auswählen

 
mov word ptr[flags],<hexzahl>
 


{$Asmmode direct} akzeptiert der compiler gar nicht und in der IDE kann ich einstellen, was ich will, es hat auf des Problem keine AUswirkung.

{$Asmmode INTEL} ist bereits eingestellt, sonst moniert der Compiler die Registernemen. Hatte vor einigen Tagen hier eine Frage dazu gestellt, die mir mit einem Link auf Wki beantwortet wurde, in der die zu setzenden Assemblermodi genannt wurden, ohne plausible Erklärungen, wann ich welchen Modus zu verwenden habe.

Ich habe aber schon vor dieswem Verweis auf die Wiki verstanden, das FPC defaultmäßig AT%T Assembler verwendet und ich so bei Bedarf auf {$ASMMODE INTEL} umstellen muss.

Der Fehler tritt bisher nur beim Assemblercode auf. Ich habe die betroffene Funktion erst mal auskommentiert, um die Übersetzung fortsetzen zu können. Für Windws klappt die Übersetzung überhaupt nicht, ich muss deshalb erst mal für G32 übersetzen und dann weiter sehen.

Unter Windows (mit der Textmode IDE) kriege ich die Fehlermeldung: Can't find unit system!

Bei Übersetzung mit Lazarus (Version 1.6, mit FPC 3.0.0) kommen andere Inkompatibilitäten zum Vorschein. Deshalb habe ich die Übersetzung für GO32 in Arbeit, obwohl ich vorhabe, mein Programm Windows-Tauglich zu machen. Go32 ist hier nur eine Zwischenlösung, bis das Programm unter Windows verwendbar ist.

Ist ja schön das der Fehler unter Windows nicht mehr auftritt nur fehlt mir der Glaube. Wegen anderer Kompatibilitätsprobleme unter Windows kommt der Compiler unter Windows gar nicht erst bis zu der kritischen Programmzeile, die den monierten Fehler ausgelöst hat.

Was also bedeutet diese Fehlermeldung nun?
Zuletzt geändert von Anonymus am Sa 18. Jun 2016, 18:11, insgesamt 1-mal geändert.

Mathias
Beiträge: 6166
Registriert: Do 2. Jan 2014, 17:21
OS, Lazarus, FPC: Linux (die neusten Trunk)
CPU-Target: 64Bit
Wohnort: Schweiz

Re: Was heißt freepascal Internal Error 200301081???

Beitrag von Mathias »

Man müsste noch wissen, wo dies im Code passiert.
Mit Lazarus sehe ich grün
Mit Java und C/C++ sehe ich rot

Benutzeravatar
theo
Beiträge: 10468
Registriert: Mo 11. Sep 2006, 19:01

Re: Was heißt freepascal Internal Error 200301081???

Beitrag von theo »

Mathias hat geschrieben:Man müsste noch wissen, wo dies im Code passiert.


Der Fehler wird ausgelöst in:
compiler/x86/aasmcpu.pas
oder
compiler/x86/agx86att.pas

Man kann seinen Code ändern bis, der Fehler verschwindet um dann zu sehen, was ihn auslöst hat.
Der Fehler ist aber wahrscheinlich nicht im User Code.
Trotzdem muss es eine spezielle Bedingung sein, die den Fehler auslöst, denn die meisten User haben das Problem ja nicht.

@Anonymus: Hast du Assembler drin?

mischi
Beiträge: 206
Registriert: Di 10. Nov 2009, 18:49
OS, Lazarus, FPC: macOS, 10.13, lazarus 1.8.x, fpc 3.0.x
CPU-Target: 32Bit/64bit

Re: Was heißt freepascal Internal Error 200301081???

Beitrag von mischi »

Internal error sollten eigentlich gar nicht auftreten. Tun sie es doch, dann heisst das für normalen Pascal-Code, dass ein Fehler im Compiler aufgetreten ist. Das kommt eigentlich nur sehr selten vor und eigentlich nur in der trunk version und nicht in einer Release-Version. Bei gemischtem Assembler/Pascal Code kann ich mir das schon eher vorstellen. Ich würde in so einem Fall versuchen, den Assembler durch Pascal zu ersetzen.
MiSchi macht die fink-Pakete

Anonymus
Beiträge: 31
Registriert: Di 15. Dez 2015, 10:36

Re: Was heißt freepascal Internal Error 200301081???

Beitrag von Anonymus »

theo hat geschrieben:
Mathias hat geschrieben:Man müsste noch wissen, wo dies im Code passiert.


Der Fehler wird ausgelöst in:
compiler/x86/aasmcpu.pas
oder
compiler/x86/agx86att.pas

Man kann seinen Code ändern bis, der Fehler verschwindet um dann zu sehen, was ihn auslöst hat.
Der Fehler ist aber wahrscheinlich nicht im User Code.
Trotzdem muss es eine spezielle Bedingung sein, die den Fehler auslöst, denn die meisten User haben das Problem ja nicht.

@Anonymus: Hast du Assembler drin?


Ja, der Interne Fehler tritt im Assemblerteil auf.

mov ax, word ptr [memvar], <hexvalue>

Danach folgen Operatioen wie

or ax, word ptr [memvar]

Ohne das WORD PTR und Bennennung der MemVar erhalte ich Operandenfehler.

Wie kann ich da obige Anweisungen korrekt realisieren.

Auf 32 Bit Wortbreite erhöhen hilft nicht weiter. Warum nicht?




Nichts aber auch gar nichts ist da korrigiert, gar nichts!

Code: Alles auswählen

 
MOV AH,BL
  SHR EBX,3
  AND AH,07h
  MOV DWORD PTR[flags],EAX /// DIESE Codezeile verursacht den Fehler
  POP EAX
  XCHG ESI,EDI             
 


Zielplafftorm Windows auf X86 Prpzessor mit FPC 3.0.0 und Lazarus 1.6 Compilereinstellungen alle Default, auch der Zielprozessor.

Gibt es wenigstens einen brauchbaren Work Around für das Problem?

.

Antworten