llvm-project/llvm/test/Object/macho-bind-negative-skip.test
Zixu Wang b910bebc30
[llvm][MachO] Fix integer truncation in rebase/bind parsing (#89337)
`Count` and `Skip` should use `uint64_t` as they are encoded/decoded
using 64-bit ULEB128.

In `*_OPCODE_DO_*_ULEB_TIMES_SKIPPING_ULEB`, `Skip` could be encoded as
a two's complement for moving `SegmentOffset` backwards. Having a 32-bit
`Skip` truncates the encoded value and leads to a malformed
`AdvanceAmount`
and invalid `SegmentOffset` that extends past valid sections.
2024-05-08 18:53:15 -07:00

18 lines
1.1 KiB
Plaintext

// A valid MachO object with a bind table containing an opcode
// `BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB` with negative skip value
// (0xFFFFFFFFFFFFFFF0).
RUN: yaml2obj %p/Inputs/MachO/bind-negative-skip.yaml | \
RUN: llvm-objdump --bind --macho - | \
RUN: FileCheck %s
CHECK: Bind table:
CHECK-NEXT: segment section address type addend dylib symbol
CHECK-NEXT: __DATA_CONST __got 0x100004000 pointer 0 libSystem _free
CHECK-NEXT: __DATA __data 0x100008040 pointer 0 libSystem _free
CHECK-NEXT: __DATA_CONST __got 0x100004008 pointer 0 libSystem _malloc
CHECK-NEXT: __DATA __data 0x100008030 pointer 0 libSystem _malloc
CHECK-NEXT: __DATA __data 0x100008028 pointer 0 libSystem _malloc
CHECK-NEXT: __DATA __data 0x100008020 pointer 0 libSystem _malloc
CHECK-NEXT: __DATA_CONST __got 0x100004010 pointer 0 libSystem dyld_stub_binder