| // RUN: llvm-mc -triple x86_64-windows-msvc -filetype obj -o %t.obj %s |
| // RUN: llvm-readobj --sections --sd --relocs %t.obj | FileCheck %s |
| |
| .section nc_sect,"xr" |
| normal_call: |
| .seh_proc normal_call |
| # %bb.0: # %entry |
| subq $40, %rsp |
| .seh_stackalloc 40 |
| .seh_endprologue |
| .Limpcall0: |
| rex64 |
| callq *__imp_a(%rip) |
| nopl 8(%rax,%rax) |
| nop |
| addq $40, %rsp |
| retq |
| .seh_endproc |
| |
| .section tc_sect,"xr" |
| tail_call: |
| .Limpcall1: |
| rex64 |
| jmp *__imp_b(%rip) |
| |
| .section .retplne,"yi" |
| .asciz "RetpolineV1" |
| .long 16 |
| .secnum tc_sect |
| .long 2 |
| .secoffset .Limpcall1 |
| .long 16 |
| .secnum nc_sect |
| .long 3 |
| .secoffset .Limpcall0 |
| |
| // CHECK-LABEL: Name: .retplne (2E 72 65 74 70 6C 6E 65) |
| // CHECK-NEXT: VirtualSize: 0x0 |
| // CHECK-NEXT: VirtualAddress: 0x0 |
| // CHECK-NEXT: RawDataSize: 44 |
| // CHECK-NEXT: PointerToRawData: |
| // CHECK-NEXT: PointerToRelocations: |
| // CHECK-NEXT: PointerToLineNumbers: |
| // CHECK-NEXT: RelocationCount: 0 |
| // CHECK-NEXT: LineNumberCount: 0 |
| // CHECK-NEXT: Characteristics [ |
| // CHECK-NEXT: IMAGE_SCN_ALIGN_1BYTES |
| // CHECK-NEXT: IMAGE_SCN_LNK_INFO |
| // CHECK-NEXT: ] |
| // CHECK-NEXT: SectionData ( |
| // CHECK-NEXT: 52657470 6F6C696E 65563100 10000000 |RetpolineV1.....| |
| // CHECK-NEXT: 0010: |
| // CHECK-SAME: [[#%.2X,TCSECT:]]000000 |
| // CHECK-SAME: 02000000 |
| // CHECK-SAME: [[#%.2X,TCOFFSET:]]000000 |
| // CHECK-SAME: 10000000 |
| // CHECK-NEXT: 0020: |
| // CHECK-SAME: [[#%.2X,NCSECT:]]000000 |
| // CHECK-SAME: 03000000 |
| // CHECK-SAME: [[#%.2X,NCOFFSET:]]000000 |
| // CHECK-NEXT: ) |
| |
| // CHECK-LABEL: Relocations [ |
| // CHECK-NEXT: Section ([[#%u,NCSECT]]) nc_sect { |
| // CHECK-NEXT: 0x[[#%x,NCOFFSET + 3]] IMAGE_REL_AMD64_REL32 __imp_a |
| // CHECK-NEXT: } |
| // CHECK-NEXT: Section ([[#%u,TCSECT]]) tc_sect { |
| // CHECK-NEXT: 0x[[#%x,TCOFFSET + 3]] IMAGE_REL_AMD64_REL32 __imp_b |
| // CHECK-NEXT: } |