Spaß mit -fsanitize=undefined und Picolibc: Ein eingebettetes C-Abenteuer

2025-04-16

Dieser Blogbeitrag beschreibt die Integration des -fsanitize=undefined-Flags von GCC und Clang in die Picolibc-Bibliothek, um undefiniertes oder implementierungsdefiniertes Verhalten in C zu erkennen. Dieser Prozess führte zum Auffinden und Beheben von acht echten Fehlern, darunter fehlende NULL-Prüfungen in setlocale/newlocale und Typfehler in qsort. Er enthüllte auch verstecktes, undefiniertes Verhalten im Code, wie z. B. Pointer-Arithmetik außerhalb der Grenzen und Überläufe bei vorzeichenbehafteten Ganzzahlen. Ein Großteil der Arbeit bestand darin, undefiniertes Verhalten durch definiertes Verhalten zu ersetzen, aber der Autor schrieb auch lsl- und asr-Makros, um Links- und arithmetische Rechtsverschiebungen zu handhaben, und äußerte seine Unzufriedenheit mit den Mängeln der C-Sprachspezifikation bezüglich Shift-Operatoren. Der Autor schließt mit der Empfehlung an Entwickler, den Undefined-Behavior-Sanitizer zu verwenden, um die Codequalität zu verbessern.

Entwicklung