Changeset d5a89a3 in mainline for uspace/lib/c/arch/ia32
- Timestamp:
- 2019-02-11T22:31:04Z (6 years ago)
- Children:
- aaf9789c
- Parents:
- e3272101 (diff), 4805495 (diff)
Note: this is a merge changeset, the changes displayed below correspond to the merge itself.
Use the(diff)
links above to see all the changes relative to each parent. - Location:
- uspace/lib/c/arch/ia32
- Files:
-
- 1 added
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/arch/ia32/include/libarch/config.h
re3272101 rd5a89a3 33 33 */ 34 34 35 #ifndef LIBC_ia32_CONFIG_H_36 #define LIBC_ia32_CONFIG_H_35 #ifndef _LIBC_ia32_CONFIG_H_ 36 #define _LIBC_ia32_CONFIG_H_ 37 37 38 38 #define PAGE_WIDTH 12 -
uspace/lib/c/arch/ia32/include/libarch/ddi.h
re3272101 rd5a89a3 31 31 */ 32 32 33 #ifndef LIBC_ia32_DDI_H_34 #define LIBC_ia32_DDI_H_33 #ifndef _LIBC_ia32_DDI_H_ 34 #define _LIBC_ia32_DDI_H_ 35 35 36 36 #include <ddi.h> -
uspace/lib/c/arch/ia32/include/libarch/elf_linux.h
re3272101 rd5a89a3 33 33 */ 34 34 35 #ifndef LIBC_ia32_ELF_LINUX_H_36 #define LIBC_ia32_ELF_LINUX_H_35 #ifndef _LIBC_ia32_ELF_LINUX_H_ 36 #define _LIBC_ia32_ELF_LINUX_H_ 37 37 38 38 #include <libarch/istate.h> -
uspace/lib/c/arch/ia32/include/libarch/faddr.h
re3272101 rd5a89a3 33 33 */ 34 34 35 #ifndef LIBC_ia32_FADDR_H_36 #define LIBC_ia32_FADDR_H_35 #ifndef _LIBC_ia32_FADDR_H_ 36 #define _LIBC_ia32_FADDR_H_ 37 37 38 38 #include <types/common.h> -
uspace/lib/c/arch/ia32/include/libarch/fibril.h
re3272101 rd5a89a3 33 33 */ 34 34 35 #ifndef LIBC_ia32_FIBRIL_H_36 #define LIBC_ia32_FIBRIL_H_35 #ifndef _LIBC_ia32_FIBRIL_H_ 36 #define _LIBC_ia32_FIBRIL_H_ 37 37 38 38 #include <types/common.h> -
uspace/lib/c/arch/ia32/include/libarch/fibril_context.h
re3272101 rd5a89a3 27 27 */ 28 28 29 #ifndef LIBC_ARCH_FIBRIL_CONTEXT_H_30 #define LIBC_ARCH_FIBRIL_CONTEXT_H_29 #ifndef _LIBC_ARCH_FIBRIL_CONTEXT_H_ 30 #define _LIBC_ARCH_FIBRIL_CONTEXT_H_ 31 31 32 #define CONTEXT_OFFSET_SP 0x0033 #define CONTEXT_OFFSET_PC 0x0434 #define CONTEXT_OFFSET_EBX 0x0835 #define CONTEXT_OFFSET_ESI 0x0c36 #define CONTEXT_OFFSET_EDI 0x1037 #define CONTEXT_OFFSET_EBP 0x1438 #define CONTEXT_OFFSET_TLS 0x1839 #define CONTEXT_SIZE 0x1c32 #define __CONTEXT_OFFSET_SP 0x00 33 #define __CONTEXT_OFFSET_PC 0x04 34 #define __CONTEXT_OFFSET_EBX 0x08 35 #define __CONTEXT_OFFSET_ESI 0x0c 36 #define __CONTEXT_OFFSET_EDI 0x10 37 #define __CONTEXT_OFFSET_EBP 0x14 38 #define __CONTEXT_OFFSET_TLS 0x18 39 #define __CONTEXT_SIZE 0x1c 40 40 41 41 #ifndef __ASSEMBLER__ … … 44 44 45 45 /* We include only registers that must be preserved during function call. */ 46 typedef struct context {46 typedef struct __context { 47 47 uint32_t sp; 48 48 uint32_t pc; … … 52 52 uint32_t ebp; 53 53 uint32_t tls; 54 } context_t;54 } __context_t; 55 55 56 56 #endif -
uspace/lib/c/arch/ia32/include/libarch/rtld/dynamic.h
re3272101 rd5a89a3 33 33 */ 34 34 35 #ifndef LIBC_ia32_RTLD_DYNAMIC_H_36 #define LIBC_ia32_RTLD_DYNAMIC_H_35 #ifndef _LIBC_ia32_RTLD_DYNAMIC_H_ 36 #define _LIBC_ia32_RTLD_DYNAMIC_H_ 37 37 38 38 typedef struct { -
uspace/lib/c/arch/ia32/include/libarch/rtld/elf_dyn.h
re3272101 rd5a89a3 33 33 */ 34 34 35 #ifndef LIBC_ia32_RTLD_ELF_DYN_H_36 #define LIBC_ia32_RTLD_ELF_DYN_H_35 #ifndef _LIBC_ia32_RTLD_ELF_DYN_H_ 36 #define _LIBC_ia32_RTLD_ELF_DYN_H_ 37 37 38 38 /* -
uspace/lib/c/arch/ia32/include/libarch/syscall.h
re3272101 rd5a89a3 34 34 */ 35 35 36 #ifndef LIBC_ia32_SYSCALL_H_37 #define LIBC_ia32_SYSCALL_H_36 #ifndef _LIBC_ia32_SYSCALL_H_ 37 #define _LIBC_ia32_SYSCALL_H_ 38 38 39 39 #include <abi/syscall.h> -
uspace/lib/c/arch/ia32/include/libarch/thread.h
re3272101 rd5a89a3 33 33 */ 34 34 35 #ifndef LIBC_ia32_THREAD_H_36 #define LIBC_ia32_THREAD_H_35 #ifndef _LIBC_ia32_THREAD_H_ 36 #define _LIBC_ia32_THREAD_H_ 37 37 38 38 #endif -
uspace/lib/c/arch/ia32/include/libarch/tls.h
re3272101 rd5a89a3 33 33 */ 34 34 35 #ifndef LIBC_ia32_TLS_H_36 #define LIBC_ia32_TLS_H_35 #ifndef _LIBC_ia32_TLS_H_ 36 #define _LIBC_ia32_TLS_H_ 37 37 38 38 #define CONFIG_TLS_VARIANT_2 -
uspace/lib/c/arch/ia32/src/fibril.S
re3272101 rd5a89a3 37 37 # pointed by the 1st argument. Returns 0 in EAX. 38 38 # 39 FUNCTION_BEGIN(__ setjmp)39 FUNCTION_BEGIN(__context_save) 40 40 movl 0(%esp), %eax # the caller's return %eip 41 41 movl 4(%esp), %edx # address of the context variable to save context to 42 42 43 43 # save registers to the context structure 44 movl %esp, CONTEXT_OFFSET_SP(%edx) # %esp -> ctx->sp45 movl %eax, CONTEXT_OFFSET_PC(%edx) # %eip -> ctx->pc46 movl %ebx, CONTEXT_OFFSET_EBX(%edx) # %ebx -> ctx->ebx47 movl %esi, CONTEXT_OFFSET_ESI(%edx) # %esi -> ctx->esi48 movl %edi, CONTEXT_OFFSET_EDI(%edx) # %edi -> ctx->edi49 movl %ebp, CONTEXT_OFFSET_EBP(%edx) # %ebp -> ctx->ebp44 movl %esp, __CONTEXT_OFFSET_SP(%edx) # %esp -> ctx->sp 45 movl %eax, __CONTEXT_OFFSET_PC(%edx) # %eip -> ctx->pc 46 movl %ebx, __CONTEXT_OFFSET_EBX(%edx) # %ebx -> ctx->ebx 47 movl %esi, __CONTEXT_OFFSET_ESI(%edx) # %esi -> ctx->esi 48 movl %edi, __CONTEXT_OFFSET_EDI(%edx) # %edi -> ctx->edi 49 movl %ebp, __CONTEXT_OFFSET_EBP(%edx) # %ebp -> ctx->ebp 50 50 51 51 # save TLS 52 52 movl %gs:0, %eax 53 movl %eax, CONTEXT_OFFSET_TLS(%edx) # tls -> ctx->tls53 movl %eax, __CONTEXT_OFFSET_TLS(%edx) # tls -> ctx->tls 54 54 55 xorl %eax, %eax # __ setjmpreturns 055 xorl %eax, %eax # __context_save returns 0 56 56 ret 57 FUNCTION_END(__ setjmp)57 FUNCTION_END(__context_save) 58 58 59 59 ## Restore saved CPU context … … 62 62 # pointed by the 1st argument. Returns second argument in EAX. 63 63 # 64 FUNCTION_BEGIN(__ longjmp)64 FUNCTION_BEGIN(__context_restore) 65 65 movl 4(%esp), %eax # address of the context variable to restore context from 66 66 movl 8(%esp), %ecx # return value 67 67 68 68 # restore registers from the context structure 69 movl CONTEXT_OFFSET_SP(%eax),%esp # ctx->sp -> %esp70 movl CONTEXT_OFFSET_PC(%eax),%edx # ctx->pc -> \pc71 movl CONTEXT_OFFSET_EBX(%eax),%ebx # ctx->ebx -> %ebx72 movl CONTEXT_OFFSET_ESI(%eax),%esi # ctx->esi -> %esi73 movl CONTEXT_OFFSET_EDI(%eax),%edi # ctx->edi -> %edi74 movl CONTEXT_OFFSET_EBP(%eax),%ebp # ctx->ebp -> %ebp69 movl __CONTEXT_OFFSET_SP(%eax),%esp # ctx->sp -> %esp 70 movl __CONTEXT_OFFSET_PC(%eax),%edx # ctx->pc -> \pc 71 movl __CONTEXT_OFFSET_EBX(%eax),%ebx # ctx->ebx -> %ebx 72 movl __CONTEXT_OFFSET_ESI(%eax),%esi # ctx->esi -> %esi 73 movl __CONTEXT_OFFSET_EDI(%eax),%edi # ctx->edi -> %edi 74 movl __CONTEXT_OFFSET_EBP(%eax),%ebp # ctx->ebp -> %ebp 75 75 76 76 movl %edx, 0(%esp) # ctx->pc -> saver's return %eip 77 77 78 78 # set thread local storage 79 movl CONTEXT_OFFSET_TLS(%eax), %edx # Set arg1 to TLS addr79 movl __CONTEXT_OFFSET_TLS(%eax), %edx # Set arg1 to TLS addr 80 80 movl %edx, %gs:0 81 81 82 82 movl %ecx, %eax 83 83 ret 84 FUNCTION_END(__ longjmp)84 FUNCTION_END(__context_restore) 85 85
Note:
See TracChangeset
for help on using the changeset viewer.