Labels in GCC Inline Assembly

ei meinen laufenden Experimenten mit der GCC-Inline-Assembly ist mir ein neues Problem in Bezug auf Beschriftungen und Inline-Code begegne

Betrachten Sie den folgenden einfachen Sprung:

__asm__
(
    "jmp out;"
    "out:;"
    :
    :
);

Dies macht nichts anderes als zum @ springout Etikette. Wie es ist, kompiliert dieser Code gut. Wenn Sie es jedoch in eine Funktion einfügen und dann mit Optimierungsflags kompilieren, beklagt der Compiler: "Fehler: Symbol 'out' ist bereits definiert".

Es scheint so, als ob der Compiler diesen Assembler-Code jedes Mal wiederholt, wenn er die Funktion einfügt. Dies bewirkt, dass das Labelout zu duplizieren, was zu mehrerenout labels.

So, wie arbeite ich das um? Ist es wirklich nicht möglich, Etiketten in der Inline-Montage zu verwenden? Diestutorial on GCC inline assembly erwähnt, dass:

Damit können Sie Ihre Assembly in CPP-Makros und Inline-C-Funktionen einfügen, sodass jeder sie als C-Funktion / Makro verwenden kann. Inline-Funktionen ähneln Makros sehr, sind aber manchmal übersichtlicher. Beachten Sie, dass in all diesen Fällen der Code dupliziert wird, also nurlocal labels (von 1: style) sollte in diesem asm-Code definiert werden.

Ich habe versucht, weitere Informationen zu diesen "lokalen Labels" zu finden, kann aber anscheinend nichts in Bezug auf Inline-Assemblierung finden. Es sieht so aus, als würde das Tutorial sagen, dass ein lokales Label eine Zahl gefolgt von einem Doppelpunkt ist (wie1:), also habe ich versucht, ein solches Etikett zu verwenden. Interessanterweise wurde der Code kompiliert, aber zur Laufzeit löste er einfach einen Segmentierungsfehler aus. Hmm ...

So irgendwelche Vorschläge, Hinweise, Antworten ...?