• Alexander Egorenkov's avatar
    s390/kexec: handle R_390_PLT32DBL rela in arch_kexec_apply_relocations_add() · abf0e8e4
    Alexander Egorenkov authored
    Starting with gcc 11.3, the C compiler will generate PLT-relative function
    calls even if they are local and do not require it. Later on during linking,
    the linker will replace all PLT-relative calls to local functions with
    PC-relative ones. Unfortunately, the purgatory code of kexec/kdump is
    not being linked as a regular executable or shared library would have been,
    and therefore, all PLT-relative addresses remain in the generated purgatory
    object code unresolved. This leads to the situation where the purgatory
    code is being executed during kdump with all PLT-relative addresses
    unresolved. And this results in endless loops within the purgatory code.
    
    Furthermore, the clang C compiler has always behaved like described above
    and this commit should fix kdump for kernels built with the latter.
    
    Because the purgatory code is no regular executable or shared library,
    contains only calls to local functions and has no PLT, all R_390_PLT32...
    abf0e8e4
machine_kexec_file.c 8.54 KB