2017-11-15 3 views
1

.clang - Fehler: Nicht-ASM-Anweisung in der nackten Funktion wird nicht unterstützt

CC ../../py/nlrthumb.c 
../../py/nlrthumb.c:79:5: error: non-ASM statement in naked function is not supported 
    return 0; // needed to silence compiler warning 

Warum unterstützt Clang nicht non-ASM statement in naked function?

Dies funktioniert einwandfrei auf gcc.

Die mailing list explains it as

Naked functions don't have prologues or epilogues, so doing codegen for anything other than inline assembly would be completely hit or miss.

so dann, wie gcc es tun kann?

+1

http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20140901/114153.html – negacao

+0

@negacao aktualisierte Frage mit Ihren Informationen. – Adrian

+0

"wie kann gcc es tun" - Es [tut nicht] (https://gcc.gnu.org/onlinedocs/gcc/ARM-Function-Attributes.html#ARM-Function-Attributes). * Nur grundlegende asm-Anweisungen können sicher in nackten Funktionen enthalten sein. Die Verwendung von Extended Asm oder einer Mischung aus Basic Asm und C-Code funktioniert möglicherweise nicht zuverlässig und wird nicht unterstützt. * –

Antwort

3

Ich hätte dies als Antwort anstelle eines Kommentars geschrieben. Die Frage war:

Warum unterstützt Clang nicht-ASM-Anweisung in nackten Funktion? Dies funktioniert gut mit gcc.

Die Antwort ist, dass diese nicht funktioniert gut in gcc. Zitiert aus dem gcc docs für das naked Attribut:

Only basic asm statements can safely be included in naked functions. While using extended asm or a mixture of basic asm and C code may appear to work, they cannot be depended upon to work reliably and are not supported.

Wenn es eine eindeutigere Weise Ausdruck dieses, ich konnte nicht mit ihm kommen.

Beachten Sie, dass, während der oben angegebene spezifische Link für ARM ist (was ich vermute, das OP verwendet), glaube ich, der gleiche Text gilt für alle Plattformen, die naked unterstützen.

+0

GCC könnte einen Fehler ausgelöst haben, anstatt etwas zu erlauben, von dem es weiß, dass es nicht zuverlässig unterstützt wird . –

+3

@MichaelPetch - Genau. Die Frage ist also nicht wirklich "Warum funktioniert das in gcc und nicht in clang?" es ist mehr "Warum gibt gcc nicht denselben hochgradig informativen Compiler-Fehler, den clang für diese nicht unterstützte Verwendung hat?" Das mag nicht das sein, was OP hören will, aber da ist es. –

+0

@DavidWohlferd Ich wollte nur Klarheit. Diese Antwort bietet es. – Adrian

Verwandte Themen