summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRafael Espindola <rafael.espindola@gmail.com>2017-06-22 21:57:04 +0000
committerRafael Espindola <rafael.espindola@gmail.com>2017-06-22 21:57:04 +0000
commitd2edd137dfbfbd6e0db3ed17f806c99530cadcf1 (patch)
treeb88743e165ac36d900dba676a28d68197ed5039d
parent3cd8bb30f05757cda5408d0426e3c59a113c205b (diff)
downloadbcm5719-llvm-d2edd137dfbfbd6e0db3ed17f806c99530cadcf1.tar.gz
bcm5719-llvm-d2edd137dfbfbd6e0db3ed17f806c99530cadcf1.zip
Change creation of relative relocations on COFF.
For whatever reason, when processing .globl foo foo: .data bar: .long foo-bar llvm-mc creates a relocation with the section: 0x0 IMAGE_REL_I386_REL32 .text This is different than when the relocation is relative from the beginning. For example, a file with call foo produces 0x0 IMAGE_REL_I386_REL32 foo I would like to refactor the logic for converting "foo - ." into a relative relocation so that it is shared with ELF. This is the first step and just changes the coff implementation to match what ELF (and COFF in the case of calls) does. llvm-svn: 306063
-rw-r--r--llvm/lib/MC/WinCOFFObjectWriter.cpp2
-rw-r--r--llvm/test/MC/COFF/cross-section-relative.s16
-rw-r--r--llvm/test/MC/COFF/diff.s6
3 files changed, 12 insertions, 12 deletions
diff --git a/llvm/lib/MC/WinCOFFObjectWriter.cpp b/llvm/lib/MC/WinCOFFObjectWriter.cpp
index ec1fa0801a0..08b349c7c68 100644
--- a/llvm/lib/MC/WinCOFFObjectWriter.cpp
+++ b/llvm/lib/MC/WinCOFFObjectWriter.cpp
@@ -775,7 +775,7 @@ void WinCOFFObjectWriter::recordRelocation(
Reloc.Data.VirtualAddress = Layout.getFragmentOffset(Fragment);
// Turn relocations for temporary symbols into section relocations.
- if (A.isTemporary() || SymB) {
+ if (A.isTemporary()) {
MCSection *TargetSection = &A.getSection();
assert(
SectionMap.find(TargetSection) != SectionMap.end() &&
diff --git a/llvm/test/MC/COFF/cross-section-relative.s b/llvm/test/MC/COFF/cross-section-relative.s
index dd94b0a5e83..b47b7f4201e 100644
--- a/llvm/test/MC/COFF/cross-section-relative.s
+++ b/llvm/test/MC/COFF/cross-section-relative.s
@@ -77,10 +77,10 @@ t6:
// READOBJ: IMAGE_SCN_MEM_WRITE (0x80000000)
// READOBJ: ]
// READOBJ: SectionData (
-// READOBJ: 0000: 10000000 00000000 0C000000 00000000 |................|
-// READOBJ: 0010: 08000000 00000000 0C000000 00000000 |................|
+// READOBJ: 0000: 08000000 00000000 04000000 00000000 |................|
+// READOBJ: 0010: 00000000 00000000 04000000 00000000 |................|
// READOBJ: 0020: 01020000 00000000 00010000 00000000 |................|
-// READOBJ: 0030: 0C000000 00000000 |........|
+// READOBJ: 0030: 04000000 00000000 |........|
// READOBJ: )
// READOBJ: }
// READOBJ: ]
@@ -89,22 +89,22 @@ t6:
// READOBJ: Relocation {
// READOBJ: Offset: 0x0
// READOBJ: Type: IMAGE_REL_AMD64_REL32 (4)
-// READOBJ: Symbol: .rdata
+// READOBJ: Symbol: g3
// READOBJ: }
// READOBJ: Relocation {
// READOBJ: Offset: 0x8
// READOBJ: Type: IMAGE_REL_AMD64_REL32 (4)
-// READOBJ: Symbol: .rdata
+// READOBJ: Symbol: g3
// READOBJ: }
// READOBJ: Relocation {
// READOBJ: Offset: 0x10
// READOBJ: Type: IMAGE_REL_AMD64_REL32 (4)
-// READOBJ: Symbol: .rdata
+// READOBJ: Symbol: g3
// READOBJ: }
// READOBJ: Relocation {
// READOBJ: Offset: 0x18
// READOBJ: Type: IMAGE_REL_AMD64_REL32 (4)
-// READOBJ: Symbol: .rdata
+// READOBJ: Symbol: g3
// READOBJ: }
// READOBJ: Relocation {
// READOBJ: Offset: 0x1C
@@ -114,5 +114,5 @@ t6:
// READOBJ: Relocation {
// READOBJ: Offset: 0x30
// READOBJ: Type: IMAGE_REL_AMD64_REL32 (4)
-// READOBJ: Symbol: .rdata
+// READOBJ: Symbol: g3
// READOBJ: }
diff --git a/llvm/test/MC/COFF/diff.s b/llvm/test/MC/COFF/diff.s
index 5111600c744..58cc7fe532b 100644
--- a/llvm/test/MC/COFF/diff.s
+++ b/llvm/test/MC/COFF/diff.s
@@ -42,11 +42,11 @@ _rust_crate:
// CHECK: Name: .data
// CHECK: Relocations [
// CHECK-NEXT: 0x4 IMAGE_REL_I386_DIR32 _foobar
-// CHECK-NEXT: 0x8 IMAGE_REL_I386_REL32 .text
-// CHECK-NEXT: 0xC IMAGE_REL_I386_REL32 .text
+// CHECK-NEXT: 0x8 IMAGE_REL_I386_REL32 _foobar
+// CHECK-NEXT: 0xC IMAGE_REL_I386_REL32 _foobar
// CHECK-NEXT: ]
// CHECK: SectionData (
-// CHECK-NEXT: 0000: 00000000 00000000 1C000000 20000000
+// CHECK-NEXT: 0000: 00000000 00000000 0C000000 10000000
// CHECK-NEXT: )
// CHECK: Name: baz
OpenPOWER on IntegriCloud