Subversion Repositories HelenOS

Rev

Rev 2606 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2606 Rev 2777
Line 29... Line 29...
29
.text
29
.text
30
 
30
 
31
.global context_save
31
.global context_save
32
.global context_restore
32
.global context_restore
33
 
33
 
34
#include <libarch/context_offset.h>
34
#include <kernel/arch/context_offset.h>
35
 
35
 
36
## Save current CPU context
36
## Save current CPU context
37
#
37
#
38
# Save CPU context to context_t variable
38
# Save CPU context to context_t variable
39
# pointed by the 1st argument. Returns 1 in EAX.
39
# pointed by the 1st argument. Returns 1 in EAX.
40
#
40
#
41
context_save:
41
context_save:
42
	movq (%rsp), %rdx     # the caller's return %eip
42
	movq (%rsp), %rdx     # the caller's return %eip
-
 
43
	
43
	# In %edi is passed 1st argument
44
	# In %edi is passed 1st argument
44
	movq %rdx, OFFSET_PC(%rdi)
-
 
45
	movq %rsp, OFFSET_SP(%rdi)
45
	CONTEXT_SAVE_ARCH_CORE %rdi %rdx 
46
	
46
	
47
	movq %rbx, OFFSET_RBX(%rdi)
-
 
48
	movq %rbp, OFFSET_RBP(%rdi)
-
 
49
	movq %r12, OFFSET_R12(%rdi)
-
 
50
	movq %r13, OFFSET_R13(%rdi)
-
 
51
	movq %r14, OFFSET_R14(%rdi)
-
 
52
	movq %r15, OFFSET_R15(%rdi)
-
 
53
 
-
 
54
	# Save TLS
47
	# Save TLS
55
	movq %fs:0, %rax
48
	movq %fs:0, %rax
56
	movq %rax, OFFSET_TLS(%rdi)
49
	movq %rax, OFFSET_TLS(%rdi)
57
		
50
		
58
	xorq %rax,%rax		# context_save returns 1
51
	xorq %rax,%rax		# context_save returns 1
Line 64... Line 57...
64
#
57
#
65
# Restore CPU context from context_t variable
58
# Restore CPU context from context_t variable
66
# pointed by the 1st argument. Returns 0 in EAX.
59
# pointed by the 1st argument. Returns 0 in EAX.
67
#
60
#
68
context_restore:
61
context_restore:
69
	movq OFFSET_R15(%rdi), %r15
-
 
70
	movq OFFSET_R14(%rdi), %r14
-
 
71
	movq OFFSET_R13(%rdi), %r13
-
 
72
	movq OFFSET_R12(%rdi), %r12
-
 
73
	movq OFFSET_RBP(%rdi), %rbp
-
 
74
	movq OFFSET_RBX(%rdi), %rbx	
-
 
75
	
62
	
76
	movq OFFSET_SP(%rdi), %rsp   # ctx->sp -> %rsp
63
	CONTEXT_RESTORE_ARCH_CORE %rdi %rdx
77
	
64
	
78
	movq OFFSET_PC(%rdi), %rdx
-
 
79
	movq %rdx,(%rsp)
65
	movq %rdx,(%rsp)
80
 
66
 
81
	# Set thread local storage
67
	# Set thread local storage
82
	movq OFFSET_TLS(%rdi), %rdi   # Set arg1 to TLS addr
68
	movq OFFSET_TLS(%rdi), %rdi   # Set arg1 to TLS addr
83
	movq $1, %rax		# SYS_TLS_SET
69
	movq $1, %rax		# SYS_TLS_SET