mirror of
https://github.com/matrix-construct/construct
synced 2024-12-25 15:04:10 +01:00
ircd: Update x86_64 jump_fcontext stack offset. (boost-1.81)
This commit is contained in:
parent
c0a6ce7ee2
commit
c667987391
2 changed files with 20 additions and 7 deletions
|
@ -278,7 +278,7 @@ if OPENCL
|
||||||
cl.lo: AM_CPPFLAGS := @OPENCL_CPPFLAGS@ ${AM_CPPFLAGS}
|
cl.lo: AM_CPPFLAGS := @OPENCL_CPPFLAGS@ ${AM_CPPFLAGS}
|
||||||
endif
|
endif
|
||||||
client.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS}
|
client.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS}
|
||||||
ctx_x86_64.lo: AM_CPPFLAGS := -I$(top_srcdir)/include
|
ctx_x86_64.lo: AM_CPPFLAGS := -I$(top_srcdir)/include ${BOOST_CPPFLAGS}
|
||||||
ctx.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS}
|
ctx.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS}
|
||||||
ctx_ole.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS}
|
ctx_ole.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS}
|
||||||
ctx_eh.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS}
|
ctx_eh.lo: AM_CPPFLAGS := ${AM_CPPFLAGS} ${ASIO_UNIT_CPPFLAGS}
|
||||||
|
|
|
@ -13,11 +13,24 @@
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <ircd/config.h>
|
#include <ircd/config.h>
|
||||||
|
#include <boost/version.hpp>
|
||||||
#if defined(__x86_64__) && defined(__ELF__)
|
#if defined(__x86_64__) && defined(__ELF__)
|
||||||
|
|
||||||
.file "ctx_x86_64.S"
|
.file "ctx_x86_64.S"
|
||||||
.globl jump_fcontext
|
.globl jump_fcontext
|
||||||
|
|
||||||
|
// Sizes of additional items saved on context switch
|
||||||
|
.equiv x87_ctrl_sz, 0x04
|
||||||
|
.equiv mmx_ctrl_sz, 0x04
|
||||||
|
.equiv stack_prot_sz, 0x08
|
||||||
|
|
||||||
|
// Total size of all additional items
|
||||||
|
.if BOOST_VERSION >= 108100
|
||||||
|
.equiv alloc_sz, x87_ctrl_sz + mmx_ctrl_sz + stack_prot_sz
|
||||||
|
.else
|
||||||
|
.equiv alloc_sz, x87_ctrl_sz + mmx_ctrl_sz
|
||||||
|
.endif
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.type jump_fcontext, @function
|
.type jump_fcontext, @function
|
||||||
|
|
||||||
|
@ -32,15 +45,15 @@ jump_fcontext:
|
||||||
push %r14 // store r14 0x18
|
push %r14 // store r14 0x18
|
||||||
push %r13 // store r13 0x10
|
push %r13 // store r13 0x10
|
||||||
push %r12 // store r12 0x08
|
push %r12 // store r12 0x08
|
||||||
subq $0x08, %rsp // alloc fc_mxcsr | fc_x87_cw
|
subq $alloc_sz, %rsp // additional allocation
|
||||||
// fnstcw 0x04(%rsp) // store x87 control-word
|
fnstcw 0x04(%rsp) // store x87 control-word
|
||||||
// stmxcsr 0x00(%rsp) // store MMX control- and status-word
|
stmxcsr 0x00(%rsp) // store MMX control- and status-word
|
||||||
xchgq %rsp, %rdi // swap stack
|
xchgq %rsp, %rdi // swap stack
|
||||||
movq %rsi, %rdx // store transfer_t.data (retval)
|
movq %rsi, %rdx // store transfer_t.data (retval)
|
||||||
movq %rdi, %rax // store transfer_t.fctx (retval)
|
movq %rdi, %rax // store transfer_t.fctx (retval)
|
||||||
// ldmxcsr 0x00(%rsp) // load MMX control- and status-word
|
ldmxcsr 0x00(%rsp) // load MMX control- and status-word
|
||||||
// fldcw 0x04(%rsp) // load x87 control-word
|
fldcw 0x04(%rsp) // load x87 control-word
|
||||||
addq $0x08, %rsp // free fc_mxcsr | fc_x87_cw
|
addq $alloc_sz, %rsp // free allocation
|
||||||
pop %r12 // load r12 <-- LLd miss
|
pop %r12 // load r12 <-- LLd miss
|
||||||
pop %r13 // load r13
|
pop %r13 // load r13
|
||||||
pop %r14 // load r14
|
pop %r14 // load r14
|
||||||
|
|
Loading…
Reference in a new issue