1 # RUN: rm -rf %t && mkdir -p %t && cd %t 2 # RUN: llvm-mc -triple=x86_64-unknown-freebsd -filetype=obj -o t.o %s 3 # RUN: llvm-rtdyld -triple=x86_64-unknown-linux -verify -check=%s t.o -dummy-extern=extern_data=0x4200000000 4 5 # Generated from this C source: 6 # 7 # static int static_data[10]; 8 # int global_data[10] = {1, 2}; 9 # extern int extern_data[10]; 10 # 11 # int *lea_static_data() { return &static_data[0]; } 12 # int *lea_global_data() { return &global_data[0]; } 13 # int *lea_extern_data() { return &extern_data[0]; } 14 15 .text 16 .file "model.c" 17 .globl lea_static_data # -- Begin function lea_static_data 18 .p2align 4, 0x90 19 .type lea_static_data,@function 20 lea_static_data: # @lea_static_data 21 .cfi_startproc 22 # %bb.0: 23 .Ltmp0: 24 leaq .Ltmp0(%rip), %rcx 25 # rtdyld-check: decode_operand(lea_static_got, 1) = section_addr(t.o, .got) - lea_static_data 26 lea_static_got: 27 movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp0, %rax 28 addq %rax, %rcx 29 # rtdyld-check: decode_operand(lea_static_gotoff, 1) = static_data - section_addr(t.o, .got) 30 lea_static_gotoff: 31 movabsq $static_data@GOTOFF, %rax 32 addq %rcx, %rax 33 retq 34 .Lfunc_end0: 35 .size lea_static_data, .Lfunc_end0-lea_static_data 36 .cfi_endproc 37 38 39 .globl lea_global_data # -- Begin function lea_global_data 40 .p2align 4, 0x90 41 .type lea_global_data,@function 42 lea_global_data: # @lea_global_data 43 .cfi_startproc 44 # %bb.0: 45 .Ltmp1: 46 leaq .Ltmp1(%rip), %rcx 47 # rtdyld-check: decode_operand(lea_global_got, 1) = section_addr(t.o, .got) - lea_global_data 48 lea_global_got: 49 movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp1, %rax 50 addq %rax, %rcx 51 # rtdyld-check: decode_operand(lea_global_gotoff, 1) = global_data - section_addr(t.o, .got) 52 lea_global_gotoff: 53 movabsq $global_data@GOTOFF, %rax 54 addq %rcx, %rax 55 retq 56 .Lfunc_end1: 57 .size lea_global_data, .Lfunc_end1-lea_global_data 58 .cfi_endproc 59 60 61 .globl lea_extern_data # -- Begin function lea_extern_data 62 .p2align 4, 0x90 63 .type lea_extern_data,@function 64 lea_extern_data: # @lea_extern_data 65 .cfi_startproc 66 # %bb.0: 67 .Ltmp2: 68 leaq .Ltmp2(%rip), %rax 69 # rtdyld-check: decode_operand(lea_extern_got, 1) = section_addr(t.o, .got) - lea_extern_data 70 lea_extern_got: 71 movabsq $_GLOBAL_OFFSET_TABLE_-.Ltmp2, %rcx 72 addq %rcx, %rax 73 # extern_data is the only thing in the GOT, so it'll be slot 0. 74 # rtdyld-check: decode_operand(lea_extern_gotslot, 1) = 0 75 lea_extern_gotslot: 76 movabsq $extern_data@GOT, %rcx 77 movq (%rax,%rcx), %rax 78 retq 79 .Lfunc_end2: 80 .size lea_extern_data, .Lfunc_end2-lea_extern_data 81 .cfi_endproc 82 83 84 .type global_data,@object # @global_data 85 .data 86 .globl global_data 87 .p2align 4 88 global_data: 89 .long 1 # 0x1 90 .long 2 # 0x2 91 .long 0 # 0x0 92 .long 0 # 0x0 93 .long 0 # 0x0 94 .long 0 # 0x0 95 .long 0 # 0x0 96 .long 0 # 0x0 97 .long 0 # 0x0 98 .long 0 # 0x0 99 .size global_data, 40 100 101 .type static_data,@object # @static_data 102 .local static_data 103 .comm static_data,40,16 104 105