diff options
-rw-r--r-- | src/thread/nt32/syscall_cp.s | 23 | ||||
-rw-r--r-- | src/thread/nt64/syscall_cp.s | 27 |
2 files changed, 41 insertions, 9 deletions
diff --git a/src/thread/nt32/syscall_cp.s b/src/thread/nt32/syscall_cp.s index 1f5142c..2b06d3b 100644 --- a/src/thread/nt32/syscall_cp.s +++ b/src/thread/nt32/syscall_cp.s @@ -1,19 +1,28 @@ .text -.globl ___syscall_cp_asm -.globl ___cp_begin -.globl ___cp_end +.globl ___cp_begin +.globl ___cp_end +.globl ___cp_cancel +.globl ___syscall_cp_asm + +.def ___cp_begin; .scl 2; .type 32; .endef +.def ___cp_end; .scl 2; .type 32; .endef +.def ___cp_cancel; .scl 2; .type 32; .endef +.def ___syscall_cp_asm; .scl 2; .type 32; .endef ___syscall_cp_asm: ___cp_begin: mov (%ecx), %ecx # check content of ptr test %ecx, %ecx - jnz ___cancel # thread is pending cancellation + jnz ___cp_cancel # thread is pending cancellation jmp ___syscall ___cp_end: ret +___cp_cancel: + jmp ___cancel + .section .got$___syscall_cp_asm .global __imp____syscall_cp_asm __imp____syscall_cp_asm: @@ -31,3 +40,9 @@ __imp____cp_begin: __imp____cp_end: .long ___cp_end .linkonce discard + + .section .got$___cp_cancel + .global __imp____cp_cancel +__imp____cp_cancel: + .long ___cp_cancel + .linkonce discard diff --git a/src/thread/nt64/syscall_cp.s b/src/thread/nt64/syscall_cp.s index 7d4cbaf..27b649d 100644 --- a/src/thread/nt64/syscall_cp.s +++ b/src/thread/nt64/syscall_cp.s @@ -1,13 +1,19 @@ .text -.globl __syscall_cp_asm -.globl __cp_begin -.globl __cp_end +.global __cp_begin +.global __cp_end +.global __cp_cancel +.global __syscall_cp_asm + +.def __cp_begin; .scl 2; .type 32; .endef +.def __cp_end; .scl 2; .type 32; .endef +.def __cp_cancel; .scl 2; .type 32; .endef +.def __syscall_cp_asm; .scl 2; .type 32; .endef __syscall_cp_asm: __cp_begin: movq (%rcx), %rcx # check content of ptr test %ecx, %ecx - jnz __cancel # thread is pending cancellation + jnz __cp_cancel # thread is pending cancellation movq %rdx, %rcx # move water movq %r8, %rdx # from one glass @@ -28,19 +34,30 @@ __cp_begin: __cp_end: ret +__cp_cancel: + jmp __cancel + .section .got$__syscall_cp_asm .global __imp___syscall_cp_asm __imp___syscall_cp_asm: .quad __syscall_cp_asm - + .linkonce discard .section .got$__cp_begin .global __imp___cp_begin __imp___cp_begin: .quad __cp_begin + .linkonce discard .section .got$__cp_end .global __imp___cp_end __imp___cp_end: .quad __cp_end + .linkonce discard + + .section .got$__cp_cancel + .global __imp___cp_cancel +__imp___cp_cancel: + .quad __cp_cancel + .linkonce discard |