[lld] r278407 - Better compress lazy binding info to match ld64.
Pete Cooper via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 11 13:59:27 PDT 2016
Author: pete
Date: Thu Aug 11 15:59:27 2016
New Revision: 278407
URL: http://llvm.org/viewvc/llvm-project?rev=278407&view=rev
Log:
Better compress lazy binding info to match ld64.
We should be using one of BIND_OPCODE_SET_DYLIB_SPECIAL_IMM, BIND_OPCODE_SET_DYLIB_ORDINAL_IMM,
and BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB depending on whether ordinals are <= 0, <= 15, > 15.
This matches the behaviour of ld64.
Modified:
lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp
lld/trunk/test/mach-o/bind-opcodes.yaml
Modified: lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp?rev=278407&r1=278406&r2=278407&view=diff
==============================================================================
--- lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp (original)
+++ lld/trunk/lib/ReaderWriter/MachO/MachONormalizedFileBinaryWriter.cpp Thu Aug 11 15:59:27 2016
@@ -1243,22 +1243,25 @@ void MachOFileLayout::buildBindInfo() {
void MachOFileLayout::buildLazyBindInfo() {
for (const BindLocation& entry : _file.lazyBindingInfo) {
- _lazyBindingInfo.append_byte(BIND_OPCODE_SET_TYPE_IMM | entry.kind);
_lazyBindingInfo.append_byte(BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
| entry.segIndex);
- _lazyBindingInfo.append_uleb128Fixed(entry.segOffset, 5);
- if (entry.ordinal > 0)
- _lazyBindingInfo.append_byte(BIND_OPCODE_SET_DYLIB_ORDINAL_IMM |
- (entry.ordinal & 0xF));
- else
+ _lazyBindingInfo.append_uleb128(entry.segOffset);
+ if (entry.ordinal <= 0)
_lazyBindingInfo.append_byte(BIND_OPCODE_SET_DYLIB_SPECIAL_IMM |
- (entry.ordinal & 0xF));
+ (entry.ordinal & BIND_IMMEDIATE_MASK));
+ else if (entry.ordinal <= BIND_IMMEDIATE_MASK)
+ _lazyBindingInfo.append_byte(BIND_OPCODE_SET_DYLIB_ORDINAL_IMM |
+ entry.ordinal);
+ else {
+ _lazyBindingInfo.append_byte(BIND_OPCODE_SET_DYLIB_ORDINAL_ULEB);
+ _lazyBindingInfo.append_uleb128(entry.ordinal);
+ }
+ // FIXME: We need to | the opcode here with flags.
_lazyBindingInfo.append_byte(BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM);
_lazyBindingInfo.append_string(entry.symbolName);
_lazyBindingInfo.append_byte(BIND_OPCODE_DO_BIND);
_lazyBindingInfo.append_byte(BIND_OPCODE_DONE);
}
- _lazyBindingInfo.append_byte(BIND_OPCODE_DONE);
_lazyBindingInfo.align(_is64 ? 8 : 4);
}
Modified: lld/trunk/test/mach-o/bind-opcodes.yaml
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/mach-o/bind-opcodes.yaml?rev=278407&r1=278406&r2=278407&view=diff
==============================================================================
--- lld/trunk/test/mach-o/bind-opcodes.yaml (original)
+++ lld/trunk/test/mach-o/bind-opcodes.yaml Thu Aug 11 15:59:27 2016
@@ -121,9 +121,6 @@ undefined-symbols:
# CHECK: Symbol: ''
# CHECK: LazyBindOpcodes:
-# CHECK: - Opcode: BIND_OPCODE_SET_TYPE_IMM
-# CHECK: Imm: 1
-# CHECK: Symbol: ''
# CHECK: - Opcode: BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB
# CHECK: Imm: 2
# CHECK: ULEBExtraData:
@@ -139,15 +136,6 @@ undefined-symbols:
# CHECK: Imm: 0
# CHECK: Symbol: ''
# CHECK: - Opcode: BIND_OPCODE_DONE
-# CHECK: Imm: 0
-# CHECK: Symbol: ''
-# CHECK: - Opcode: BIND_OPCODE_DONE
-# CHECK: Imm: 0
-# CHECK: Symbol: ''
-# CHECK: - Opcode: BIND_OPCODE_DONE
-# CHECK: Imm: 0
-# CHECK: Symbol: ''
-# CHECK: - Opcode: BIND_OPCODE_DONE
# CHECK: Imm: 0
# CHECK: Symbol: ''
# CHECK: - Opcode: BIND_OPCODE_DONE
More information about the llvm-commits
mailing list