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).

Reply via email to