<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/60472>60472</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
libunwind's unwind_scalable_vectors.pass.cpp test fails on RV64
</td>
</tr>
<tr>
<th>Labels</th>
<td>
libunwind
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
asb
</td>
</tr>
</table>
<pre>
`ninja check-unwind` on a RV64 host and a recentish Clang HEAD results in:
```
FAIL: llvm-libunwind-shared.cfg.in :: unwind_scalable_vectors.pass.cpp (7 of 13)
******************** TEST 'llvm-libunwind-shared.cfg.in :: unwind_scalable_vectors.pass.cpp' FAILED ********************
Script:
--
: 'COMPILED WITH'; /home/asb/llvm-project/build/release/./bin/clang++ /home/asb/llvm-project/libunwind/test/unwind_scalable_vectors.pass.cpp --target=riscv64-unknown-linux-gnu -nostdinc++ -I /home/asb/llvm-project/libunwind/include -funwind-tables -std=c++2b -Werror -Wall -Wctad-maybe-unsupported -Wextra -Wshadow -Wundef -Wno-unused-command-line-argument -Wno-attributes -Wno-pessimizing-move -Wno-c++11-extensions -Wno-noexcept-type -Wno-atomic-alignment -Wno-user-defined-literals -Wno-tautological-compare -Wsign-compare -Wunused-variable -Wunused-parameter -Wunreachable-code -Wno-unused-local-typedef -D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER -D_LIBCPP_DISABLE_AVAILABILITY -fcoroutines-ts -Werror=thread-safety -Wuser-defined-warnings -L /home/asb/llvm-project/build/release/./lib/riscv64-unknown-linux-gnu -Wl,-rpath,/home/asb/llvm-project/build/release/./lib/riscv64-unknown-linux-gnu -lunwind -ldl -Wl,--export-dynamic -o /home/asb/llvm-project/build/release/runtimes/runtimes-bins/Output/unwind_scalable_vectors.pass.cpp.dir/t.tmp.exe
: 'EXECUTED AS'; /usr/bin/python3.10 /home/asb/llvm-project/libunwind/../libcxx/utils/run.py --execdir /home/asb/llvm-project/build/release/runtimes/runtimes-bins/Output/unwind_scalable_vectors.pass.cpp.dir -- /home/asb/llvm-project/build/release/runtimes/runtimes-bins/Output/unwind_scalable_vectors.pass.cpp.dir/t.tmp.exe
--
Exit Code: 1
Command Output (stdout):
--
$ ":" "COMPILED WITH"
$ "/home/asb/llvm-project/build/release/./bin/clang++" "/home/asb/llvm-project/libunwind/test/unwind_scalable_vectors.pass.cpp" "--target=riscv64-unknown-linux-gnu" "-nostdinc++" "-I" "/home/asb/llvm-project/libunwind/include" "-funwind-tables" "-std=c++2b" "-Werror" "-Wall" "-Wctad-maybe-unsupported" "-Wextra" "-Wshadow" "-Wundef" "-Wno-unused-command-line-argument" "-Wno-attributes" "-Wno-pessimizing-move" "-Wno-c++11-extensions" "-Wno-noexcept-type" "-Wno-atomic-alignment" "-Wno-user-defined-literals" "-Wno-tautological-compare" "-Wsign-compare" "-Wunused-variable" "-Wunused-parameter" "-Wunreachable-code" "-Wno-unused-local-typedef" "-D_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER" "-D_LIBCPP_DISABLE_AVAILABILITY" "-fcoroutines-ts" "-Werror=thread-safety" "-Wuser-defined-warnings" "-L" "/home/asb/llvm-project/build/release/./lib/riscv64-unknown-linux-gnu" "-Wl,-rpath,/home/asb/llvm-project/build/release/./lib/riscv64-unknown-linux-gnu" "-lunwind" "-ldl" "-Wl,--export-dynamic" "-o" "/home/asb/llvm-project/build/release/runtimes/runtimes-bins/Output/unwind_scalable_vectors.pass.cpp.dir/t.tmp.exe"
# command stderr:
/home/asb/llvm-project/libunwind/test/unwind_scalable_vectors.pass.cpp:27:12: error: starting new .cfi frame before finishing the previous one
"mv s0, ra\n"
^
<inline asm>:2:1: note: instantiated into assembly here
mv s0, ra
^
error: this directive must appear between .cfi_startproc and .cfi_endproc directives
2 errors generated.
error: command failed with exit status: 1
--
```
Below is the generated .s. The problem is not at all obvious to me, so I hope the original patch author and reviewers might have some insight (@skachkov-sc, @kito-cheng, @MaskRay). Thanks in advance.
```
.text
.attribute 4, 16
.attribute 5, "rv64i2p0_m2p0_a2p0_f2p0_d2p0_c2p0"
.file "unwind_scalable_vectors.pass.cpp"
.globl stepper # -- Begin function stepper
.p2align 1
.type stepper,@function
stepper: # @stepper
.cfi_startproc
# %bb.0: # %entry
addi sp, sp, -2032
.cfi_def_cfa_offset 2032
sd ra, 2024(sp) # 8-byte Folded Spill
sd s0, 2016(sp) # 8-byte Folded Spill
.cfi_offset ra, -8
.cfi_offset s0, -16
addi s0, sp, 2032
.cfi_def_cfa s0, 0
addi sp, sp, -784
addi a0, s0, -2048
addi a0, a0, -744
lui a1, 1
sub a1, s0, a1
sd a0, 1288(a1) # 8-byte Folded Spill
call unw_getcontext@plt
lui a0, 1
sub a0, s0, a0
ld a1, 1288(a0) # 8-byte Folded Reload
addi a0, s0, -1456
lui a2, 1
sub a2, s0, a2
sd a0, 1296(a2) # 8-byte Folded Spill
call unw_init_local@plt
# kill: def $x11 killed $x10
lui a0, 1
sub a0, s0, a0
ld a0, 1296(a0) # 8-byte Folded Reload
call unw_step@plt
mv a1, a0
li a0, 0
bge a0, a1, .LBB0_2
j .LBB0_1
.LBB0_1: # %cond.true
j .LBB0_3
.LBB0_2: # %cond.false
.Lpcrel_hi0:
auipc a0, %pcrel_hi(.L.str)
addi a0, a0, %pcrel_lo(.Lpcrel_hi0)
.Lpcrel_hi1:
auipc a1, %pcrel_hi(.L.str.1)
addi a1, a1, %pcrel_lo(.Lpcrel_hi1)
.Lpcrel_hi2:
auipc a2, %pcrel_hi(.L__PRETTY_FUNCTION__.stepper)
addi a3, a2, %pcrel_lo(.Lpcrel_hi2)
li a2, 45
call __assert_fail@plt
.LBB0_3: # %cond.end
addi a0, s0, -1456
call unw_step@plt
mv a1, a0
li a0, 0
bge a0, a1, .LBB0_5
j .LBB0_4
.LBB0_4: # %cond.true5
j .LBB0_6
.LBB0_5: # %cond.false6
.Lpcrel_hi3:
auipc a0, %pcrel_hi(.L.str)
addi a0, a0, %pcrel_lo(.Lpcrel_hi3)
.Lpcrel_hi4:
auipc a1, %pcrel_hi(.L.str.1)
addi a1, a1, %pcrel_lo(.Lpcrel_hi4)
.Lpcrel_hi5:
auipc a2, %pcrel_hi(.L__PRETTY_FUNCTION__.stepper)
addi a3, a2, %pcrel_lo(.Lpcrel_hi5)
li a2, 47
call __assert_fail@plt
.LBB0_6: # %cond.end7
addi sp, sp, 784
ld ra, 2024(sp) # 8-byte Folded Reload
ld s0, 2016(sp) # 8-byte Folded Reload
addi sp, sp, 2032
ret
.Lfunc_end0:
.size stepper, .Lfunc_end0-stepper
.cfi_endproc
# -- End function
.globl main # -- Begin function main
.p2align 1
.type main,@function
main: # @main
.cfi_startproc
# %bb.0: # %entry
addi sp, sp, -16
.cfi_def_cfa_offset 16
sd ra, 8(sp) # 8-byte Folded Spill
sd s0, 0(sp) # 8-byte Folded Spill
.cfi_offset ra, -8
.cfi_offset s0, -16
addi s0, sp, 16
.cfi_def_cfa s0, 0
call _ZL3foov
li a0, 0
ld ra, 8(sp) # 8-byte Folded Reload
ld s0, 0(sp) # 8-byte Folded Reload
addi sp, sp, 16
ret
.Lfunc_end1:
.size main, .Lfunc_end1-main
.cfi_endproc
# -- End function
.p2align 1 # -- Begin function _ZL3foov
.type _ZL3foov,@function
_ZL3foov: # @_ZL3foov
.cfi_startproc
# %bb.0: # %entry
#APP
mv s0, ra
csrr s1, vlenb
sub sp, sp, s1
# .cfi_def_cfa_expression sp + vlenb
.cfi_escape 0x0f, 0x07, 0x72, 0x00, 0x92, 0xa2, 0x38, 0x00, 0x22
call stepper
add sp, sp, s1
mv ra, s0
ret
.cfi_endproc
#NO_APP
.Lfunc_end2:
.size _ZL3foov, .Lfunc_end2-_ZL3foov
# -- End function
.type .L.str,@object # @.str
.section .rodata.str1.1,"aMS",@progbits,1
.L.str:
.asciz "unw_step(&cursor) > 0"
.size .L.str, 22
.type .L.str.1,@object # @.str.1
.L.str.1:
.asciz "/home/asb/llvm-project/libunwind/test/unwind_scalable_vectors.pass.cpp"
.size .L.str.1, 71
.type .L__PRETTY_FUNCTION__.stepper,@object # @__PRETTY_FUNCTION__.stepper
.L__PRETTY_FUNCTION__.stepper:
.asciz "void stepper()"
.size .L__PRETTY_FUNCTION__.stepper, 15
.section ".linker-options","e",@llvm_linker_options
.ident "clang version 16.0.0 (https://github.com/llvm/llvm-project/ 6a9933519dd94e48b59d07c7333dac37186734d0)"
.section ".note.GNU-stack","",@progbits
.addrsig
.addrsig_sym unw_getcontext
.addrsig_sym unw_init_local
.addrsig_sym unw_step
.addrsig_sym __assert_fail
.addrsig_sym _ZL3foov
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWllT47gW_jXiRWWXLTuLH3gIIcxQRS_VMMOd--KSrZNEjSO5JDmE-fW35N2JoVm6Z25XV0DS0dmPviMFqjXfCIBzNLlAk8szWpitVOdUJ2eJZE_naOoJLr5TnG4hfXAK8cgFQ1MPS4Ep_vbnNMRbqQ2mgmGKFaQgDNdbvMyo2ODfV4tLrEAXmdGYCxQskHeJvOZz6tX_y-HV4voGBQucZfudk_GkkuXoLVXA3HS9cbnAlkWwwNVarFOa0SSDeA-pkUq7OdXaTfMcIzKfYbnGfoBIVIsj7_-P71a3dxiR2c9QDpEZtsauLvFHdKqsuk0Vz03rWcepjQ0WVt3ll09fS0H313e_IzJDwQVG5Gord4DIFdUJIlelSbmS3yE1iFwlBc8YIlcKMqDakrl2lgtErlIbVUQuEPkhm9ZHiFwZ0Hbqh0FzHEPVBgwKLhXX6X4aOoV4EPJROBkXxcHZiAI7QmrDuEhrPZzrt6jCRZoVDLCzriNorCoaO9owFFzWTEmCnXtQSirs3NMsw859aihzdvQpAacQushzqQwwS3YwimLnXm8pk4_YuS8EgzV27oV0ClFoYE4qdzsqmDUCHKo2xQ6EqSioMYonhbEq2HEOWvMd_5uLjbOTe6hma7V834GDAaG5FDW9kHBIITeOecqhYSl3PHVoxjeiE1RoUA6DNRdgFTGgaFbzMLQwMpMbntLM6ppTZVnZg6E3rG3ZU8Wty7qZnCq6AwOqnFJA060lcFLJYOCGTFoBVtHSQZfxzfXF8uvX-PfFbfz5S_z12-K3T4v49q_bu9Wn2B4dq289qsvr28XFzSpe_Lm4vllcXN9c3_2FnXUqlSwMF6Ado5uooeDSbBVQ5mi6BvNkNevb_0iV4GKjMXZu3lcPGbekL2TpfYbI0lE5NVtElr9GRlblMHYyljUSHTjY1HTYk6A7nmJHvt1AVQjDd6B7vzoJF3b8pTB58ZpidhlXtvRds8tdOMDgWFr9Z7X84251iRe39aFklSy0ak-a_MlspQhc33tLdbu129LDwfIzPKttcPMnbF0DKePq33MIdpz_p2g0YLE6cIOXkoENj9-H6GV1cuFKkEVVbZi0IqNTyCEhRoTYeULsb0fgQ4ZkPwWFakk_H4tqxq9BpIZ0iEvN7PXbVawxquEwRKpm9givmun6_GtGNMva38cRrNtocawdVWjWDktMa0c_QLY-XYdv_dljlOuvjWFdf32AeENRQ9wbqDuGfn2CMQzsnNFDwp5LBnh4PN-iYm9hiI0j7hwgZLP-Gpw8oR1DyzahBph5lDlHyNlpP4afzerN65L8XTDXavDLAbWRlDWVWA9ZNtThCGKbRfleJ_ySA747bgNcVynWhoFS3S3s55-awcLC-cK3KIDrhFpgbagyXGywgEfspmuO17Y4cAJrqQCvueB6a9fNFnCuYM9lobEUNUxZp-72WHuILLGiaLIUrXm4-4cmq6bJWHJhTyRM9Q4FK6uVVcqqIqQpUY4LbagwnNomngsjMdUadkn2hLegasF9oRXnRkRrmtlyjRlXkBq-B7wr7F04z4EqnIB5BBClwXHpglzJtLwpl1MgWDnR7tYVb1I5TuMNCFBWQbcPya3oJqpryjNg-JGbLQaL5NpQU-gTLG9xenjtvoBMPmKuS-e3IrGrXXxXhkMmGewsgZAGU4PtfUgmVYyMxDaBllhLfI23MoeSjVR8wwXNcE5NusXVo0JpuQ0uPILSeMc3W4O3dA9Yyx3YiJQziMxR6OkHmm4f5N7RqWWPQu-BG-mkW7DQX058ovrhG31CJLKaUvGgMReYsj0VKbgvPDQgL3INHEw3alEKeVFo2fvT8cVJKZsQtZ-GnORevLMf1H6s7QezHynJva7-vMhd88xuRoS8ou3otm0ymWTIi7SBPAfbtga2gbyADRd4XYjUcClwvdpty0kJgciL_J69FixbVvYADb2GRUXVLJUdemAdfMJ5kMjd8YLIJElcr91JJiCMemr3Uca4lZ2XiVJ-OsQLyJAxg3Wcrmks12sNBg8INENeZLuTJSYeCW0bmiMS4ZF_VoO5kzwZwFcyY8Dwbc6zbMiqqmri-dOPsCrVrtWtlHPmo4uVOKeXVI1LvM4lz3qk3u696M_ZPDxepxVzr_Z3OB8nqD6dWdgxyIpy2S8rofNckbSzFVfqD91asfLJfI7I3BK-y62pbVq9qBCP8QZMKkVZq6GXZ-ZYQ29Uw57dtPNaxjqbag29V2v4DTJJ2Yse9sPJ9Fg_Mqof6elHxj0Y2cS0hB_1IBfcxGVb2fdgyeHBbgkWmMEaIxIefL-cAlaNvI87e2DMu53ds8aeSEeZsNu3Ye3L7zTuJpMNdFlf7nBvLi68uIvBd1t65VxtZzMIFmOqH5uByCSVgrlGFTDCM-jzJG_kuaaZhoZBnirI4i33ei_qES14nrYGIjJpqBCZuzeuNqp7Ch89A9otmSy3dFKafd2cPyrZf06y64_J9rtIPCfbH5FNRmWTMdlx_PXb6u7ur_jqj8_Lu-svn-PYbTHwVKGgrskXFCL9fVlX5eHkOGHj2LaUysS2QetnbZMNb0sAEG84f355zUxG8jvsmxf22oG2KMZ2Tfu7Jse7yrSfHmdA8I_kfTCSe-E_lPfhiOzJv5n3k-fyfvbGvJ--Pe9nL7U-_c4n-0ifeAQ72UcaxfF-oa_2oN1T0LrINuX2ajg42l3N_x6277hH6Yw26vX1sgf4joNX9r44aPv7F40d5eJHYTm9gNhdr7t9lJQjV49yvrt3DBn-xEtH_1Y3cuXoLfcuHPOXIv-2C4f3QVY_98LxjDdOrhtNWf_3JlhLuX8ZL7KPOO75Cuw8955a61k6Umn-WKXVqdorM985zcs31FivLl4qsWer7MT9TVG1CyOF1a51xXXK550Fhkiw-Pp12FMcvZZ5UaqVsvMl1u0zEMnR_aEfJu33meNBicIhV6B1-eCRY0QujrhV4dApzQF7B29dJs3Bm1U_Z6QeV8l0iOoxrX8G8-F69wozrIHjg5Yy9rwNpUeqUtDeaQKO5lDfAZ-_xK2DuzQkY9nay4FexhJnGOwf5N1xAo7ncZ11TWNlc04m3yE143xQ6JWEncZQM4xcJRk11C77tk9aIkLop9vyBd2yzZXcJNxoRJbtbazk1XcA1Sn_u31bq5pdMkdkmhZKS1WeGMEKD9_jaq-1NuCTeA_NrLRrDe3Z5Q40c_3ndPslX1A-Y1CpLZ75z5r0YnN4audL5LXxL5E845G95Kx9u7QRi8YtellZ7E-OzewSDBHiZlw8gHJkburvEas8gzbLbCTiiipuqFpenIEwFafyS2e8B1WeQf7U9VwPIzLfGpPr8jvvK0SuNtxsi8RN5a4O8mms8ZRGURBM_IixKIRwnkwi5s3SWRAEjKbBzJ9PZ0HIvBOXDAwT0oD72-c_HG1o-tAadlo9nfMZU5pvTiZi_bTDR69tz9L03pOepSmLcHR1eDUYJxniU_Nyf8bOAxYFET2Dc386mwRBOAujs-05m6_Xc5iTyEs84kUsSaJJmLDp1GN0RlI44-fEI4FHPOJ74SSM3JSwabAOZiSBNfG8EIUe7CjPXBsoV6rNGde6gPOpF87IWUYTyHT555GE9OqUoMnlmTovg5sUG21TiWujOy6GmwzOe1tm-sd_t2irv_xGR2Mpyr-vPCtUdv7mLCtN0IhclVb8LwAA__9clDOl">