Artikel-ID: 000085705 Inhaltstyp: Fehlerbehebung Letzte Überprüfung: 19.05.2015

Warum kann ich Abstürze sehen, wenn ich Null-Pointer-Dereferenzierung in der Nios2-elf-gcc 4.9 ToolChain verwende?

Umgebung

  • Intel® Quartus® II Anmeldungs-Edition
  • Intel® Nios® II Prozessor
  • BUILT IN - ARTICLE INTRO SECOND COMPONENT
    Beschreibung

    Im Quartus® II Softwareversion 15.0, Nios® II Code kompiliert mit der Nios2-elf-gcc 4.9 Toolchain. Beim Kompilieren von Code bei -O2 (oder höher) mit nios2-elf-gcc 4.9 Toolchain die Optimierung -fie abteurate-fehlerhafte-Pfade-Dereferenz wird standardmäßig eingeschaltet.

     

    Wie beschrieben in

    https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options,

     

    -fie abteurate-fehlerhafte-Pfade-Dereferenz

    Erkennen Sie Pfade, die fehlerhaftes oder undefiniertes Verhalten durch Dereferenzierung eines Nullzeigers auslösen. Isolieren Sie diese Pfade aus dem Hauptsteuerungsfluss und verwandeln Sie die Anweisung mit fehlerhaftem oder undefiniertem Verhalten in eine Falle. Diese Kennzeichnung ist standardmäßig unter -O2 und höher aktiviert.

     

    Diese Optimierung bedeutet, wenn die Toolchain erkennt, dass der Code versucht, über einen möglichen Nullzeiger zu laden oder zu speichern, wird die Load- oder Store-Anweisung in eine Trap-Anweisung geändert. Dies kann dazu führen, dass Embedded-Programm ohne eine Kompilierungszeit-Warnung abstürzt.

    Lösung

    Wenn Ihr Design gültige Daten an Adresse Null enthält, kompilieren Sie Ihren Code mit dem folgenden Switch, um Probleme im Zusammenhang mit Null-Pointer-Dereferenzen zu vermeiden:

     

    -fno-delete-null-pointer-checks

    Zugehörige Produkte

    Dieser Artikel bezieht sich auf 1 Produkte

    Intel® programmierbare Geräte

    Der Inhalt dieser Seite ist eine Kombination aus menschlicher und computerbasierter Übersetzung des originalen, englischsprachigen Inhalts. Dieser Inhalt wird zum besseren Verständnis und nur zur allgemeinen Information bereitgestellt und sollte nicht als vollständig oder fehlerfrei betrachtet werden. Sollte eine Diskrepanz zwischen der englischsprachigen Version dieser Seite und der Übersetzung auftreten, gilt die englische Version. Englische Version dieser Seite anzeigen.