diff options
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/ArchHandler.h | 1 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp | 2 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp | 2 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/ArchHandler_x86.cpp | 2 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp | 2 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/StubsPass.cpp | 2 | ||||
| -rw-r--r-- | lld/test/mach-o/lazy-bind-x86_64.yaml | 7 |
7 files changed, 17 insertions, 1 deletions
diff --git a/lld/lib/ReaderWriter/MachO/ArchHandler.h b/lld/lib/ReaderWriter/MachO/ArchHandler.h index 4cdd8ac7a52..ed52fbcdfdd 100644 --- a/lld/lib/ReaderWriter/MachO/ArchHandler.h +++ b/lld/lib/ReaderWriter/MachO/ArchHandler.h @@ -256,6 +256,7 @@ public: ReferenceInfo stubHelperReferenceToHelperCommon; uint32_t stubHelperCommonSize; + uint8_t stubHelperCommonAlignment; uint8_t stubHelperCommonBytes[36]; ReferenceInfo stubHelperCommonReferenceToCache; OptionalRefInfo optStubHelperCommonReferenceToCache; diff --git a/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp b/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp index 2ffaee35bb3..700f64a2af9 100644 --- a/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp +++ b/lld/lib/ReaderWriter/MachO/ArchHandler_arm.cpp @@ -262,6 +262,8 @@ const ArchHandler::StubInfo ArchHandler_arm::_sStubInfoArmPIC = { // Stub Helper-Common size and code 36, + // Stub helper alignment + 2, { // push lazy-info-offset 0x04, 0xC0, 0x2D, 0xE5, // str ip, [sp, #-4]! // push address of dyld_mageLoaderCache diff --git a/lld/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp b/lld/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp index 634a5ceff79..58daa67fddb 100644 --- a/lld/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp +++ b/lld/lib/ReaderWriter/MachO/ArchHandler_arm64.cpp @@ -285,6 +285,8 @@ const ArchHandler::StubInfo ArchHandler_arm64::_sStubInfo = { // Stub Helper-Common size and code 24, + // Stub helper alignment + 2, { 0x11, 0x00, 0x00, 0x90, // ADRP X17, dyld_ImageLoaderCache@page 0x31, 0x02, 0x00, 0x91, // ADD X17, X17, dyld_ImageLoaderCache@pageoff 0xF0, 0x47, 0xBF, 0xA9, // STP X16/X17, [SP, #-16]! diff --git a/lld/lib/ReaderWriter/MachO/ArchHandler_x86.cpp b/lld/lib/ReaderWriter/MachO/ArchHandler_x86.cpp index 0fba555e3e6..273c7858ffe 100644 --- a/lld/lib/ReaderWriter/MachO/ArchHandler_x86.cpp +++ b/lld/lib/ReaderWriter/MachO/ArchHandler_x86.cpp @@ -218,6 +218,8 @@ const ArchHandler::StubInfo ArchHandler_x86::_sStubInfo = { // Stub Helper-Common size and code 12, + // Stub helper alignment + 2, { 0x68, 0x00, 0x00, 0x00, 0x00, // pushl $dyld_ImageLoaderCache 0xFF, 0x25, 0x00, 0x00, 0x00, 0x00, // jmp *_fast_lazy_bind 0x90 }, // nop diff --git a/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp b/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp index c89989e6277..9951ff90480 100644 --- a/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp +++ b/lld/lib/ReaderWriter/MachO/ArchHandler_x86_64.cpp @@ -286,6 +286,8 @@ const ArchHandler::StubInfo ArchHandler_x86_64::_sStubInfo = { // Stub Helper-Common size and code 16, + // Stub helper alignment + 2, { 0x4C, 0x8D, 0x1D, 0x00, 0x00, 0x00, 0x00, // leaq cache(%rip),%r11 0x41, 0x53, // push %r11 0xFF, 0x25, 0x00, 0x00, 0x00, 0x00, // jmp *binder(%rip) diff --git a/lld/lib/ReaderWriter/MachO/StubsPass.cpp b/lld/lib/ReaderWriter/MachO/StubsPass.cpp index fc2760b50eb..88eaf3023bf 100644 --- a/lld/lib/ReaderWriter/MachO/StubsPass.cpp +++ b/lld/lib/ReaderWriter/MachO/StubsPass.cpp @@ -175,7 +175,7 @@ public: } Alignment alignment() const override { - return 1 << _stubInfo.codeAlignment; + return 1 << _stubInfo.stubHelperCommonAlignment; } uint64_t size() const override { diff --git a/lld/test/mach-o/lazy-bind-x86_64.yaml b/lld/test/mach-o/lazy-bind-x86_64.yaml index 1b4699feed3..72522051ba5 100644 --- a/lld/test/mach-o/lazy-bind-x86_64.yaml +++ b/lld/test/mach-o/lazy-bind-x86_64.yaml @@ -83,6 +83,13 @@ undefined-symbols: # CHECK-HELPERS: 68 10 00 00 00 pushq $16 # CHECK-HELPERS: 68 20 00 00 00 pushq $32 +# Make sure the stub helper is correctly aligned +# CHECK-DYLIBS: sectname __stub_helper +# CHECK-DYLIBS-NEXT: segname __TEXT +# CHECK-DYLIBS-NEXT: addr +# CHECK-DYLIBS-NEXT: size +# CHECK-DYLIBS-NEXT: offset +# CHECK-DYLIBS-NEXT: align 2^2 (4) # CHECK-DYLIBS: cmd LC_LOAD_DYLIB # CHECK-DYLIBS: name /usr/lib/libbar.dylib (offset 24) |

