Commit 47046f05 authored by Martin Storsjö's avatar Martin Storsjö
Browse files

[MC] Produce proper section relative relocations for COFF in .debug_frame

The third parameter to Streamer.EmitSymbolValue() is "bool
IsSectionRelative = false".

For ELF, these debug sections are mapped to address zero, so a normal,
absolute address relocation works just fine, but COFF needs a section
relative relocation, and COFF is the only target where
needsDwarfSectionOffsetDirective() returns true. This matches how
EmitSymbolValue is called elsewhere in the same source file.

Differential Revision: https://reviews.llvm.org/D70661
parent 943513b7
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1701,7 +1701,8 @@ void FrameEmitterImpl::EmitFDE(const MCSymbol &cieStart,
        MakeStartMinusEndExpr(Streamer, SectionStart, cieStart, 0);
    emitAbsValue(Streamer, offset, 4);
  } else {
    Streamer.EmitSymbolValue(&cieStart, 4);
    Streamer.EmitSymbolValue(&cieStart, 4,
                             asmInfo->needsDwarfSectionOffsetDirective());
  }

  // PC Begin
+26 −0
Original line number Diff line number Diff line
// RUN: llvm-mc -filetype=obj -triple x86_64-mingw32 %s -o - | llvm-objdump -r - | FileCheck --check-prefix=COFF_X86_64 %s
// RUN: llvm-mc -filetype=obj -triple i686-mingw32 %s -o - | llvm-objdump -r - | FileCheck --check-prefix=COFF_I686 %s

.cfi_sections .debug_frame

f1:
        .cfi_startproc
        nop
        .cfi_endproc

f2:
        .cfi_startproc
        nop
        .cfi_endproc

// COFF_X86_64: RELOCATION RECORDS FOR [.debug_frame]:
// COFF_X86_64-NEXT: {{.*}} IMAGE_REL_AMD64_SECREL .debug_frame
// COFF_X86_64-NEXT: {{.*}} IMAGE_REL_AMD64_ADDR64 .text
// COFF_X86_64-NEXT: {{.*}} IMAGE_REL_AMD64_SECREL .debug_frame
// COFF_X86_64-NEXT: {{.*}} IMAGE_REL_AMD64_ADDR64 .text

// COFF_I686: RELOCATION RECORDS FOR [.debug_frame]:
// COFF_I686-NEXT: {{.*}} IMAGE_REL_I386_SECREL .debug_frame
// COFF_I686-NEXT: {{.*}} IMAGE_REL_I386_DIR32 .text
// COFF_I686-NEXT: {{.*}} IMAGE_REL_I386_SECREL .debug_frame
// COFF_I686-NEXT: {{.*}} IMAGE_REL_I386_DIR32 .text