Changeset 1a5eca4 in mainline for kernel/arch/amd64/src/asm.S
- Timestamp:
- 2016-04-27T19:36:56Z (9 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- af9dd1e
- Parents:
- d6f9fff
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/arch/amd64/src/asm.S
rd6f9fff r1a5eca4 31 31 #include <arch/mm/page.h> 32 32 #include <arch/istate_struct.h> 33 #include <arch/kseg_struct.h> 34 #include <arch/cpu.h> 33 35 34 36 .text … … 178 180 subq $(ISTATE_SOFT_SIZE + 8), %rsp 179 181 .endif 180 182 181 183 /* 182 184 * Save the general purpose registers. … … 199 201 200 202 /* 203 * Is this trap from the kernel? 204 */ 205 cmpq $(GDT_SELECTOR(KTEXT_DES)), ISTATE_OFFSET_CS(%rsp) 206 jz 0f 207 208 /* 209 * Switch to kernel FS base. 210 */ 211 swapgs 212 movl $AMD_MSR_FS, %ecx 213 movl %gs:KSEG_OFFSET_FSBASE, %eax 214 movl %gs:KSEG_OFFSET_FSBASE+4, %edx 215 wrmsr 216 swapgs 217 218 /* 201 219 * Imitate a regular stack frame linkage. 202 220 * Stop stack traces here if we came from userspace. 203 221 */ 204 xorl %edx, %edx 205 cmpq $(GDT_SELECTOR(KTEXT_DES)), ISTATE_OFFSET_CS(%rsp) 222 0: movl $0x0, %edx 206 223 cmovnzq %rdx, %rbp 207 224 … … 272 289 swapgs 273 290 274 /* 275 * %gs:0 Scratch space for this thread's user RSP 276 * %gs:8 Address to be used as this thread's kernel RSP 277 */ 278 279 movq %rsp, %gs:0 /* save this thread's user RSP */ 280 movq %gs:8, %rsp /* set this thread's kernel RSP */ 281 291 movq %rsp, %gs:KSEG_OFFSET_USTACK_RSP /* save this thread's user RSP */ 292 movq %gs:KSEG_OFFSET_KSTACK_RSP, %rsp /* set this thread's kernel RSP */ 293 282 294 /* 283 295 * Note that the space needed for the imitated istate structure has been … … 308 320 309 321 /* 322 * Switch to kernel FS base. 323 */ 324 movl $AMD_MSR_FS, %ecx 325 movl %gs:KSEG_OFFSET_FSBASE, %eax 326 movl %gs:KSEG_OFFSET_FSBASE+4, %edx 327 wrmsr 328 movq ISTATE_OFFSET_RDX(%rsp), %rdx /* restore 3rd argument */ 329 330 /* 310 331 * Save the return address and the userspace stack on locations that 311 332 * would normally be taken by them. 312 333 */ 313 movq %gs: 0, %rax334 movq %gs:KSEG_OFFSET_USTACK_RSP, %rax 314 335 movq %rax, ISTATE_OFFSET_RSP(%rsp) 315 336 movq %rcx, ISTATE_OFFSET_RIP(%rsp) … … 325 346 swapgs 326 347 sti 327 348 328 349 /* Copy the 4th argument where it is expected */ 329 350 movq %r10, %rcx
Note:
See TracChangeset
for help on using the changeset viewer.