[PATCH] D34539: COFF: handle "undef - ." expressions

Rafael Ávila de Espíndola via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 22 15:16:02 PDT 2017


rafael created this revision.

This is another thing that the ELF implementation can do but is missing from COFF.


https://reviews.llvm.org/D34539

Files:
  lib/MC/WinCOFFObjectWriter.cpp
  test/MC/COFF/bad-expr.s
  test/MC/COFF/cross-section-relative.s


Index: test/MC/COFF/cross-section-relative.s
===================================================================
--- test/MC/COFF/cross-section-relative.s
+++ test/MC/COFF/cross-section-relative.s
@@ -58,17 +58,18 @@
 	.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 @@
 // 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 @@
 // 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:    }
Index: test/MC/COFF/bad-expr.s
===================================================================
--- test/MC/COFF/bad-expr.s
+++ 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
Index: lib/MC/WinCOFFObjectWriter.cpp
===================================================================
--- lib/MC/WinCOFFObjectWriter.cpp
+++ lib/MC/WinCOFFObjectWriter.cpp
@@ -746,17 +746,6 @@
       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);
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D34539.103651.patch
Type: text/x-patch
Size: 2754 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170622/ce3677f9/attachment.bin>


More information about the llvm-commits mailing list