mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-30 17:33:24 +00:00
ddbde80aae
This introduces the stack lowering emission of the stack probe function for Windows on ARM. The stack on Windows on ARM is a dynamically paged stack where any page allocation which crosses a page boundary of the following guard page will cause a page fault. This page fault must be handled by the kernel to ensure that the page is faulted in. If this does not occur and a write access any memory beyond that, the page fault will go unserviced, resulting in an abnormal program termination. The watermark for the stack probe appears to be at 4080 bytes (for accommodating the stack guard canaries and stack alignment) when SSP is enabled. Otherwise, the stack probe is emitted on the page size boundary of 4096 bytes. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@207615 91177308-0d34-0410-b5e6-96231b3b80d8
25 lines
828 B
LLVM
25 lines
828 B
LLVM
; RUN: llc -mtriple=thumbv7-windows -mcpu=cortex-a9 %s -o - \
|
|
; RUN: | FileCheck -check-prefix CHECK-DEFAULT-CODE-MODEL %s
|
|
|
|
; RUN: llc -mtriple=thumbv7-windows -mcpu=cortex-a9 -code-model=large %s -o - \
|
|
; RUN: | FileCheck -check-prefix CHECK-LARGE-CODE-MODEL %s
|
|
|
|
define arm_aapcs_vfpcc void @check_watermark() {
|
|
entry:
|
|
%buffer = alloca [4096 x i8], align 1
|
|
ret void
|
|
}
|
|
|
|
; CHECK-DEFAULT-CODE-MODEL: check_watermark:
|
|
; CHECK-DEFAULT-CODE-MODEL: movw r4, #1024
|
|
; CHECK-DEFAULT-CODE-MODEL: bl __chkstk
|
|
; CHECK-DEFAULT-CODE-MODEL: sub.w sp, sp, r4
|
|
|
|
; CHECK-LARGE-CODE-MODEL: check_watermark:
|
|
; CHECK-LARGE-CODE-MODEL: movw r4, #1024
|
|
; CHECK-LARGE-CODE-MODEL: movw r12, :lower16:__chkstk
|
|
; CHECK-LARGE-CODE-MODEL: movt r12, :upper16:__chkstk
|
|
; CHECK-LARGE-CODE-MODEL: blx r12
|
|
; CHECK-LARGE-CODE-MODEL: sub.w sp, sp, r4
|
|
|