]> 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)
commit425de49ac12ccfb59dbbcd041097f67272e51185
tree546fe76c8ea716afac3c80ed8296d388269ce8c1
parent1a2870a89272f2f1fc63d064e5ed86f98e3a9cfa
arm64: vdso: Only pass --no-eh-frame-hdr when linker supports it

Commit f008ac9bebdc ("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: f008ac9bebdc ("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