Changeset 4dc7a84 in mainline
- Timestamp:
- 2014-09-02T20:16:21Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 0aee9b4
- Parents:
- 21365c0
- Location:
- uspace/lib/c/arch/amd64
- Files:
-
- 1 added
- 1 deleted
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/arch/amd64/Makefile.inc
r21365c0 r4dc7a84 38 38 39 39 .PRECIOUS: arch/$(UARCH)/src/entry.o 40 41 ARCH_AUTOGENS_AG = \ 42 arch/$(UARCH)/include/libarch/fibril_context.ag 43 -
uspace/lib/c/arch/amd64/include/libarch/fibril.h
r21365c0 r4dc7a84 36 36 #define LIBC_amd64_FIBRIL_H_ 37 37 38 #include < sys/types.h>38 #include <libarch/fibril_context.h> 39 39 40 40 /* … … 53 53 } while (0) 54 54 55 /* We include only registers that must be preserved56 * during function call57 */58 typedef struct {59 uint64_t sp;60 uint64_t pc;61 62 uint64_t rbx;63 uint64_t rbp;64 65 uint64_t r12;66 uint64_t r13;67 uint64_t r14;68 uint64_t r15;69 70 uint64_t tls;71 } context_t;72 73 55 static inline uintptr_t context_get_fp(context_t *ctx) 74 56 { -
uspace/lib/c/arch/amd64/src/fibril.S
r21365c0 r4dc7a84 32 32 .global context_restore 33 33 34 #include <libarch/ context_offset.h>34 #include <libarch/fibril_context.h> 35 35 36 36 ## Save current CPU context … … 42 42 movq (%rsp), %rdx # the caller's return %eip 43 43 44 # in %edi is passed 1st argument 45 CONTEXT_SAVE_ARCH_CORE %rdi %rdx 44 # in %rdi is passed 1st argument 45 movq %rdx, CONTEXT_OFFSET_PC(%rdi) 46 movq %rsp, CONTEXT_OFFSET_SP(%rdi) 47 48 movq %rbx, CONTEXT_OFFSET_RBX(%rdi) 49 movq %rbp, CONTEXT_OFFSET_RBP(%rdi) 50 movq %r12, CONTEXT_OFFSET_R12(%rdi) 51 movq %r13, CONTEXT_OFFSET_R13(%rdi) 52 movq %r14, CONTEXT_OFFSET_R14(%rdi) 53 movq %r15, CONTEXT_OFFSET_R15(%rdi) 46 54 47 55 # save TLS 48 56 movq %fs:0, %rax 49 movq %rax, OFFSET_TLS(%rdi)57 movq %rax, CONTEXT_OFFSET_TLS(%rdi) 50 58 51 xorl %eax, %eax # context_save returns 159 xorl %eax, %eax # context_save returns 1 52 60 incl %eax 53 61 ret … … 60 68 context_restore: 61 69 62 CONTEXT_RESTORE_ARCH_CORE %rdi %rdx 70 movq CONTEXT_OFFSET_R15(%rdi), %r15 71 movq CONTEXT_OFFSET_R14(%rdi), %r14 72 movq CONTEXT_OFFSET_R13(%rdi), %r13 73 movq CONTEXT_OFFSET_R12(%rdi), %r12 74 movq CONTEXT_OFFSET_RBP(%rdi), %rbp 75 movq CONTEXT_OFFSET_RBX(%rdi), %rbx 76 77 movq CONTEXT_OFFSET_SP(%rdi), %rsp # ctx->sp -> %rsp 78 79 movq CONTEXT_OFFSET_PC(%rdi), %rdx 63 80 64 81 movq %rdx,(%rsp) 65 82 66 83 # Set thread local storage 67 movq OFFSET_TLS(%rdi), %rdi # Set arg1 to TLS addr68 movl $1, %eax # SYS_TLS_SET84 movq CONTEXT_OFFSET_TLS(%rdi), %rdi # Set arg1 to TLS addr 85 movl $1, %eax # SYS_TLS_SET 69 86 syscall 70 87 71 xorl %eax, %eax # context_restore returns 088 xorl %eax, %eax # context_restore returns 0 72 89 ret 90
Note:
See TracChangeset
for help on using the changeset viewer.