Home | History | Annotate | Download | only in ARM
      1 # RUN: rm -rf %t && mkdir -p %t
      2 # RUN: llvm-mc -triple=armv7s-apple-ios7.0.0 -filetype=obj -o %t/foo.o %s
      3 # RUN: llvm-rtdyld -triple=armv7s-apple-ios7.0.0 -verify -check=%s %t/foo.o
      4 
      5         .syntax unified
      6         .section        __TEXT,__text,regular,pure_instructions
      7         .globl  bar
      8         .align  2
      9 bar:
     10 # Check lower 16-bits of section difference relocation
     11 # rtdyld-check: decode_operand(insn1, 1) = (foo$non_lazy_ptr-(nextPC+8))[15:0]
     12 insn1:
     13         movw    r0, :lower16:(foo$non_lazy_ptr-(nextPC+8))
     14 # Check upper 16-bits of section difference relocation
     15 # rtdyld-check: decode_operand(insn2, 2) = (foo$non_lazy_ptr-(nextPC+8))[31:16]
     16 insn2:
     17         movt    r0, :upper16:(foo$non_lazy_ptr-(nextPC+8))
     18 nextPC:
     19         add     r1, r0, r0
     20 
     21 # Check stub generation for external symbols by referencing a common symbol, 'baz'.
     22 # Check both the content of the stub, and the reference to the stub.
     23 # Stub should contain '0xe51ff004' (ldr pc, [pc, #-4]), followed by the target.
     24 #
     25 # rtdyld-check: *{4}(stub_addr(foo.o, __text, baz)) = 0xe51ff004
     26 # rtdyld-check: *{4}(stub_addr(foo.o, __text, baz) + 4) = baz
     27 #
     28 # rtdyld-check: decode_operand(insn3, 0) = stub_addr(foo.o, __text, baz) - (insn3 + 8)
     29 insn3:
     30         bl      baz
     31 
     32 # Check stub generation for internal symbols by referencing 'bar'.
     33 # rtdyld-check: *{4}(stub_addr(foo.o, __text, bar) + 4) = bar
     34 insn4:
     35         bl      bar
     36         bx	lr
     37 
     38 # Add 'aaa' to the common symbols to make sure 'baz' isn't at the start of the
     39 # section. This ensures that we test VANILLA relocation addends correctly.
     40         .comm   aaa, 4, 2
     41         .comm   baz, 4, 2
     42         .comm   foo, 4, 2
     43 
     44 	.section        __DATA,__data
     45 	.globl  _a
     46 	.align  2
     47 # rtdyld-check: *{4}bar_ofs = bar + 4
     48 bar_ofs:
     49 	.long   bar + 4
     50 
     51 # Check that the symbol pointer section entries are fixed up properly:
     52 # rtdyld-check: *{4}foo$non_lazy_ptr = foo
     53         .section	__DATA,__nl_symbol_ptr,non_lazy_symbol_pointers
     54   	.align	2
     55 foo$non_lazy_ptr:
     56 	.indirect_symbol	foo
     57 	.long	0
     58 
     59 .subsections_via_symbols
     60