summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCliff Click <cliffc@acm.org>2025-04-14 10:42:50 -0700
committerCliff Click <cliffc@acm.org>2025-04-14 10:42:50 -0700
commit5e7223504d356cbb48c397bed0cd0012eb075935 (patch)
tree5fe6427b6d24a86205b150813446cdc69b6125da
parente1351e0f4788779e9f37a77f0abb936f2869cbfc (diff)
downloadSimple-5e7223504d356cbb48c397bed0cd0012eb075935.tar.gz
Simple-5e7223504d356cbb48c397bed0cd0012eb075935.zip
win64 shadow stack killed by calls
-rw-r--r--chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/x86_64_v2.java7
1 files changed, 6 insertions, 1 deletions
diff --git a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/x86_64_v2.java b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/x86_64_v2.java
index 53671eae..b8688f53 100644
--- a/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/x86_64_v2.java
+++ b/chapter21/src/main/java/com/seaofnodes/simple/node/cpus/x86_64_v2/x86_64_v2.java
@@ -316,7 +316,12 @@ public class x86_64_v2 extends Machine {
(1L<<FLAGS)| // Flags are killed
// Only XMM0-XMM5 are killed; XMM6-XMM15 are preserved
(1L<<XMM0) | (1L<<XMM1) | (1L<<XMM2) | (1L<<XMM3) |
- (1L<<XMM4) | (1L<<XMM5);
+ (1L<<XMM4) | (1L<<XMM5) |
+ // Shadow arg space is killed by caller: 1st 4 stack slots past RPC
+ (1L<<(MAX_REG+1)) |
+ (1L<<(MAX_REG+2)) |
+ (1L<<(MAX_REG+3)) |
+ (1L<<(MAX_REG+4)) ;
static final RegMask WIN64_CALLER_SAVE_MASK = new RegMask(WIN64_CALLER_SAVE);
static RegMask x86CallerSave() {