[llvm-bugs] [Bug 49600] New: probe-stack=inline-asm will produce invalid uwtables
via llvm-bugs
llvm-bugs at lists.llvm.org
Mon Mar 15 17:53:21 PDT 2021
https://bugs.llvm.org/show_bug.cgi?id=49600
Bug ID: 49600
Summary: probe-stack=inline-asm will produce invalid uwtables
Product: libraries
Version: trunk
Hardware: PC
OS: All
Status: NEW
Severity: normal
Priority: P
Component: Backend: X86
Assignee: unassignedbugs at nondot.org
Reporter: simonas+llvm.org at kazlauskas.me
CC: craig.topper at gmail.com, llvm-bugs at lists.llvm.org,
llvm-dev at redking.me.uk, pengfei.wang at intel.com,
spatel+llvm at rotateright.com
Given a function as such
; RUN: llc < %s
define void @big_stack() "probe-stack"="inline-asm" uwtable {
start:
%_two_page_stack = alloca [8192 x i8], align 1
ret void
}
the following assembly will be generated:
big_stack:
.cfi_startproc
subq $4096, %rsp
movq $0, (%rsp)
subq $3968, %rsp
.cfi_def_cfa_offset 8072
addq $8064, %rsp
.cfi_def_cfa_offset 8
retq
Here the unwind tables are not accurate while stack probing is ongoing – the
`rsp` is adjusted, but not the `cfa_offsets`. And so attempts to obtain a stack
trace will fail if the current instruction is somewhere in between the
instructions implementing the stack probing.
This also occurs with the non-unrolled implementation of the stack probing:
; RUN: llc < %s
define void @big_stack() "probe-stack"="inline-asm" uwtable {
start:
%_two_page_stack = alloca [64000 x i8], align 1
ret void
}
--->
big_stack:
.cfi_startproc
movq %rsp, %r11
subq $61440, %r11
.LBB0_1:
subq $4096, %rsp
movq $0, (%rsp)
cmpq %r11, %rsp
jne .LBB0_1
subq $2432, %rsp
.cfi_def_cfa_offset 63880
addq $63872, %rsp
.cfi_def_cfa_offset 8
retq
however in the loop case the solution needs to involve allocation of a separate
register as insertion of `.cfi` directives in a loop won't help in any way.
--
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20210316/dfac1a34/attachment.html>
More information about the llvm-bugs
mailing list