[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