• Will Deacon's avatar
    arm64: vdso: Only pass --no-eh-frame-hdr when linker supports it · 49a3b0e1
    Will Deacon authored
    Commit 87676cfc ("arm64: vdso: Disable dwarf unwinding through the
    sigreturn trampoline") unconditionally passes the '--no-eh-frame-hdr'
    option to the linker when building the native vDSO in an attempt to
    prevent generation of the .eh_frame_hdr section, the presence of which
    has been implicated in segfaults originating from the libgcc unwinder.
    
    Unfortunately, not all versions of binutils support this option, which
    has been shown to cause build failures in linux-next:
    
      |   CALL    scripts/atomic/check-atomics.sh
      |   CALL    scripts/checksyscalls.sh
      |   LD      arch/arm64/kernel/vdso/vdso.so.dbg
      | ld: unrecognized option '--no-eh-frame-hdr'
      | ld: use the --help option for usage information
      | arch/arm64/kernel/vdso/Makefile:64: recipe for target
      | 'arch/arm64/kernel/vdso/vdso.so.dbg' failed
      | make[1]: *** [arch/arm64/kernel/vdso/vdso.so.dbg] Error 1
      | arch/arm64/Makefile:175: recipe for target 'vdso_prepare' failed
      | make: *** [vdso_prepare] Error 2
    
    Only link the vDSO with '--no-eh-frame-hdr' when the linker supports it.
    If we end up with the section due to linker defaults, the absence of CFI
    information in the sigreturn trampoline will prevent the unwinder from
    breaking.
    
    Link: https://lore.kernel.org/r/7a7e31a8-9a7b-2428-ad83-2264f20bdc2d@hisilicon.com
    Fixes: 87676cfc ("arm64: vdso: Disable dwarf unwinding through the sigreturn trampoline")
    Reported-by: default avatarShaokun Zhang <zhangshaokun@hisilicon.com>
    Tested-by: default avatarJon Hunter <jonathanh@nvidia.com>
    Signed-off-by: default avatarWill Deacon <will@kernel.org>
    49a3b0e1
Makefile 2.81 KB