Der Gnu gcc



  • hjdt schrieb:

    Es liegen also irgendwo Unterschiede an den Binaries, aber wie kann ich Sie
    finden? Ich habe es mit 'cmp' probiert, was mir aber nicht viel gebracht hat.

    WENN du auf dieser Ebene suchen willst würde ich mit beiden Compilern mit -s kompilieren und dann ein diff machen.



  • darthdespotism schrieb:

    hjdt schrieb:

    Es liegen also irgendwo Unterschiede an den Binaries, aber wie kann ich Sie
    finden? Ich habe es mit 'cmp' probiert, was mir aber nicht viel gebracht hat.

    WENN du auf dieser Ebene suchen willst würde ich mit beiden Compilern mit -s kompilieren und dann ein diff machen.

    Das habe ich gerade mal gemacht, Unterschiede gibt es reichlich. Nur wie komme ich
    zu einem Ziel?



  • was macht das fehlerhafte programm? wie weit läuft es richtig?
    und lass es im debugger laufen...
    🙂



  • pale dog schrieb:

    was macht das fehlerhafte programm? wie weit läuft es richtig?
    und lass es im debugger laufen...
    🙂

    Es läuft ganz normal ab. Keine Segmentation Faults und keine Auffälligkeiten
    wenn ich Valgrind einsetze. Nur die Ergebnisse sind absolut falsch. In diesem
    Programm geht es um Berechnungen beruhend auf der numerischen Verifikation.

    Bsp., es werde zwei Intervalle addiert:
    [1,1]+[2,2]=[1.2,1.2]
    das ist sicherlich falsch, denn [3,3] sollte rauskommen.

    In Assembler-Code sind einige Unterschiede zu sehen, aber wie werte ich diese
    bei einem Ass.-Quellcode von 3500 Zeilen aus und das ist ein Minimal-Bsp.?



  • hast du mal diff benutzt? Vielleicht gibt die Übersicht hilfreiche Hinweise. Ansonsten kompilierst du den Code auch mit allen Warnungen (-Wall -W -pedantic -std=c99)?



  • Meinst Du ein diff auf die Assembler-Codes? Das habe ich gestern gemacht, die Unterschiede sind so zahlreich, dass so auf die Schnelle keine Aussage getroffen werden kann, woran es liegt. Das würde wahrscheinlich Tage/Wochen dauern, deshalb dachte ich eher an die Änderungen vom gcc, nur diese geben nicht wirklich viel für mich her. Wenn ich 'gcc-3.4.6 -S -c -O0' und 'gcc-4.0.0 -S -c -O0' ausführe, müsste der Assembler-Code nicht derselbe sein?
    Ich probiere nochmal alles mit '-Wall -W -pedantic etc.' zu kompilieren. Mal sehen was kommt.



  • hjdt schrieb:

    Wenn ich 'gcc-3.4.6 -S -c -O0' und 'gcc-4.0.0 -S -c -O0' ausführe, müsste der Assembler-Code nicht derselbe sein?

    Nein.

    Wie gesagt, probier es mal mit eingeschalteten Warnungen, vielleicht gibt er dir dann einen Hinweis.



  • rüdiger schrieb:

    hjdt schrieb:

    Wenn ich 'gcc-3.4.6 -S -c -O0' und 'gcc-4.0.0 -S -c -O0' ausführe, müsste der Assembler-Code nicht derselbe sein?

    Nein.

    Wie gesagt, probier es mal mit eingeschalteten Warnungen, vielleicht gibt er dir dann einen Hinweis.

    Ich habe jetzt alle Warnungen eingeschaltet, aber leider kommen keine.
    Puuh, so langsam habe ich keine Idee mehr. Dann muss ich mir wohl den Assembler-Code einmal genauer anschauen, nur weiß man dann immer noch nicht genau, was im C-Code geändert werden muss.
    Hat vielleicht noch jemand eine andere Idee?



  • iirc hatte gcc-4.0.0 doch einige Bugs bei der Codeerzeugung - wie wäre es denn mit einer aktuelleren Version 4.0.4 oder 4.1.2 oder 4.2.1?
    Ansonsten könntest du evtl auch beide Compilate parallel debuggen - bei irgendeinem EInzelschritt müssten ja Abweichungen entstehen.



  • camper schrieb:

    iirc hatte gcc-4.0.0 doch einige Bugs bei der Codeerzeugung - wie wäre es denn mit einer aktuelleren Version 4.0.4 oder 4.1.2 oder 4.2.1?
    Ansonsten könntest du evtl auch beide Compilate parallel debuggen - bei irgendeinem EInzelschritt müssten ja Abweichungen entstehen.

    Gibt es eine Möglichkeit beim gdb das Programm aublaufen zu lassen und die Einzelschritte in einem File zu protokollieren?


Anmelden zum Antworten