start going back to an i386 build
This commit is contained in:
parent
8011e3fabb
commit
20946e6970
12 changed files with 69 additions and 61 deletions
|
|
@ -40,14 +40,17 @@ do
|
|||
|
||||
# Comment out the gyp auto regeneration
|
||||
for os in mac unix win; do
|
||||
sed -i ".save" \
|
||||
sed -i "" \
|
||||
-e 's/^\(Makefile: $(srcdir)\/src\/rt\/libuv\/uv\.gyp\)/#\1/' \
|
||||
mk/libuv/$ARCH/$os/Makefile
|
||||
|
||||
sed -i ".save" \
|
||||
sed -i "" \
|
||||
-e 's/^\( $(call do_cmd,regen_makefile)\)/#\1/' \
|
||||
mk/libuv/$ARCH/$os/Makefile
|
||||
|
||||
rm mk/libuv/$ARCH/$os/Makefile.save
|
||||
done
|
||||
done
|
||||
|
||||
# On Mac, GYP hardcodes a -arch i386 into the output. Fix that.
|
||||
sed -i "" \
|
||||
-e 's/-arch i386/-arch x86_64/' \
|
||||
mk/libuv/x86_64/mac/src/rt/libuv/*.mk
|
||||
|
|
|
|||
|
|
@ -54,44 +54,44 @@ swap_registers:
|
|||
// jump back into the old code.
|
||||
|
||||
// Save instruction pointer:
|
||||
popl %rax
|
||||
movl %rax, 104(%rdi)
|
||||
pop %rax
|
||||
mov %rax, 104(%rdi)
|
||||
|
||||
// Save non-volatile integer registers:
|
||||
// (including RSP)
|
||||
movl %rbx, 0(%rdi)
|
||||
movl %rsp, 8(%rdi)
|
||||
movl %rbp, 16(%rdi)
|
||||
movl %r12, 24(%rdi)
|
||||
movl %r13, 32(%rdi)
|
||||
movl %r14, 40(%rdi)
|
||||
movl %r15, 48(%rdi)
|
||||
mov %rbx, 0(%rdi)
|
||||
mov %rsp, 8(%rdi)
|
||||
mov %rbp, 16(%rdi)
|
||||
mov %r12, 24(%rdi)
|
||||
mov %r13, 32(%rdi)
|
||||
mov %r14, 40(%rdi)
|
||||
mov %r15, 48(%rdi)
|
||||
|
||||
// Save non-volatile XMM registers:
|
||||
movl %xmm0, 56(%rdi)
|
||||
movl %xmm1, 64(%rdi)
|
||||
movl %xmm2, 72(%rdi)
|
||||
movl %xmm3, 80(%rdi)
|
||||
movl %xmm4, 88(%rdi)
|
||||
movl %xmm5, 96(%rdi)
|
||||
movapd %xmm0, 56(%rdi)
|
||||
movapd %xmm1, 64(%rdi)
|
||||
movapd %xmm2, 72(%rdi)
|
||||
movapd %xmm3, 80(%rdi)
|
||||
movapd %xmm4, 88(%rdi)
|
||||
movapd %xmm5, 96(%rdi)
|
||||
|
||||
// Restore non-volatile integer registers:
|
||||
// (including RSP)
|
||||
movl 0(%rsi), %rbx
|
||||
movl 8(%rsi), %rsp
|
||||
movl 16(%rsi), %rbp
|
||||
movl 24(%rsi), %r12
|
||||
movl 32(%rsi), %r13
|
||||
movl 40(%rsi), %r14
|
||||
movl 48(%rsi), %r15
|
||||
mov 0(%rsi), %rbx
|
||||
mov 8(%rsi), %rsp
|
||||
mov 16(%rsi), %rbp
|
||||
mov 24(%rsi), %r12
|
||||
mov 32(%rsi), %r13
|
||||
mov 40(%rsi), %r14
|
||||
mov 48(%rsi), %r15
|
||||
|
||||
// Restore non-volatile XMM registers:
|
||||
movl 56(%rsi), %xmm0
|
||||
movl 64(%rsi), %xmm1
|
||||
movl 72(%rsi), %xmm2
|
||||
movl 80(%rsi), %xmm3
|
||||
movl 88(%rsi), %xmm4
|
||||
movl 96(%rsi), %xmm5
|
||||
movapd 56(%rsi), %xmm0
|
||||
movapd 64(%rsi), %xmm1
|
||||
movapd 72(%rsi), %xmm2
|
||||
movapd 80(%rsi), %xmm3
|
||||
movapd 88(%rsi), %xmm4
|
||||
movapd 96(%rsi), %xmm5
|
||||
|
||||
// Jump to the instruction pointer
|
||||
// found in regs:
|
||||
|
|
|
|||
|
|
@ -11,11 +11,11 @@ _upcall_call_c_stack:
|
|||
.globl upcall_call_c_stack
|
||||
upcall_call_c_stack:
|
||||
#endif
|
||||
pushl %rbp
|
||||
movl %rsp,%rbp // save rsp
|
||||
movl %rsi,%rsp // switch stack
|
||||
calll *%rdi
|
||||
movl %rbp,%rsp // would like to use "leave" but it's slower
|
||||
popl %rbp
|
||||
push %rbp
|
||||
mov %rsp,%rbp // save rsp
|
||||
mov %rsi,%rsp // switch stack
|
||||
call *%rdi
|
||||
mov %rbp,%rsp // would like to use "leave" but it's slower
|
||||
pop %rbp
|
||||
ret
|
||||
|
||||
|
|
|
|||
|
|
@ -33,6 +33,6 @@ void context::call(void *f, void *arg, void *stack) {
|
|||
*--sp = (uint64_t)arg;
|
||||
*--sp = 0xdeadbeef;
|
||||
|
||||
regs.regs[1] = (uint64_t)sp;
|
||||
regs.regs[RSP] = (uint64_t)sp;
|
||||
regs.ip = (uint64_t)f;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ struct registers_t {
|
|||
|
||||
class context {
|
||||
public:
|
||||
static const int RSP = 1;
|
||||
|
||||
registers_t regs;
|
||||
|
||||
context();
|
||||
|
|
@ -42,7 +44,7 @@ public:
|
|||
// function being called causes the task to fail, then we have to avoid
|
||||
// leaking space on the C stack.
|
||||
inline void *alloc_stack(size_t nbytes) {
|
||||
uint32_t bot = regs.esp;
|
||||
uint32_t bot = regs.regs[RSP];
|
||||
uint32_t top = align_down(bot - nbytes);
|
||||
|
||||
#ifdef HAVE_VALGRIND
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue