184 lines · plain
1# RUN: llvm-mc --filetype=obj --gsframe -triple x86_64 %s -o %t.o2# RUN: llvm-readelf --sframe %t.o | FileCheck %s3 4# Tests selection for the proper FRE::BX encoding at the boundaries5# between int8_t, int16_t, and int32_t. Ensures the largest offset6# between CFA, RA, and FP governs. Align functions to 1024 to make it7# easier to interpet offsets. Some directives require alignment, so8# it isn't always possible to test exact boundaries.9 10# Also, check that irrelevant cfi directives don't create new fres,11# or affect the current ones. Checking the Start Address ensures that12# the proper FRE gets the proper checks. Using .long makes addresses13# architecture independent.14 15 .align 102416fde4_fre_offset_sizes:17# CHECK: FuncDescEntry [0] {18# CHECK: Start FRE Offset: 019# CHECK: FRE Type: Addr1 (0x0)20 .cfi_startproc21# CHECK: Frame Row Entry {22# CHECK-NEXT: Start Address: 0x023# CHECK-NEXT: Return Address Signed: No24# CHECK-NEXT: Offset Size: B1 (0x0)25# CHECK-NEXT: Base Register: SP (0x1)26# CHECK-NEXT: CFA Offset: 827# CHECK-NEXT: RA Offset: -828 .long 029# Uninteresting register no new fre, no effect on cfa30 .cfi_offset 0, 831 .long 032 .cfi_def_cfa_offset 0x7833# CHECK: Frame Row Entry {34# CHECK-NEXT: Start Address: 0x835# CHECK-NEXT: Return Address Signed: No36# CHECK-NEXT: Offset Size: B1 (0x0)37# CHECK-NEXT: Base Register: SP (0x1)38# CHECK-NEXT: CFA Offset: 12039# CHECK-NEXT: RA Offset: -840 .long 041# Uninteresting register no new fre, no effect on cfa42 .cfi_rel_offset 1, 843 .long 0 44 .cfi_def_cfa_offset 0x80 45# CHECK: Frame Row Entry {46# CHECK-NEXT: Start Address: 0x1047# CHECK-NEXT: Return Address Signed: No48# CHECK-NEXT: Offset Size: B2 (0x1)49# CHECK-NEXT: Base Register: SP (0x1)50# CHECK-NEXT: CFA Offset: 12851# CHECK-NEXT: RA Offset: -852 .long 053# Uninteresting register no new fre, no effect on cfa54 .cfi_val_offset 1, 855 .long 056 .cfi_def_cfa_offset 0x7FFF57# CHECK: Frame Row Entry {58# CHECK-NEXT: Start Address: 0x1859# CHECK-NEXT: Return Address Signed: No60# CHECK-NEXT: Offset Size: B2 (0x1)61# CHECK-NEXT: Base Register: SP (0x1)62# CHECK-NEXT: CFA Offset: 3276763# CHECK-NEXT: RA Offset: -864 .long 065 .cfi_def_cfa_offset 0x800066# CHECK: Frame Row Entry {67# CHECK-NEXT: Start Address: 0x1C68# CHECK-NEXT: Return Address Signed: No69# CHECK-NEXT: Offset Size: B4 (0x2)70# CHECK-NEXT: Base Register: SP (0x1)71# CHECK-NEXT: CFA Offset: 3276872# CHECK-NEXT: RA Offset: -873 .long 074 .cfi_def_cfa_offset 0x875# CHECK: Frame Row Entry {76# CHECK-NEXT: Start Address: 0x2077# CHECK-NEXT: Return Address Signed: No78# CHECK-NEXT: Offset Size: B1 (0x0)79# CHECK-NEXT: Base Register: SP (0x1)80# CHECK-NEXT: CFA Offset: 881# CHECK-NEXT: RA Offset: -882 .long 083 .cfi_adjust_cfa_offset 0x884# CHECK: Frame Row Entry {85# CHECK-NEXT: Start Address: 0x2486# CHECK-NEXT: Return Address Signed: No87# CHECK-NEXT: Offset Size: B1 (0x0)88# CHECK-NEXT: Base Register: SP (0x1)89# CHECK-NEXT: CFA Offset: 1690# CHECK-NEXT: RA Offset: -891 .long 092 .cfi_def_cfa_register 6 # switch to fp93# CHECK: Frame Row Entry {94# CHECK-NEXT: Start Address: 0x2895# CHECK-NEXT: Return Address Signed: No96# CHECK-NEXT: Offset Size: B1 (0x0)97# CHECK-NEXT: Base Register: FP (0x0)98# CHECK-NEXT: CFA Offset: 1699# CHECK-NEXT: RA Offset: -8100 .long 0101 .cfi_offset 7, 32102 # sp not the cfa but with large offset still changes encoding.103 .cfi_offset 6, 0x7FF8104# CHECK: Frame Row Entry {105# CHECK-NEXT: Start Address: 0x2C106# CHECK-NEXT: Return Address Signed: No107# CHECK-NEXT: Offset Size: B2 (0x1)108# CHECK-NEXT: Base Register: FP (0x0)109# CHECK-NEXT: CFA Offset: 16110# CHECK-NEXT: RA Offset: -8111# CHECK-NEXT: FP Offset: 32760112 .long 0113 .cfi_endproc114 115 .align 1024116restore_reg:117# CHECK: FuncDescEntry [1] {118# CHECK: Start FRE Offset: 0x23119# CHECK-NEXT: Num FREs: 3120 .cfi_startproc121# CHECK: Frame Row Entry {122# CHECK-NEXT: Start Address: 0x400123# CHECK-NOT FP Offset{{.*}}124# CHECK: }125 .long 0126 .cfi_offset 6, 32127# CHECK Frame Row Entry {128# CHECK-NEXT Start Address: 0x404129# CHECK: FP Offset: 32130 .long 0131 .cfi_restore 6132# CHECK: Frame Row Entry {133# CHECK-NEXT: Start Address: 0x408134# CHECK-NOT FP Offset{{.*}}135# CHECK: }136 .long 0137 .cfi_endproc138 139 .align 1024140remember_restore_state:141# CHECK: FuncDescEntry [2] {142# CHECK: Start FRE Offset: 0x2D143# CHECK-NEXT: Num FREs: 4144 .cfi_startproc145# CHECK: Frame Row Entry {146# CHECK-NEXT: Start Address: 0x800147# CHECK-NOT FP Offset{{.*}}148# CHECK: }149 .long 0150 .cfi_offset 6, 8151 .cfi_offset 7, 16152 .cfi_offset 8, 24153# CHECK: Frame Row Entry {154# CHECK-NEXT: Start Address: 0x804155# CHECK: Base Register: SP (0x1)156# CHECK-NEXT: CFA Offset: 8157# CHECK-NEXT: RA Offset: -8158# CHECK-NEXT: FP Offset: 8159# CHECK-NEXT: }160 .long 0161 .cfi_remember_state162# CHECK: Frame Row Entry {163# CHECK-NEXT: Start Address: 0x808164# CHECK: Base Register: SP (0x1)165# CHECK-NEXT: CFA Offset: 8166# CHECK-NEXT: RA Offset: -8167# CHECK-NEXT: FP Offset: 32168# CHECK-NEXT: }169 .cfi_offset 6, 32170 .cfi_offset 7, 40171 .cfi_offset 8, 48172 .long 0173# CHECK: Frame Row Entry {174# CHECK-NEXT: Start Address: 0x80C175# CHECK: Base Register: SP (0x1)176# CHECK-NEXT: CFA Offset: 8177# CHECK-NEXT: RA Offset: -8178# CHECK-NEXT: FP Offset: 8179# CHECK-NEXT: }180 .cfi_restore_state181 .long 0182 183 .cfi_endproc184