Skip to content
  • Michael Holzheu's avatar
    s390/bpf: Fix gcov stack space problem · b9b4b1ce
    Michael Holzheu authored
    
    
    When compiling the kernel for GCOV (CONFIG_GCOV_KERNEL,-fprofile-arcs),
    gcc allocates a lot of stack space because of the large switch statement
    in bpf_jit_insn().
    
    This leads to the following compile warning:
    
     arch/s390/net/bpf_jit_comp.c: In function 'bpf_jit_prog':
     arch/s390/net/bpf_jit_comp.c:1144:1: warning: frame size of
      function 'bpf_jit_prog' is 12592 bytes which is more than
      half the stack size. The dynamic check would not be reliable.
      No check emitted for this function.
    
     arch/s390/net/bpf_jit_comp.c:1144:1: warning: the frame size of 12504
      bytes is larger than 1024 bytes [-Wframe-larger-than=]
    
    And indead gcc allocates 12592 bytes of stack space:
    
     # objdump -d arch/s390/net/bpf_jit_comp.o
     ...
     0000000000000c60 <bpf_jit_prog>:
         c60:       eb 6f f0 48 00 24       stmg    %r6,%r15,72(%r15)
         c66:       b9 04 00 ef             lgr     %r14,%r15
         c6a:       e3 f0 fe d0 fc 71       lay     %r15,-12592(%r15)
    
    As a workaround of that problem we now define bpf_jit_insn() as
    noinline which then reduces the stack space.
    
     # objdump -d arch/s390/net/bpf_jit_comp.o
     ...
     0000000000000070 <bpf_jit_insn>:
          70:       eb 6f f0 48 00 24       stmg    %r6,%r15,72(%r15)
          76:       c0 d0 00 00 00 00       larl    %r13,76 <bpf_jit_insn+0x6>
          7c:       a7 f1 3f 80             tmll    %r15,16256
          80:       b9 04 00 ef             lgr     %r14,%r15
          84:       e3 f0 ff a0 ff 71       lay     %r15,-96(%r15)
    
    Signed-off-by: default avatarMichael Holzheu <holzheu@linux.vnet.ibm.com>
    Signed-off-by: default avatarMartin Schwidefsky <schwidefsky@de.ibm.com>
    b9b4b1ce