summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTim Northover <tnorthover@apple.com>2014-10-30 18:01:07 +0000
committerTim Northover <tnorthover@apple.com>2014-10-30 18:01:07 +0000
commit516e983dd4e145176eb17b2de2cb1457880457da (patch)
tree8d90a8264560c84a669f2cf7d7ca3afbe90cbc4c
parentc572e92c763f44bddfa30bc43e9027547b72dbfa (diff)
downloadbcm5719-llvm-516e983dd4e145176eb17b2de2cb1457880457da.tar.gz
bcm5719-llvm-516e983dd4e145176eb17b2de2cb1457880457da.zip
[mach-o] use the addend in GOT-based relocations.
These are used to reference typeinfo data in the exception table section, for example. llvm-svn: 220916
-rw-r--r--lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp2
-rw-r--r--lld/test/mach-o/parse-text-relocs-x86_64.yaml6
2 files changed, 5 insertions, 3 deletions
diff --git a/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp b/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp
index c6d31f5cffb..8bd87d01676 100644
--- a/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp
+++ b/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp
@@ -364,7 +364,7 @@ ArchHandler_x86_64::getReferenceInfo(const Relocation &reloc,
case ripRel32Got:
if (E ec = atomFromSymbolIndex(reloc.symbol, target))
return ec;
- *addend = 0;
+ *addend = *(little32_t *)fixupContent;
return std::error_code();
case pointer64:
if (E ec = atomFromSymbolIndex(reloc.symbol, target))
diff --git a/lld/test/mach-o/parse-text-relocs-x86_64.yaml b/lld/test/mach-o/parse-text-relocs-x86_64.yaml
index a61a4197a30..9e58e02e377 100644
--- a/lld/test/mach-o/parse-text-relocs-x86_64.yaml
+++ b/lld/test/mach-o/parse-text-relocs-x86_64.yaml
@@ -35,8 +35,8 @@ sections:
attributes: [ S_ATTR_PURE_INSTRUCTIONS, S_ATTR_SOME_INSTRUCTIONS ]
address: 0x0000000000000000
content: [ 0xE8, 0x00, 0x00, 0x00, 0x00, 0xE8, 0x04, 0x00,
- 0x00, 0x00, 0x48, 0x8B, 0x05, 0x00, 0x00, 0x00,
- 0x00, 0xFF, 0x35, 0x00, 0x00, 0x00, 0x00, 0x8B,
+ 0x00, 0x00, 0x48, 0x8B, 0x05, 0x04, 0x00, 0x00,
+ 0x00, 0xFF, 0x35, 0x04, 0x00, 0x00, 0x00, 0x8B,
0x05, 0x00, 0x00, 0x00, 0x00, 0x8B, 0x05, 0x04,
0x00, 0x00, 0x00, 0xC6, 0x05, 0xFF, 0xFF, 0xFF,
0xFF, 0x12, 0x66, 0xC7, 0x05, 0xFE, 0xFF, 0xFF,
@@ -138,9 +138,11 @@ undefined-symbols:
# CHECK: - kind: ripRel32GotLoad
# CHECK: offset: 13
# CHECK: target: _foo
+# CHECK: addend: 4
# CHECK: - kind: ripRel32Got
# CHECK: offset: 19
# CHECK: target: _foo
+# CHECK: addend: 4
# CHECK: - kind: ripRel32
# CHECK: offset: 25
# CHECK: target: _foo
OpenPOWER on IntegriCloud