[PATCH] D49055: [compiler-rt] [builtins] Implement the __chkstk function for ARM for MinGW
Martin Storsjö via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Jul 7 14:56:23 PDT 2018
mstorsjo created this revision.
mstorsjo added reviewers: compnerd, smeenai, peter.smith.
Herald added subscribers: Sanitizers, chrib, kristof.beyls, mgorny, dberris.
Herald added a reviewer: javed.absar.
On ARM (contrary to both x86 and ARM64), this function is available for linking in from kernel32.dll, but it's not allowed to link that function from there in Windows Store apps.
Repository:
rCRT Compiler Runtime
https://reviews.llvm.org/D49055
Files:
lib/builtins/CMakeLists.txt
lib/builtins/arm/chkstk.S
Index: lib/builtins/arm/chkstk.S
===================================================================
--- /dev/null
+++ lib/builtins/arm/chkstk.S
@@ -0,0 +1,34 @@
+// This file is dual licensed under the MIT and the University of Illinois Open
+// Source Licenses. See LICENSE.TXT for details.
+
+#include "../assembly.h"
+
+// __chkstk routine
+// This routine is windows specific.
+// http://msdn.microsoft.com/en-us/library/ms648426.aspx
+
+// This clobbers the register r12, and uses r5 and r6 as temporaries
+// by backing them up and restoring them afterwards.
+// Does not modify any memory or the stack pointer.
+
+// movw r4, #256 // Number of bytes of stack, in units of 4 byte
+// bl __chkstk
+// sub.w sp, sp, r4
+
+#define PAGE_SIZE 4096
+
+ .p2align 2
+DEFINE_COMPILERRT_FUNCTION(__chkstk)
+ lsl r4, r4, #2
+ mov r12, sp
+ push {r5, r6}
+ mov r5, r4
+1:
+ sub r12, r12, #PAGE_SIZE
+ subs r5, r5, #PAGE_SIZE
+ ldr r6, [r12]
+ bgt 1b
+
+ pop {r5, r6}
+ bx lr
+END_COMPILERRT_FUNCTION(__chkstk)
Index: lib/builtins/CMakeLists.txt
===================================================================
--- lib/builtins/CMakeLists.txt
+++ lib/builtins/CMakeLists.txt
@@ -406,6 +406,7 @@
arm/aeabi_ldivmod.S
arm/aeabi_uidivmod.S
arm/aeabi_uldivmod.S
+ arm/chkstk.S
divmoddi4.c
divmodsi4.c
divdi3.c
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D49055.154503.patch
Type: text/x-patch
Size: 1487 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180707/daec8870/attachment.bin>
More information about the llvm-commits
mailing list