blob 381465f0 (2891B) - Raw
1 // REQUIRES: x86 2 // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %s -o %t.o 3 // RUN: llvm-mc -filetype=obj -triple=x86_64-pc-linux %p/Inputs/merge.s -o %t2.o 4 // RUN: ld.lld %t.o %t2.o -o %t 5 // RUN: llvm-readobj -S --section-data --symbols %t | FileCheck %s 6 // RUN: llvm-objdump -d %t | FileCheck --check-prefix=DISASM %s 7 8 .section .mysec,"aM",@progbits,4 9 .align 4 10 .global foo 11 .hidden foo 12 .long 0x10 13 foo: 14 .long 0x42 15 bar: 16 .long 0x42 17 zed: 18 .long 0x42 19 20 // CHECK: Name: .mysec 21 // CHECK-NEXT: Type: SHT_PROGBITS 22 // CHECK-NEXT: Flags [ 23 // CHECK-NEXT: SHF_ALLOC 24 // CHECK-NEXT: SHF_MERGE 25 // CHECK-NEXT: ] 26 // CHECK-NEXT: Address: 0x200120 27 // CHECK-NEXT: Offset: 0x120 28 // CHECK-NEXT: Size: 8 29 // CHECK-NEXT: Link: 0 30 // CHECK-NEXT: Info: 0 31 // CHECK-NEXT: AddressAlignment: 4 32 // CHECK-NEXT: EntrySize: 4 33 // CHECK-NEXT: SectionData ( 34 // CHECK-NEXT: 0000: 10000000 42000000 35 // CHECK-NEXT: ) 36 37 38 // Address of the constant 0x10 = 0x200120 = 2097440 39 // Address of the constant 0x42 = 0x200124 = 2097444 40 41 // CHECK: Symbols [ 42 43 // CHECK: Name: bar 44 // CHECK-NEXT: Value: 0x200124 45 // CHECK-NEXT: Size: 0 46 // CHECK-NEXT: Binding: Loca 47 // CHECK-NEXT: Type: None 48 // CHECK-NEXT: Other: 0 49 // CHECK-NEXT: Section: .mysec 50 51 // CHECK: Name: zed 52 // CHECK-NEXT: Value: 0x200124 53 // CHECK-NEXT: Size: 0 54 // CHECK-NEXT: Binding: Local 55 // CHECK-NEXT: Type: None 56 // CHECK-NEXT: Other: 0 57 // CHECK-NEXT: Section: .mysec 58 59 // CHECK: Name: foo 60 // CHECK-NEXT: Value: 0x200124 61 // CHECK-NEXT: Size: 0 62 // CHECK-NEXT: Binding: Local 63 // CHECK-NEXT: Type: None 64 // CHECK-NEXT: Other [ (0x2) 65 // CHECK-NEXT: STV_HIDDEN 66 // CHECK-NEXT: ] 67 // CHECK-NEXT: Section: .mysec 68 69 // CHECK: ] 70 71 .text 72 .globl _start 73 _start: 74 // DISASM: Disassembly of section .text: 75 // DISASM-EMPTY: 76 // DISASM-NEXT: _start: 77 78 movl .mysec, %eax 79 // addr(0x10) = 2097440 80 // DISASM-NEXT: movl 2097440, %eax 81 82 movl .mysec+7, %eax 83 // addr(0x42) + 3 = 2097444 + 3 = 2097447 84 // DISASM-NEXT: movl 2097447, %eax 85 86 movl .mysec+8, %eax 87 // addr(0x42) = 2097444 88 // DISASM-NEXT: movl 2097444, %eax 89 90 movl bar+7, %eax 91 // addr(0x42) + 7 = 2097444 + 7 = 2097451 92 // DISASM-NEXT: movl 2097451, %eax 93 94 movl bar+8, %eax 95 // addr(0x42) + 8 = 2097444 + 8 = 2097452 96 // DISASM-NEXT: movl 2097452, %eax 97 98 movl foo, %eax 99 // addr(0x42) = 2097444 100 // DISASM-NEXT: movl 2097444, %eax 101 102 movl foo+7, %eax 103 // addr(0x42) + 7 = = 2097444 + 7 = 2097451 104 // DISASM-NEXT: movl 2097451, %eax 105 106 movl foo+8, %eax 107 // addr(0x42) + 8 = = 2097444 + 8 = 2097452 108 // DISASM-NEXT: movl 2097452, %eax 109 110 // From the other file: movl .mysec, %eax 111 // addr(0x42) = 2097444 112 // DISASM-NEXT: movl 2097444, %eax