| OLD | NEW |
| 1 ; Tests that we generate an ELF container with fields that make sense, | 1 ; Tests that we generate an ELF container with fields that make sense, |
| 2 ; cross-validating against llvm-mc. | 2 ; cross-validating against llvm-mc. |
| 3 | 3 |
| 4 ; For the integrated ELF writer, we can't pipe the output because we need | 4 ; For the integrated ELF writer, we can't pipe the output because we need |
| 5 ; to seek backward and patch up the file headers. So, use a temporary file. | 5 ; to seek backward and patch up the file headers. So, use a temporary file. |
| 6 ; RUN: %p2i -i %s --args -O2 --verbose none -elf-writer -o %t \ | 6 ; RUN: %p2i -i %s --args -O2 --verbose none -elf-writer -o %t \ |
| 7 ; RUN: && llvm-readobj -file-headers -sections -section-data \ | 7 ; RUN: && llvm-readobj -file-headers -sections -section-data \ |
| 8 ; RUN: -relocations -symbols %t | FileCheck %s | 8 ; RUN: -relocations -symbols %t | FileCheck %s |
| 9 | 9 |
| 10 ; RUN: %p2i -i %s --args -O2 --verbose none \ | 10 ; RUN: %p2i -i %s --args -O2 --verbose none \ |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 @const_short_zero = internal constant [2 x i8] zeroinitializer, align 2 | 31 @const_short_zero = internal constant [2 x i8] zeroinitializer, align 2 |
| 32 @const_double_zero = internal constant [8 x i8] zeroinitializer, align 8 | 32 @const_double_zero = internal constant [8 x i8] zeroinitializer, align 8 |
| 33 | 33 |
| 34 | 34 |
| 35 @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 128) | 35 @addend_ptr = internal global i32 add (i32 ptrtoint (i32* @ptr to i32), i32 128) |
| 36 @const_addend_ptr = internal constant i32 add (i32 ptrtoint (i32* @ptr to i32),
i32 64) | 36 @const_addend_ptr = internal constant i32 add (i32 ptrtoint (i32* @ptr to i32),
i32 64) |
| 37 | 37 |
| 38 ; Use float/double constants to test constant pools. | 38 ; Use float/double constants to test constant pools. |
| 39 define internal float @returnFloatConst() { | 39 define internal float @returnFloatConst() { |
| 40 entry: | 40 entry: |
| 41 %f = fadd float 0x3FF3AE1480000000, 0x3FF3AE1400000000 | 41 %f = fadd float -0.0, 0x3FF3AE1400000000 |
| 42 ret float %f | 42 ret float %f |
| 43 } | 43 } |
| 44 | 44 |
| 45 define internal double @returnDoubleConst() { | 45 define internal double @returnDoubleConst() { |
| 46 entry: | 46 entry: |
| 47 %d = fadd double 1.230000e+00, 3.210000e+00 | 47 %d = fadd double 0x7FFFFFFFFFFFFFFFF, 0xFFF7FFFFFFFFFFFF |
| 48 ret double %d | 48 %d2 = fadd double %d, 0xFFF8000000000003 |
| 49 ret double %d2 |
| 49 } | 50 } |
| 50 | 51 |
| 51 define internal void @test_memcpy(i32 %iptr_dst, i32 %len) { | 52 define internal void @test_memcpy(i32 %iptr_dst, i32 %len) { |
| 52 entry: | 53 entry: |
| 53 %dst = inttoptr i32 %iptr_dst to i8* | 54 %dst = inttoptr i32 %iptr_dst to i8* |
| 54 %src = bitcast [7 x i8]* @bytes to i8* | 55 %src = bitcast [7 x i8]* @bytes to i8* |
| 55 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %src, | 56 call void @llvm.memcpy.p0i8.p0i8.i32(i8* %dst, i8* %src, |
| 56 i32 %len, i32 1, i1 false) | 57 i32 %len, i32 1, i1 false) |
| 57 ret void | 58 ret void |
| 58 } | 59 } |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 134 ; CHECK: Info: 0 | 135 ; CHECK: Info: 0 |
| 135 ; CHECK: AddressAlignment: 32 | 136 ; CHECK: AddressAlignment: 32 |
| 136 ; CHECK: EntrySize: 0 | 137 ; CHECK: EntrySize: 0 |
| 137 ; CHECK: SectionData ( | 138 ; CHECK: SectionData ( |
| 138 ; There's probably halt padding (0xF4) in there somewhere. | 139 ; There's probably halt padding (0xF4) in there somewhere. |
| 139 ; CHECK: {{.*}}F4 | 140 ; CHECK: {{.*}}F4 |
| 140 ; CHECK: ) | 141 ; CHECK: ) |
| 141 ; CHECK: } | 142 ; CHECK: } |
| 142 ; CHECK: Section { | 143 ; CHECK: Section { |
| 143 ; CHECK: Index: {{[1-9][0-9]*}} | 144 ; CHECK: Index: {{[1-9][0-9]*}} |
| 145 ; CHECK: Name: .rodata.cst4 |
| 146 ; CHECK: Type: SHT_PROGBITS |
| 147 ; CHECK: Flags [ (0x12) |
| 148 ; CHECK: SHF_ALLOC |
| 149 ; CHECK: SHF_MERGE |
| 150 ; CHECK: ] |
| 151 ; CHECK: Address: 0x0 |
| 152 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} |
| 153 ; CHECK: Size: 8 |
| 154 ; CHECK: Link: 0 |
| 155 ; CHECK: Info: 0 |
| 156 ; CHECK: AddressAlignment: 4 |
| 157 ; CHECK: EntrySize: 4 |
| 158 ; CHECK: SectionData ( |
| 159 ; CHECK: 0000: A0709D3F 00000080 |
| 160 ; CHECK: ) |
| 161 ; CHECK: } |
| 162 ; CHECK: Section { |
| 163 ; CHECK: Index: {{[1-9][0-9]*}} |
| 164 ; CHECK: Name: .rodata.cst8 |
| 165 ; CHECK: Type: SHT_PROGBITS |
| 166 ; CHECK: Flags [ (0x12) |
| 167 ; CHECK: SHF_ALLOC |
| 168 ; CHECK: SHF_MERGE |
| 169 ; CHECK: ] |
| 170 ; CHECK: Address: 0x0 |
| 171 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} |
| 172 ; CHECK: Size: 24 |
| 173 ; CHECK: Link: 0 |
| 174 ; CHECK: Info: 0 |
| 175 ; CHECK: AddressAlignment: 8 |
| 176 ; CHECK: EntrySize: 8 |
| 177 ; CHECK: SectionData ( |
| 178 ; CHECK: 0000: 03000000 0000F8FF FFFFFFFF FFFFF7FF |
| 179 ; CHECK: 0010: FFFFFFFF FFFFFFFF |
| 180 ; CHECK: ) |
| 181 ; CHECK: } |
| 182 ; CHECK: Section { |
| 183 ; CHECK: Index: {{[1-9][0-9]*}} |
| 144 ; CHECK: Name: .shstrtab | 184 ; CHECK: Name: .shstrtab |
| 145 ; CHECK: Type: SHT_STRTAB | 185 ; CHECK: Type: SHT_STRTAB |
| 146 ; CHECK: Flags [ (0x0) | 186 ; CHECK: Flags [ (0x0) |
| 147 ; CHECK: ] | 187 ; CHECK: ] |
| 148 ; CHECK: Address: 0x0 | 188 ; CHECK: Address: 0x0 |
| 149 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} | 189 ; CHECK: Offset: 0x{{[1-9A-F][0-9A-F]*}} |
| 150 ; CHECK: Size: {{[1-9][0-9]*}} | 190 ; CHECK: Size: {{[1-9][0-9]*}} |
| 151 ; CHECK: Link: 0 | 191 ; CHECK: Link: 0 |
| 152 ; CHECK: Info: 0 | 192 ; CHECK: Info: 0 |
| 153 ; CHECK: AddressAlignment: 1 | 193 ; CHECK: AddressAlignment: 1 |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 196 ; CHECK-NEXT: Name: (0) | 236 ; CHECK-NEXT: Name: (0) |
| 197 ; CHECK-NEXT: Value: 0x0 | 237 ; CHECK-NEXT: Value: 0x0 |
| 198 ; CHECK-NEXT: Size: 0 | 238 ; CHECK-NEXT: Size: 0 |
| 199 ; CHECK-NEXT: Binding: Local | 239 ; CHECK-NEXT: Binding: Local |
| 200 ; CHECK-NEXT: Type: None | 240 ; CHECK-NEXT: Type: None |
| 201 ; CHECK-NEXT: Other: 0 | 241 ; CHECK-NEXT: Other: 0 |
| 202 ; CHECK-NEXT: Section: Undefined (0x0) | 242 ; CHECK-NEXT: Section: Undefined (0x0) |
| 203 ; CHECK-NEXT: } | 243 ; CHECK-NEXT: } |
| 204 ; TODO: fill in the data symbols. | 244 ; TODO: fill in the data symbols. |
| 205 ; CHECK: Symbol { | 245 ; CHECK: Symbol { |
| 246 ; CHECK: Name: .L$double$0 |
| 247 ; CHECK-NEXT: Value: 0x10 |
| 248 ; CHECK-NEXT: Size: 0 |
| 249 ; CHECK-NEXT: Binding: Local (0x0) |
| 250 ; CHECK-NEXT: Type: None (0x0) |
| 251 ; CHECK-NEXT: Other: 0 |
| 252 ; CHECK-NEXT: Section: .rodata.cst8 |
| 253 ; CHECK-NEXT: } |
| 254 ; CHECK: Symbol { |
| 255 ; CHECK: Name: .L$double$2 |
| 256 ; CHECK-NEXT: Value: 0x0 |
| 257 ; CHECK-NEXT: Size: 0 |
| 258 ; CHECK-NEXT: Binding: Local (0x0) |
| 259 ; CHECK-NEXT: Type: None (0x0) |
| 260 ; CHECK-NEXT: Other: 0 |
| 261 ; CHECK-NEXT: Section: .rodata.cst8 |
| 262 ; CHECK-NEXT: } |
| 263 ; CHECK: Symbol { |
| 264 ; CHECK: Name: .L$float$0 |
| 265 ; CHECK-NEXT: Value: 0x4 |
| 266 ; CHECK-NEXT: Size: 0 |
| 267 ; CHECK-NEXT: Binding: Local (0x0) |
| 268 ; CHECK-NEXT: Type: None (0x0) |
| 269 ; CHECK-NEXT: Other: 0 |
| 270 ; CHECK-NEXT: Section: .rodata.cst4 |
| 271 ; CHECK-NEXT: } |
| 272 ; CHECK: Symbol { |
| 273 ; CHECK: Name: .L$float$1 |
| 274 ; CHECK-NEXT: Value: 0x0 |
| 275 ; CHECK-NEXT: Size: 0 |
| 276 ; CHECK-NEXT: Binding: Local (0x0) |
| 277 ; CHECK-NEXT: Type: None (0x0) |
| 278 ; CHECK-NEXT: Other: 0 |
| 279 ; CHECK-NEXT: Section: .rodata.cst4 |
| 280 ; CHECK-NEXT: } |
| 281 ; CHECK: Symbol { |
| 206 ; CHECK: Name: returnDoubleConst | 282 ; CHECK: Name: returnDoubleConst |
| 207 ; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}} | 283 ; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}} |
| 208 ; CHECK-NEXT: Size: 0 | 284 ; CHECK-NEXT: Size: 0 |
| 209 ; CHECK-NEXT: Binding: Local | 285 ; CHECK-NEXT: Binding: Local |
| 210 ; CHECK-NEXT: Type: None | 286 ; CHECK-NEXT: Type: None |
| 211 ; CHECK-NEXT: Other: 0 | 287 ; CHECK-NEXT: Other: 0 |
| 212 ; CHECK-NEXT: Section: .text | 288 ; CHECK-NEXT: Section: .text |
| 213 ; CHECK-NEXT: } | 289 ; CHECK-NEXT: } |
| 214 ; CHECK: Symbol { | 290 ; CHECK: Symbol { |
| 215 ; CHECK: Name: returnFloatConst | 291 ; CHECK: Name: returnFloatConst |
| (...skipping 17 matching lines...) Expand all Loading... |
| 233 ; CHECK: Symbol { | 309 ; CHECK: Symbol { |
| 234 ; CHECK: Name: _start | 310 ; CHECK: Name: _start |
| 235 ; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}} | 311 ; CHECK-NEXT: Value: 0x{{[1-9A-F][0-9A-F]*}} |
| 236 ; CHECK-NEXT: Size: 0 | 312 ; CHECK-NEXT: Size: 0 |
| 237 ; CHECK-NEXT: Binding: Global | 313 ; CHECK-NEXT: Binding: Global |
| 238 ; CHECK-NEXT: Type: Function | 314 ; CHECK-NEXT: Type: Function |
| 239 ; CHECK-NEXT: Other: 0 | 315 ; CHECK-NEXT: Other: 0 |
| 240 ; CHECK-NEXT: Section: .text | 316 ; CHECK-NEXT: Section: .text |
| 241 ; CHECK-NEXT: } | 317 ; CHECK-NEXT: } |
| 242 ; CHECK: ] | 318 ; CHECK: ] |
| OLD | NEW |