[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