diff --git a/core/bootstrap/image/image.factor b/core/bootstrap/image/image.factor index 36d2f7f1de..0f61eb4c83 100644 --- a/core/bootstrap/image/image.factor +++ b/core/bootstrap/image/image.factor @@ -32,7 +32,7 @@ IN: bootstrap.image : -1-offset 9 ; inline : array-start 2 bootstrap-cells object tag-number - ; -: scan@ array-start 4 - ; +: scan@ array-start bootstrap-cell - ; : wrapper@ bootstrap-cell object tag-number - ; : word-xt@ 8 bootstrap-cells object tag-number - ; : quot-array@ bootstrap-cell object tag-number - ; diff --git a/core/cpu/x86/32/bootstrap.factor b/core/cpu/x86/32/bootstrap.factor index 32d07797e7..289ae0c213 100644 --- a/core/cpu/x86/32/bootstrap.factor +++ b/core/cpu/x86/32/bootstrap.factor @@ -13,5 +13,6 @@ IN: bootstrap.x86 : scan-reg EBX ; : xt-reg ECX ; : fixnum>slot@ arg0 1 SAR ; +: next-frame@ -44 ; "resource:core/cpu/x86/bootstrap.factor" run-file diff --git a/core/cpu/x86/64/64.factor b/core/cpu/x86/64/64.factor index b91ab169de..94da29eb6d 100644 --- a/core/cpu/x86/64/64.factor +++ b/core/cpu/x86/64/64.factor @@ -13,6 +13,8 @@ PREDICATE: x86-backend amd64-backend M: amd64-backend ds-reg R14 ; M: amd64-backend rs-reg R15 ; M: amd64-backend stack-reg RSP ; +M: x86-backend xt-reg RCX ; +M: x86-backend stack-save-reg RSI ; M: temp-reg v>operand drop R13 ; diff --git a/core/cpu/x86/64/bootstrap.factor b/core/cpu/x86/64/bootstrap.factor index 9d3fa8849f..00db1ac119 100644 --- a/core/cpu/x86/64/bootstrap.factor +++ b/core/cpu/x86/64/bootstrap.factor @@ -13,5 +13,6 @@ IN: bootstrap.x86 : scan-reg RBX ; : xt-reg RCX ; : fixnum>slot@ ; +: next-frame@ -88 ; "resource:core/cpu/x86/bootstrap.factor" run-file diff --git a/core/cpu/x86/bootstrap.factor b/core/cpu/x86/bootstrap.factor index 84d0b152b8..67156d8300 100644 --- a/core/cpu/x86/bootstrap.factor +++ b/core/cpu/x86/bootstrap.factor @@ -17,7 +17,7 @@ big-endian off [ xt-reg PUSH ! save XT - xt-reg stack-reg -44 [+] LEA ! compute forward chain pointer + xt-reg stack-reg next-frame@ [+] LEA ! compute forward chain pointer xt-reg PUSH ! save forward chain pointer arg0 PUSH ! save array stack-reg 4 bootstrap-cells SUB ! reserve space for scan-save diff --git a/vm/cpu-x86.32.S b/vm/cpu-x86.32.S index 93af51c968..19a735ec88 100644 --- a/vm/cpu-x86.32.S +++ b/vm/cpu-x86.32.S @@ -25,7 +25,7 @@ and the callstack top is passed in EDX */ #define WORD_DEF_OFFSET 13 #define WORD_XT_OFFSET 29 -/* We pass a function pointer to memcpy in 16(%esp) to work around a Mac OS X +/* We pass a function pointer to memcpy to work around a Mac OS X ABI limitation which would otherwise require us to do a bizzaro PC-relative trampoline to retrieve the function address */ DEF(void,set_callstack,(F_STACK_FRAME *to, F_STACK_FRAME *from, CELL length, void *memcpy)): diff --git a/vm/cpu-x86.64.S b/vm/cpu-x86.64.S index 8aef5f9d61..1725c0cbd5 100644 --- a/vm/cpu-x86.64.S +++ b/vm/cpu-x86.64.S @@ -25,7 +25,7 @@ #define WORD_DEF_OFFSET 29 #define WORD_XT_OFFSET 61 -/* We pass a function pointer to memcpy in 16(%esp) to work around a Mac OS X +/* We pass a function pointer to memcpy to work around a Mac OS X ABI limitation which would otherwise require us to do a bizzaro PC-relative trampoline to retrieve the function address */ DEF(void,set_callstack,(F_STACK_FRAME *to, F_STACK_FRAME *from, CELL length, void *memcpy)):