86 lines · plain
1# REQUIRES: x862 3# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %s -o %t.o4# RUN: %lld -dylib %t.o -o %t.dylib5# RUN: obj2yaml %t.dylib | FileCheck %s6 7.text8.globl _foo9_foo:10 11.data12# CHECK: RebaseOpcodes:13# CHECK-NEXT: Opcode: REBASE_OPCODE_SET_TYPE_IMM14# CHECK-NEXT: Imm: 115# CHECK-NEXT: Opcode: REBASE_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB16# CHECK-NEXT: Imm: 117# CHECK-NEXT: ExtraData: [ 0x0 ]18 19## 1/ Single rebases with a gap after them are encoded as REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB.20.quad _foo21.space 1622# CHECK-NEXT: Opcode: REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB23# CHECK-NEXT: Imm: 024# CHECK-NEXT: ExtraData: [ 0x10 ]25 26## 2/ Consecutive rebases are encoded as REBASE_OPCODE_DO_REBASE_IMM_TIMES.27.quad _foo28.quad _foo29.quad _foo30# CHECK-NEXT: Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES31# CHECK-NEXT: Imm: 332 33## 3/ Gaps smaller than 16 words are encoded as REBASE_OPCODE_ADD_ADDR_IMM_SCALED.34.space 12035# CHECK-NEXT: Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED36# CHECK-NEXT: Imm: 1537 38## 4/ Rebases with equal gaps betwen them are encoded as REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB.39.quad _foo40.space 1641.quad _foo42.space 1643# CHECK-NEXT: Opcode: REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB44# CHECK-NEXT: Imm: 045# CHECK-NEXT: ExtraData: [ 0x2, 0x10 ]46 47## 5/ Rebase does not become a part of DO_REBASE_ULEB_TIMES_SKIPPING_ULEB if the next rebase is closer than the gap.48.quad _foo49.space 850# CHECK-NEXT: Opcode: REBASE_OPCODE_DO_REBASE_ADD_ADDR_ULEB51# CHECK-NEXT: Imm: 052# CHECK-NEXT: ExtraData: [ 0x8 ]53 54.quad _foo55.quad _foo56# CHECK-NEXT: Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES57# CHECK-NEXT: Imm: 258 59## 6/ Large gaps are encoded as REBASE_OPCODE_ADD_ADDR_ULEB.60.space 12861# CHECK-NEXT: Opcode: REBASE_OPCODE_ADD_ADDR_ULEB62# CHECK-NEXT: Imm: 063# CHECK-NEXT: ExtraData: [ 0x80 ]64 65.quad _foo66.space 867.quad _foo68.space 869.quad _foo70# CHECK-NEXT: Opcode: REBASE_OPCODE_DO_REBASE_ULEB_TIMES_SKIPPING_ULEB71# CHECK-NEXT: Imm: 072# CHECK-NEXT: ExtraData: [ 0x3, 0x8 ]73 74 75## 7/ An add opcode is emitted if the next relocation is farther away than the DO_REBASE_ULEB_TIMES_SKIPPING_ULEB gap.76.space 1677.quad _foo78# CHECK-NEXT: Opcode: REBASE_OPCODE_ADD_ADDR_IMM_SCALED79# CHECK-NEXT: Imm: 180# CHECK-NEXT: Opcode: REBASE_OPCODE_DO_REBASE_IMM_TIMES81# CHECK-NEXT: Imm: 182 83## 8/ The rebase section is terminated by REBASE_OPCODE_DONE.84# CHECK-NEXT: Opcode: REBASE_OPCODE_DONE85# CHECK-NEXT: Imm: 086