diff options
| author | Tim Northover <tnorthover@apple.com> | 2014-10-30 18:01:07 +0000 |
|---|---|---|
| committer | Tim Northover <tnorthover@apple.com> | 2014-10-30 18:01:07 +0000 |
| commit | 516e983dd4e145176eb17b2de2cb1457880457da (patch) | |
| tree | 8d90a8264560c84a669f2cf7d7ca3afbe90cbc4c | |
| parent | c572e92c763f44bddfa30bc43e9027547b72dbfa (diff) | |
| download | bcm5719-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.cpp | 2 | ||||
| -rw-r--r-- | lld/test/mach-o/parse-text-relocs-x86_64.yaml | 6 |
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 |

