From: Rafael Espindola Date: Fri, 23 Jun 2017 02:15:56 +0000 (+0000) Subject: COFF: handle "undef - ." expressions. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d4771b8a21fdc7f918a5fa73ac367f1a7f6b0775;p=llvm COFF: handle "undef - ." expressions. This is another thing that the ELF implementation can do but is missing from COFF. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@306078 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/MC/WinCOFFObjectWriter.cpp b/lib/MC/WinCOFFObjectWriter.cpp index 08b349c7c68..8d8c5ff9b60 100644 --- a/lib/MC/WinCOFFObjectWriter.cpp +++ b/lib/MC/WinCOFFObjectWriter.cpp @@ -746,17 +746,6 @@ void WinCOFFObjectWriter::recordRelocation( return; } - if (!A.getFragment()) { - Asm.getContext().reportError( - Fixup.getLoc(), - Twine("symbol '") + A.getName() + - "' can not be undefined in a subtraction expression"); - return; - } - - assert(&A.getSection() != &B->getSection() && - "This doesn't need a relocation"); - // Offset of the symbol in the section int64_t OffsetOfB = Layout.getSymbolOffset(*B); diff --git a/test/MC/COFF/bad-expr.s b/test/MC/COFF/bad-expr.s index 9a212d988cc..ecbdd415c3a 100644 --- a/test/MC/COFF/bad-expr.s +++ b/test/MC/COFF/bad-expr.s @@ -1,9 +1,7 @@ // RUN: not llvm-mc -filetype=obj -triple i386-pc-win32 %s 2>&1 | FileCheck %s -// CHECK: symbol '__ImageBase' can not be undefined in a subtraction expression // CHECK: symbol '__ImageBase' can not be undefined in a subtraction expression .data _x: .long _x-__ImageBase - .long __ImageBase-_x diff --git a/test/MC/COFF/cross-section-relative.s b/test/MC/COFF/cross-section-relative.s index b47b7f4201e..27a8cc2167f 100644 --- a/test/MC/COFF/cross-section-relative.s +++ b/test/MC/COFF/cross-section-relative.s @@ -58,17 +58,18 @@ t6: .long g3-(t6+16) .zero 4 +.long foobar - . // READOBJ: Section { // READOBJ: Number: 5 // READOBJ: Name: .fix (2E 66 69 78 00 00 00 00) // READOBJ: VirtualSize: 0x0 // READOBJ: VirtualAddress: 0x0 -// READOBJ: RawDataSize: 56 +// READOBJ: RawDataSize: // READOBJ: PointerToRawData: 0xEC -// READOBJ: PointerToRelocations: 0x124 +// READOBJ: PointerToRelocations: // READOBJ: PointerToLineNumbers: 0x0 -// READOBJ: RelocationCount: 6 +// READOBJ: RelocationCount: // READOBJ: LineNumberCount: 0 // READOBJ: Characteristics [ (0xC0500040) // READOBJ: IMAGE_SCN_ALIGN_16BYTES (0x500000) @@ -80,7 +81,7 @@ t6: // READOBJ: 0000: 08000000 00000000 04000000 00000000 |................| // READOBJ: 0010: 00000000 00000000 04000000 00000000 |................| // READOBJ: 0020: 01020000 00000000 00010000 00000000 |................| -// READOBJ: 0030: 04000000 00000000 |........| +// READOBJ: 0030: 04000000 00000000 04000000 |............| // READOBJ: ) // READOBJ: } // READOBJ: ] @@ -116,3 +117,8 @@ t6: // READOBJ: Type: IMAGE_REL_AMD64_REL32 (4) // READOBJ: Symbol: g3 // READOBJ: } +// READOBJ: Relocation { +// READOBJ: Offset: 0x38 +// READOBJ: Type: IMAGE_REL_AMD64_REL32 (4) +// READOBJ: Symbol: foobar +// READOBJ: }