• A
    arm64/kernel: jump_label: Switch to relative references · c296146c
    Ard Biesheuvel 提交于
    On a randomly chosen distro kernel build for arm64, vmlinux.o shows the
    following sections, containing jump label entries, and the associated
    RELA relocation records, respectively:
    
      ...
      [38088] __jump_table      PROGBITS         0000000000000000  00e19f30
           000000000002ea10  0000000000000000  WA       0     0     8
      [38089] .rela__jump_table RELA             0000000000000000  01fd8bb0
           000000000008be30  0000000000000018   I      38178   38088     8
      ...
    
    In other words, we have 190 KB worth of 'struct jump_entry' instances,
    and 573 KB worth of RELA entries to relocate each entry's code, target
    and key members. This means the RELA section occupies 10% of the .init
    segment, and the two sections combined represent 5% of vmlinux's entire
    memory footprint.
    
    So let's switch from 64-bit absolute references to 32-bit relative
    references for the code and target field, and a 64-bit relative
    reference for the 'key' field (which may reside in another module or the
    core kernel, which may be more than 4 GB way on arm64 when running with
    KASLR enable): this reduces the size of the __jump_table by 33%, and
    gets rid of the RELA section entirely.
    Signed-off-by: NArd Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: NThomas Gleixner <tglx@linutronix.de>
    Acked-by: NWill Deacon <will.deacon@arm.com>
    Acked-by: NPeter Zijlstra (Intel) <peterz@infradead.org>
    Cc: linux-arm-kernel@lists.infradead.org
    Cc: linux-s390@vger.kernel.org
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Cc: Jessica Yu <jeyu@kernel.org>
    Link: https://lkml.kernel.org/r/20180919065144.25010-4-ard.biesheuvel@linaro.org
    c296146c
Kconfig 41.4 KB