[lld] r220916 - [mach-o] use the addend in GOT-based relocations.

Tim Northover tnorthover at apple.com
Thu Oct 30 11:01:07 PDT 2014


Author: tnorthover
Date: Thu Oct 30 13:01:07 2014
New Revision: 220916

URL: http://llvm.org/viewvc/llvm-project?rev=220916&view=rev
Log:
[mach-o] use the addend in GOT-based relocations.

These are used to reference typeinfo data in the exception table section, for
example.

Modified:
    lld/trunk/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp
    lld/trunk/test/mach-o/parse-text-relocs-x86_64.yaml

Modified: lld/trunk/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp?rev=220916&r1=220915&r2=220916&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp Thu Oct 30 13:01:07 2014
@@ -364,7 +364,7 @@ ArchHandler_x86_64::getReferenceInfo(con
   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))

Modified: lld/trunk/test/mach-o/parse-text-relocs-x86_64.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/mach-o/parse-text-relocs-x86_64.yaml?rev=220916&r1=220915&r2=220916&view=diff
==============================================================================
--- lld/trunk/test/mach-o/parse-text-relocs-x86_64.yaml (original)
+++ lld/trunk/test/mach-o/parse-text-relocs-x86_64.yaml Thu Oct 30 13:01:07 2014
@@ -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





More information about the llvm-commits mailing list