[llvm-dev] RFC: New function attribute "patchable-prologue"="<kind>"
Sanjoy Das via llvm-dev
llvm-dev at lists.llvm.org
Wed Apr 6 00:10:53 PDT 2016
[Proposed langref entry]
The "patchable-prologue" attribute on a function is a general
mechanism to control the form of a function's prologue in ways that
make it easy to patch at runtime.
Currently only one value is supported:
# "hotpatch-compact"
If a function is marked with "patchable-prologue"="hotpatch-compact"
then:
1. The first instruction of the function is at least two bytes long.
2. The first two bytes of the first instruction does not span a cache
line boundary.
3. The instruction denoted by (1) is preferably not a no-op, i.e.,
we'd prefer to "re-use" an instruction already present. For
instance, we can emit a two byte form of a "push CSR" instruction
that we'd have needed anyway.
"hotpatch-compact" is useful for runtimes that want to thread-safely
overwrite the first instruction of a function with a short branch.
[End proposed langref entry]
We can consider adding more "schemes" in the future, for instance
"hotpatch-ms" for the Microsoft hotpatching scheme. I was initially
thinking of proposing "num-patchable-bytes"="<count>" as the
fundamental building block, but the more I thought about it the less I
liked it, since a specific patching scheme has several tightly
integrated constraints of which the number of bytes is just one.
What do you think?
-- Sanjoy
More information about the llvm-dev
mailing list