Am 24.02.24 um 21:30 schrieb Mark Kettenis:

Unless we explicitly mark them as not, yes, they will use IBT (but not
Shadow Stack).

Ah cool!

No.  Tail call elimination will use a *direct* branch, which doesn't
need a landing pad at all.

Not necessarily - I've seen tail call elimination on function pointers, because it *is* valid. E.g. `return func_ptr()` should be able to use tail call elimination.

Right.  And this is what a direct branch looks like.  An indirect
branch is when you load the address of a function into a register and
then us that register in the branch instruction.

Ah, right, forgot about the indirect part :).

However, don't the functions referenced by section .init_array also need those, then? Or is IBT only enabled later?

Like endbr64 on amd64, the bti instructions are all executed as nop
instructions on older hardware.

Thanks for confirming!

--
Jonathan

Reply via email to