brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.7 KiB · cf294f2 Raw
187 lines · plain
1# REQUIRES: x86, aarch642# RUN: rm -rf %t; split-file %s %t3# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin %t/foo.s -o %t/foo.o4# RUN: llvm-mc -filetype=obj -triple=x86_64-apple-darwin --defsym PTR64=0 %t/test.s -o %t/test.o5# RUN: %lld -O2 -dylib %t/foo.o -o %t/libfoo.dylib6# RUN: %lld -O2 -lSystem %t/test.o %t/libfoo.dylib -o %t/test-x86_647 8## Test (64-bit):9## 1/ We emit exactly one BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM per symbol.10## 2/ Combine BIND_OPCODE_DO_BIND and BIND_OPCODE_ADD_ADDR_ULEB pairs.11## 3/ Compact BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB12## 4/ Use BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED if possible.13# RUN: obj2yaml %t/test-x86_64 | FileCheck %s14 15# CHECK:      BindOpcodes:16# CHECK-NEXT:   Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM17# CHECK-NEXT:   Imm:             018# CHECK-NEXT:   Symbol:          _foo19# CHECK-NEXT:   Opcode:          BIND_OPCODE_SET_TYPE_IMM20# CHECK-NEXT:   Imm:             121# CHECK-NEXT:   Symbol:          ''22# CHECK-NEXT:   Opcode:          BIND_OPCODE_SET_DYLIB_ORDINAL_IMM23# CHECK-NEXT:   Imm:             224# CHECK-NEXT:   Symbol:          ''25# CHECK-NEXT:   Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB26# CHECK-NEXT:   Imm:             227# CHECK-NEXT:   ULEBExtraData:   [ 0x0 ]28# CHECK-NEXT:   Symbol:          ''29# CHECK-NEXT:   Opcode:          BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB30# CHECK-NEXT:   Imm:             031# CHECK-NEXT:   ULEBExtraData:   [ 0x2, 0x8 ]32# CHECK-NEXT:   Symbol:          ''33# CHECK-NEXT:   Opcode:          BIND_OPCODE_SET_ADDEND_SLEB34# CHECK-NEXT:   Imm:             035# CHECK-NEXT:   SLEBExtraData:   [ 1 ]36# CHECK-NEXT:   Symbol:          ''37# CHECK-NEXT:   Opcode:          BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB38# CHECK-NEXT:   Imm:             039# CHECK-NEXT:   ULEBExtraData:   [ 0x1008 ]40# CHECK-NEXT:   Symbol:          ''41# CHECK-NEXT:   Opcode:          BIND_OPCODE_SET_ADDEND_SLEB42# CHECK-NEXT:   Imm:             043# CHECK-NEXT:   SLEBExtraData:   [ 0 ]44# CHECK-NEXT:   Symbol:          ''45# CHECK-NEXT:   Opcode:          BIND_OPCODE_DO_BIND46# CHECK-NEXT:   Imm:             047# CHECK-NEXT:   Symbol:          ''48# CHECK-NEXT:   Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM49# CHECK-NEXT:   Imm:             050# CHECK-NEXT:   Symbol:          _bar51# CHECK-NEXT:   Opcode:          BIND_OPCODE_SET_TYPE_IMM52# CHECK-NEXT:   Imm:             153# CHECK-NEXT:   Symbol:          ''54# CHECK-NEXT:   Opcode:          BIND_OPCODE_ADD_ADDR_ULEB55# CHECK-NEXT:   Imm:             056# CHECK-NEXT:   ULEBExtraData:   [ 0xFFFFFFFFFFFFEFD0 ]57# CHECK-NEXT:   Symbol:          ''58# CHECK-NEXT:   Opcode:          BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED59# CHECK-NEXT:   Imm:             160# CHECK-NEXT:   Symbol:          ''61# CHECK-NEXT:   Opcode:          BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB62# CHECK-NEXT:   Imm:             063# CHECK-NEXT:   ULEBExtraData:   [ 0x1008 ]64# CHECK-NEXT:   Symbol:          ''65# CHECK-NEXT:   Opcode:          BIND_OPCODE_DO_BIND66# CHECK-NEXT:   Imm:             067# CHECK-NEXT:   Symbol:          ''68# CHECK-NEXT:   Opcode:          BIND_OPCODE_DONE69# CHECK-NEXT:   Imm:             070# CHECK-NEXT:   Symbol:          ''71 72# RUN: llvm-mc -filetype=obj -triple=arm64_32-apple-darwin %t/foo.s -o %t/foo.o73# RUN: llvm-mc -filetype=obj -triple=arm64_32-apple-darwin --defsym PTR32=0 %t/test.s -o %t/test.o74# RUN: %lld-watchos -O2 -dylib %t/foo.o -o %t/libfoo.dylib75# RUN: %lld-watchos -O2 -dylib %t/test.o %t/libfoo.dylib -o %t/libtest-arm64_32.dylib76 77## Test (32-bit):78## 1/ We emit exactly one BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM per symbol.79## 2/ Combine BIND_OPCODE_DO_BIND and BIND_OPCODE_ADD_ADDR_ULEB pairs.80## 3/ Compact BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB81## 4/ Use BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED if possible.82# RUN: obj2yaml %t/libtest-arm64_32.dylib | FileCheck %s --check-prefix=CHECK3283 84# CHECK32:      BindOpcodes:85# CHECK32-NEXT:   Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM86# CHECK32-NEXT:   Imm:             087# CHECK32-NEXT:   Symbol:          _foo88# CHECK32-NEXT:   Opcode:          BIND_OPCODE_SET_TYPE_IMM89# CHECK32-NEXT:   Imm:             190# CHECK32-NEXT:   Symbol:          ''91# CHECK32-NEXT:   Opcode:          BIND_OPCODE_SET_DYLIB_ORDINAL_IMM92# CHECK32-NEXT:   Imm:             293# CHECK32-NEXT:   Symbol:          ''94# CHECK32-NEXT:   Opcode:          BIND_OPCODE_SET_SEGMENT_AND_OFFSET_ULEB95# CHECK32-NEXT:   Imm:             196# CHECK32-NEXT:   ULEBExtraData:   [ 0x0 ]97# CHECK32-NEXT:   Symbol:          ''98# CHECK32-NEXT:   Opcode:          BIND_OPCODE_DO_BIND_ULEB_TIMES_SKIPPING_ULEB99# CHECK32-NEXT:   Imm:             0100# CHECK32-NEXT:   ULEBExtraData:   [ 0x2, 0x4 ]101# CHECK32-NEXT:   Symbol:          ''102# CHECK32-NEXT:   Opcode:          BIND_OPCODE_SET_ADDEND_SLEB103# CHECK32-NEXT:   Imm:             0104# CHECK32-NEXT:   SLEBExtraData:   [ 1 ]105# CHECK32-NEXT:   Symbol:          ''106# CHECK32-NEXT:   Opcode:          BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB107# CHECK32-NEXT:   Imm:             0108# CHECK32-NEXT:   ULEBExtraData:   [ 0x1004 ]109# CHECK32-NEXT:   Symbol:          ''110# CHECK32-NEXT:   Opcode:          BIND_OPCODE_SET_ADDEND_SLEB111# CHECK32-NEXT:   Imm:             0112# CHECK32-NEXT:   SLEBExtraData:   [ 0 ]113# CHECK32-NEXT:   Symbol:          ''114# CHECK32-NEXT:   Opcode:          BIND_OPCODE_DO_BIND115# CHECK32-NEXT:   Imm:             0116# CHECK32-NEXT:   Symbol:          ''117# CHECK32-NEXT:   Opcode:          BIND_OPCODE_SET_SYMBOL_TRAILING_FLAGS_IMM118# CHECK32-NEXT:   Imm:             0119# CHECK32-NEXT:   Symbol:          _bar120# CHECK32-NEXT:   Opcode:          BIND_OPCODE_SET_TYPE_IMM121# CHECK32-NEXT:   Imm:             1122# CHECK32-NEXT:   Symbol:          ''123# CHECK32-NEXT:   Opcode:          BIND_OPCODE_ADD_ADDR_ULEB124# CHECK32-NEXT:   Imm:             0125# CHECK32-NEXT:   ULEBExtraData:   [ 0xFFFFFFFFFFFFEFE8 ]126# CHECK32-NEXT:   Symbol:          ''127# CHECK32-NEXT:   Opcode:          BIND_OPCODE_DO_BIND_ADD_ADDR_IMM_SCALED128# CHECK32-NEXT:   Imm:             1129# CHECK32-NEXT:   Symbol:          ''130# CHECK32-NEXT:   Opcode:          BIND_OPCODE_DO_BIND_ADD_ADDR_ULEB131# CHECK32-NEXT:   Imm:             0132# CHECK32-NEXT:   ULEBExtraData:   [ 0x1004 ]133# CHECK32-NEXT:   Symbol:          ''134# CHECK32-NEXT:   Opcode:          BIND_OPCODE_DO_BIND135# CHECK32-NEXT:   Imm:             0136# CHECK32-NEXT:   Symbol:          ''137# CHECK32-NEXT:   Opcode:          BIND_OPCODE_DONE138# CHECK32-NEXT:   Imm:             0139# CHECK32-NEXT:   Symbol:          ''140 141# RUN: llvm-objdump --macho --bind %t/test-x86_64 | FileCheck %s -D#PTR=8 --check-prefix=BIND142# RUN: llvm-objdump --macho --bind %t/libtest-arm64_32.dylib | FileCheck %s -D#PTR=4 --check-prefix=BIND143# BIND:       Bind table:144# BIND-NEXT:  segment  section   address                               type       addend dylib     symbol145# BIND-NEXT:  __DATA   __data    0x[[#%X,DATA:]]                       pointer         0 libfoo    _foo146# BIND-NEXT:  __DATA   __data    0x[[#%.8X,DATA + mul(PTR, 2)]]        pointer         0 libfoo    _foo147# BIND-NEXT:  __DATA   __data    0x[[#%.8X,DATA + mul(PTR, 4)]]        pointer         1 libfoo    _foo148# BIND-NEXT:  __DATA   __data    0x[[#%.8X,DATA + 4096 + mul(PTR, 6)]] pointer         0 libfoo    _foo149# BIND-NEXT:  __DATA   __data    0x[[#%.8X,DATA + PTR]]                pointer         0 libfoo    _bar150# BIND-NEXT:  __DATA   __data    0x[[#%.8X,DATA + mul(PTR, 3)]]        pointer         0 libfoo    _bar151# BIND-NEXT:  __DATA   __data    0x[[#%.8X,DATA + 4096 + mul(PTR, 5)]] pointer         0 libfoo    _bar152# BIND-EMPTY:153 154#--- foo.s155.globl _foo, _bar156_foo:157  .space 4158_bar:159  .space 4160 161#--- test.s162.ifdef PTR64163.macro ptr val164  .quad \val165.endm166.endif167 168.ifdef PTR32169.macro ptr val170  .int \val171.endm172.endif173 174.data175ptr _foo176ptr _bar177ptr _foo178ptr _bar179ptr _foo+1180.zero 0x1000181ptr _bar182ptr _foo183 184.globl _main185.text186_main:187