[all-commits] [llvm/llvm-project] 88498f: [ELF] -r: allow SHT_X86_64_UNWIND to be merged int...

Fangrui Song via All-commits all-commits at lists.llvm.org
Thu Aug 13 08:17:04 PDT 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 88498f44dfe7d9b886f2622335cdeae4dbf2b02a
      https://github.com/llvm/llvm-project/commit/88498f44dfe7d9b886f2622335cdeae4dbf2b02a
  Author: Fangrui Song <i at maskray.me>
  Date:   2020-08-13 (Thu, 13 Aug 2020)

  Changed paths:
    M lld/ELF/OutputSections.cpp
    M lld/test/ELF/eh-frame-type.test

  Log Message:
  -----------
  [ELF] -r: allow SHT_X86_64_UNWIND to be merged into SHT_PROGBITS

* For .cfi_*, GCC/GNU as emits SHT_PROGBITS type .eh_frame sections.
* Since rL252300, clang emits SHT_X86_64_UNWIND type .eh_frame sections
  (originated from Solaris, documented in the x86-64 psABI).
* Some assembly use `.section .eh_frame,"a", at unwind` to generate
  SHT_X86_64_UNWIND .eh_frame sections.

In a non-relocatable link, input .eh_frame are combined and there is
only one SyntheticSection .eh_frame in the output section, so the
"section type mismatch" diagnostic does not fire.

In a relocatable link, there is no SyntheticSection .eh_frame. .eh_frame of
mixed types can trigger the diagnostic. This patch fixes it by adding another
special case 0x70000001 (= SHT_X86_64_UNWIND) to canMergeToProgbits().

    ld.lld -r gcc.o clang.o => error: section type mismatch for .eh_frame

There was a discussion "RFC: Usefulness of SHT_X86_64_UNWIND" on the x86-64-abi
mailing list. Folks are not wild about making the psABI value 0x70000001 into
gABI, but a few think defining 0x70000001 for .eh_frame may be a good idea for a
new architecture.

Reviewed By: grimar

Differential Revision: https://reviews.llvm.org/D85785




More information about the All-commits mailing list