forked from OSchip/llvm-project
[LangRef] update according to unwinding support in inline asm
https://reviews.llvm.org/D95745 introduced a new `unwind` keyword for inline assembler expressions. Inline asms marked with the `unwind` keyword allows stack unwinding from inline assembly because the compiler emits unwinding information ("around" the inline asm) as it would for calls/invokes. Unwinding the stack from within non-unwind inline asm may cause UB. Reviewed By: Amanieu Differential Revision: https://reviews.llvm.org/D102642
This commit is contained in:
parent
7d7b72bad7
commit
22f635b1b3
|
@ -4303,9 +4303,20 @@ the only supported dialects. An example is:
|
||||||
|
|
||||||
call void asm inteldialect "eieio", ""()
|
call void asm inteldialect "eieio", ""()
|
||||||
|
|
||||||
If multiple keywords appear the '``sideeffect``' keyword must come
|
In the case that the inline asm might unwind the stack,
|
||||||
first, the '``alignstack``' keyword second and the '``inteldialect``'
|
the '``unwind``' keyword must be used, so that the compiler emits
|
||||||
keyword last.
|
unwinding information:
|
||||||
|
|
||||||
|
.. code-block:: llvm
|
||||||
|
|
||||||
|
call void asm unwind "call func", ""()
|
||||||
|
|
||||||
|
If the inline asm unwinds the stack and isn't marked with
|
||||||
|
the '``unwind``' keyword, the behavior is undefined.
|
||||||
|
|
||||||
|
If multiple keywords appear, the '``sideeffect``' keyword must come
|
||||||
|
first, the '``alignstack``' keyword second, the '``inteldialect``' keyword
|
||||||
|
third and the '``unwind``' keyword last.
|
||||||
|
|
||||||
Inline Asm Constraint String
|
Inline Asm Constraint String
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
|
|
Loading…
Reference in New Issue