1# RUN: yaml2obj --docnum=1 %s -o %t 2# RUN: llvm-readobj -r %t | FileCheck %s --check-prefix=LLVM --match-full-lines 3# RUN: llvm-readelf -r %t | FileCheck %s --check-prefix=GNU --match-full-lines 4 5# LLVM: Relocations [ 6# LLVM-NEXT: Section ([[#]]) .crel.text { 7# LLVM-NEXT: 0x1 R_X86_64_32 g1 0x1 8# LLVM-NEXT: 0x2 R_X86_64_64 l1 0x2 9# LLVM-NEXT: 0x0 R_X86_64_32S g1 0xFFFFFFFFFFFFFFFF 10# LLVM-NEXT: 0x4 R_X86_64_32S .text 0x8000000000000000 11# LLVM-NEXT: } 12# LLVM-NEXT: Section ([[#]]) .crelnonalloc { 13# LLVM-NEXT: 0x10 R_X86_64_64 g1 0x1 14# LLVM-NEXT: 0x20 R_X86_64_64 g2 0x2 15# LLVM-NEXT: } 16# LLVM-NEXT: ] 17 18# GNU: Relocation section '.crel.text' at offset 0x48 contains 4 entries: 19# GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend 20# GNU-NEXT: 0000000000000001 000000030000000a R_X86_64_32 0000000000000000 g1 + 1 21# GNU-NEXT: 0000000000000002 0000000200000001 R_X86_64_64 0000000000000000 l1 + 2 22# GNU-NEXT: 0000000000000000 000000030000000b R_X86_64_32S 0000000000000000 g1 - 1 23# GNU-NEXT: 0000000000000004 000000010000000b R_X86_64_32S 0000000000000000 .text - 8000000000000000 24# GNU-EMPTY: 25# GNU-NEXT: Relocation section '.crelnonalloc' at offset 0xa2 contains 2 entries: 26# GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name + Addend 27# GNU-NEXT: 0000000000000010 0000000300000001 R_X86_64_64 0000000000000000 g1 + 1 28# GNU-NEXT: 0000000000000020 0000000400000001 R_X86_64_64 0000000000000000 g2 + 2 29 30--- !ELF 31FileHeader: !FileHeader 32 Class: ELFCLASS64 33 Data: ELFDATA2LSB 34 Type: ET_REL 35 Machine: EM_X86_64 36 37Sections: 38- Name: .text 39 Type: SHT_PROGBITS 40 Content: "0000000000000000" 41 Flags: [SHF_ALLOC] 42- Name: .crel.text 43 Type: SHT_CREL 44 Info: .text 45 Link: .symtab 46 Relocations: 47 - Offset: 0x1 48 Symbol: g1 49 Type: R_X86_64_32 50 Addend: 1 51 - Offset: 0x2 52 Symbol: l1 53 Type: R_X86_64_64 54 Addend: 2 55 - Offset: 0x0 56 Symbol: g1 57 Type: R_X86_64_32S 58 Addend: 0xffffffffffffffff 59 - Offset: 0x4 60 Symbol: .text 61 Type: R_X86_64_32S 62 Addend: 0x8000000000000000 63- Name: nonalloc 64 Type: SHT_PROGBITS 65 Size: 0x30 66- Name: .crelnonalloc 67 Type: SHT_CREL 68 Info: nonalloc 69 Link: .symtab 70 Relocations: 71 - Offset: 0x10 72 Symbol: g1 73 Type: R_X86_64_64 74 Addend: 1 75 - Offset: 0x20 76 Symbol: g2 77 Type: R_X86_64_64 78 Addend: 2 79 80Symbols: 81 - Name: .text 82 Type: STT_SECTION 83 Section: .text 84 - Name: l1 85 - Name: g1 86 Section: .text 87 Value: 0x0 88 Size: 4 89 Binding: STB_GLOBAL 90 - Name: g2 91 Binding: STB_GLOBAL 92 93## Check relocation formatting on ELFCLASS32 as well. 94# RUN: yaml2obj --docnum=2 %s -o %t2 95# RUN: llvm-readobj -r %t2 | FileCheck %s --check-prefix=LLVM2 --match-full-lines 96# RUN: llvm-readelf -r %t2 | FileCheck %s --check-prefix=GNU2 --match-full-lines 97 98# LLVM2: Relocations [ 99# LLVM2-NEXT: Section (2) .crel.text { 100# LLVM2-NEXT: 0x8 R_386_PC32 l1 0x1 101# LLVM2-NEXT: 0x4 R_386_32 g1 0x0 102# LLVM2-NEXT: } 103# LLVM2-NEXT: ] 104 105# GNU2: Relocation section '.crel.text' at offset {{.*}} contains 2 entries: 106# GNU2-NEXT: Offset Info Type Sym. Value Symbol's Name + Addend 107# GNU2-NEXT: 00000008 00000102 R_386_PC32 00000000 l1 + 1 108# GNU2-NEXT: 00000004 00000201 R_386_32 00000000 g1 + 0 109 110--- !ELF 111FileHeader: 112 Class: ELFCLASS32 113 Data: ELFDATA2LSB 114 Type: ET_REL 115 Machine: EM_386 116Sections: 117- Name: .text 118 Type: SHT_PROGBITS 119 Size: 0x10 120- Name: .crel.text 121 Type: SHT_CREL 122 Info: .text 123 Link: .symtab 124 Relocations: 125 - Offset: 0x8 126 Symbol: l1 127 Type: R_386_PC32 128 Addend: 1 129 - Offset: 0x4 130 Symbol: g1 131 Type: R_386_32 132Symbols: 133 - Name: l1 134 - Name: g1 135 Binding: STB_GLOBAL 136 137## Check CREL with implicit addends. 138# RUN: yaml2obj --docnum=3 %s -o %t3 139# RUN: llvm-readobj -r %t3 | FileCheck %s --check-prefix=LLVM3 --match-full-lines 140# RUN: llvm-readelf -r %t3 | FileCheck %s --check-prefix=GNU3 --match-full-lines 141 142# LLVM3: Relocations [ 143# LLVM3-NEXT: Section (3) .crel.data { 144# LLVM3-NEXT: 0x1F R_X86_64_32 g1 145# LLVM3-NEXT: 0x3F R_X86_64_64 g1 146# LLVM3-NEXT: 0x0 R_X86_64_32S l1 147# LLVM3-NEXT: } 148# LLVM3-NEXT: ] 149 150# GNU3: Relocation section '.crel.data' at offset {{.*}} contains 3 entries: 151# GNU3-NEXT: Offset Info Type Symbol's Value Symbol's Name 152# GNU3-NEXT: 000000000000001f 000000030000000a R_X86_64_32 0000000000000000 g1 153# GNU3-NEXT: 000000000000003f 0000000300000001 R_X86_64_64 0000000000000000 g1 154# GNU3-NEXT: 0000000000000000 000000020000000b R_X86_64_32S 0000000000000000 l1 155--- !ELF 156FileHeader: 157 Class: ELFCLASS64 158 Data: ELFDATA2LSB 159 Type: ET_REL 160 Machine: EM_X86_64 161Sections: 162 - Name: .text 163 Type: SHT_PROGBITS 164 - Name: .data 165 Type: SHT_PROGBITS 166 - Name: .crel.data 167 Type: SHT_CREL 168 Flags: [ SHF_INFO_LINK ] 169 Link: .symtab 170 Info: .data 171 Content: 187f030a82017787feffffffffffffff077f0a 172Symbols: 173 - Name: .text 174 Type: STT_SECTION 175 Section: .text 176 - Name: l1 177 Section: .text 178 - Name: g1 179 Section: .text 180 Binding: STB_GLOBAL 181 182## Test errors. See also relocation-errors.test. 183# RUN: yaml2obj --docnum=4 %s -o %t.err 184# RUN: llvm-readobj -r %t.err 2>&1 | FileCheck %s --check-prefix=ERR-LLVM -DFILE=%t.err 185# RUN: llvm-readelf -r %t.err 2>&1 | FileCheck %s --check-prefix=ERR-GNU -DFILE=%t.err 186 187# ERR-LLVM: Section ([[#]]) .crel.data { 188# ERR-LLVM-NEXT: warning: '[[FILE]]': unable to read relocations from SHT_CREL section with index 3: unable to decode LEB128 at offset 0x00000000: malformed uleb128, extends past end 189# ERR-LLVM-NEXT: } 190 191# ERR-GNU: warning: '[[FILE]]': unable to get the number of relocations in SHT_CREL section with index 3: unable to decode LEB128 at offset 0x00000000: malformed uleb128, extends past end 192# ERR-GNU-EMPTY: 193# ERR-GNU-NEXT: Relocation section '.crel.data' at offset 0x40 contains <?> entries: 194# ERR-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name 195# ERR-GNU-NOT: {{.}} 196 197# RUN: yaml2obj --docnum=4 -DCONTENT=08 %s -o %t.err2 198# RUN: llvm-readobj -r %t.err2 2>&1 | FileCheck %s --check-prefix=ERR2-LLVM -DFILE=%t.err2 199# RUN: llvm-readelf -r %t.err2 2>&1 | FileCheck %s --check-prefix=ERR2-GNU -DFILE=%t.err2 200 201# ERR2-LLVM: Section ([[#]]) .crel.data { 202# ERR2-LLVM-NEXT: warning: '[[FILE]]': unable to read relocations from SHT_CREL section with index 3: unexpected end of data at offset 0x1 while reading [0x1, 0x2) 203# ERR2-LLVM-NEXT: } 204 205# ERR2-GNU: Relocation section '.crel.data' at offset 0x40 contains 1 entries: 206# ERR2-GNU-NEXT: Offset Info Type Symbol's Value Symbol's Name 207# ERR2-GNU: warning: '[[FILE]]': unable to read relocations from SHT_CREL section with index 3: unexpected end of data at offset 0x1 while reading [0x1, 0x2) 208# ERR2-GNU-NOT: {{.}} 209 210--- !ELF 211FileHeader: 212 Class: ELFCLASS64 213 Data: ELFDATA2LSB 214 Type: ET_REL 215 Machine: EM_X86_64 216Sections: 217 - Name: .text 218 Type: SHT_PROGBITS 219 - Name: .data 220 Type: SHT_PROGBITS 221 - Name: .crel.data 222 Type: SHT_CREL 223 Flags: [] 224 Link: .symtab 225 Info: .data 226 Content: [[CONTENT=""]] 227Symbols: 228 - Name: .text 229 Type: STT_SECTION 230 Section: .text 231