Etiquetas na montagem embutida do GCC

Em minhas experiências contínuas com a montagem embutida do GCC, encontrei um novo problema com rótulos e código embutido.

Considere o seguinte salto simples:

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

Isso não faz nada, exceto pular para oout rótulo. Como é, esse código compila bem. Mas se você a colocar dentro de uma função e depois compilar com sinalizadores de otimização, o compilador reclamará: "Erro: o símbolo 'out' já está definido".

O que parece estar acontecendo é que o compilador está repetindo esse código de montagem toda vez que alinha a função. Isso faz com que o rótuloout duplicar, levando a múltiplosout etiquetas.

Então, como faço para resolver isso? Realmente não é possível usar etiquetas na montagem embutida? estetutorial sobre montagem embutida do GCC menciona que:

Assim, você pode colocar seu assembly em macros CPP e funções C embutidas, para que qualquer pessoa possa usá-lo como qualquer função / macro C. As funções embutidas lembram muito as macros, mas às vezes são mais limpas de usar. Lembre-se de que, em todos esses casos, o código será duplicado, portanto, apenasetiquetas locais (de 1: estilo) deve ser definido nesse código asm.

Tentei encontrar mais informações sobre esses "rótulos locais", mas não consigo encontrar nada relacionado ao assembly embutido. Parece que o tutorial está dizendo que um rótulo local é um número seguido por dois-pontos (como1:), então tentei usar um rótulo assim. Curiosamente, o código foi compilado, mas em tempo de execução, ele simplesmente disparou uma falha de segmentação. Hmm...

Então, alguma sugestão, dicas, respostas ...?

questionAnswers(2)

yourAnswerToTheQuestion