Subversion Repositories HelenOS-historic

Rev

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

Rev 803 Rev 806
Line 190... Line 190...
190
	handler 0 IDT_ITEMS
190
	handler 0 IDT_ITEMS
191
h_end:
191
h_end:
192
 
192
 
193
	
193
	
194
syscall_entry:
194
syscall_entry:
195
	# TODO:	Switch to kernel stack
195
	# Switch to hidden gs	
-
 
196
	swapgs
-
 
197
 
-
 
198
	# TODO:	I would like LEA instead of thes 2 instrs,
-
 
199
	# why does not it work???
-
 
200
	mov %gs:0, %r10     # We have a stack in r10
-
 
201
	addq $0x0ff0, %r10
-
 
202
	
-
 
203
	movq %rsp, 0(%r10)  # Save old stack pointer to stack
-
 
204
	movq %r10, %rsp     # Change to new stack
-
 
205
	pushq %rcx          # Return address
-
 
206
	pushq %r11          # Save flags
-
 
207
 
-
 
208
	# Switch back to remain consistent
-
 
209
	swapgs 
-
 
210
 
-
 
211
	movq %r9, %rcx      # Exchange last parameter as a third
196
	call syscall_handler
212
	call syscall_handler
-
 
213
	
-
 
214
	popq %r11
197
	# Switch back
215
	popq %rcx
-
 
216
	movq 0(%rsp), %rsp
198
	sysret
217
	sysretq
199
		
218
		
200
.data
219
.data
201
.global interrupt_handler_size
220
.global interrupt_handler_size
202
 
221
 
203
interrupt_handler_size: .long (h_end-h_start)/IDT_ITEMS
222
interrupt_handler_size: .long (h_end-h_start)/IDT_ITEMS