]> git.baikalelectronics.ru Git - kernel.git/commit
arm64: vdso: Only pass --no-eh-frame-hdr when linker supports it
authorWill Deacon <will@kernel.org>
Wed, 24 Jun 2020 12:23:10 +0000 (13:23 +0100)
committerWill Deacon <will@kernel.org>
Wed, 24 Jun 2020 12:23:10 +0000 (13:23 +0100)
commit9d1e705373f78689ea13caba02bbbde07fbbb68e
tree546fe76c8ea716afac3c80ed8296d388269ce8c1
parentbea31abe1ce50106785c6b0c4abc159372a19e2f
arm64: vdso: Only pass --no-eh-frame-hdr when linker supports it

Commit c17c97d9f275 ("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: c17c97d9f275 ("arm64: vdso: Disable dwarf unwinding through the sigreturn trampoline")
Reported-by: Shaokun Zhang <zhangshaokun@hisilicon.com>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Signed-off-by: Will Deacon <will@kernel.org>
arch/arm64/kernel/vdso/Makefile