On 2020-01-04, Fangrui Song wrote:
-fpatchable-function-entry is used by Linux kernel arm64/parisc. The
feature works for x86, but does not leverage multi-byte NOP.
% cat a.c
int foo() { return 0; }
% gcc -fpatchable-function-entry=5,0 -c a.c
% objdump -d a.o
...
0000000000000000 <foo>:
0: 90 nop
1: 90 nop
2: 90 nop
3: 90 nop
4: 90 nop
5: 55 push %rbp
6: 48 89 e5 mov %rsp,%rbp
9: b8 00 00 00 00 mov $0x0,%eax
e: 5d pop %rbp
f: c3 retq
(I am not sure who should be notified. I CCed x86-64-port maintainer
(Jan Hubicka <hubi...@ucw.cz>), as listed on gcc/MAINTAINERS.)
Archaeology is difficult with the mailing list archive...
CC Torsten as the patch author
https://gcc.gnu.org/ml/gcc-patches/2016-09/msg02257.html [PATCH v2] add
-fprolog-pad=N option to c-family
https://gcc.gnu.org/ml/gcc-patches/2017-07/msg00391.html [PATCH v12] add
-fpatchable-function-entry=N,M option
Another finding is that
-fpatchable-function-entry=N[,M] is very similar to
-mhotpatch=pre-halfwords,post-halfwords on S/390
https://gcc.gnu.org/onlinedocs/gcc/S_002f390-and-zSeries-Options.html
If the hotpatch option is enabled, a “hot-patching” function prologue
is generated for all functions in the compilation unit. The funtion
label is prepended with the given number of two-byte NOP instructions
(pre-halfwords, maximum 1000000). After the label, 2 * post-halfwords
bytes are appended, using the largest NOP like instructions the
architecture allows (maximum 1000000).